<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[진재명의 블로그]]></title><description><![CDATA[애플 플랫폼 개발자 입니다.]]></description><link>https://blog.jaemyeong.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 05:50:35 GMT</lastBuildDate><atom:link href="https://blog.jaemyeong.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Swift를 이용한 iOS에서 커스텀 폰트 사용하기: CTFontManagerRegisterFontsForURL 및 CTFontManagerUnregisterFontsForURL 활용법]]></title><description><![CDATA[iOS 애플리케이션 개발 시, 표준 폰트 외에도 개성 있는 디자인을 위해 커스텀 폰트를 사용하는 것은 매우 흔한 일입니다. 오늘은 Swift를 사용하여 iOS 앱에서 커스텀 폰트를 쉽게 등록하고 사용하는 방법에 대해 알아보겠습니다.
커스텀 폰트 등록하기
iOS에서 커스텀 폰트를 사용하기 위해서는 먼저 폰트 파일을 프로젝트에 추가하고, CTFontManagerRegisterFontsForURL 함수를 사용하여 시스템에 폰트를 등록해야 합니다. 이...]]></description><link>https://blog.jaemyeong.com/swift-ios-ctfontmanagerregisterfontsforurl-ctfontmanagerunregisterfontsforurl</link><guid isPermaLink="true">https://blog.jaemyeong.com/swift-ios-ctfontmanagerregisterfontsforurl-ctfontmanagerunregisterfontsforurl</guid><category><![CDATA[WIL]]></category><category><![CDATA[Swift]]></category><category><![CDATA[Swift Package Manager]]></category><dc:creator><![CDATA[진재명]]></dc:creator><pubDate>Thu, 18 Jan 2024 11:24:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/zw07kVDaHPw/upload/2fbb1d597c4c0f093520d219aad0d89a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>iOS 애플리케이션 개발 시, 표준 폰트 외에도 개성 있는 디자인을 위해 커스텀 폰트를 사용하는 것은 매우 흔한 일입니다. 오늘은 Swift를 사용하여 iOS 앱에서 커스텀 폰트를 쉽게 등록하고 사용하는 방법에 대해 알아보겠습니다.</p>
<h2 id="heading-7luk7iqk7ywaio2pso2kucdrk7hroz3tlzjqula">커스텀 폰트 등록하기</h2>
<p>iOS에서 커스텀 폰트를 사용하기 위해서는 먼저 폰트 파일을 프로젝트에 추가하고, <code>CTFontManagerRegisterFontsForURL</code> 함수를 사용하여 시스템에 폰트를 등록해야 합니다. 이 과정은 다음과 같습니다.</p>
<ol>
<li><p><strong>폰트 파일 추가</strong>: 프로젝트에 <code>.otf</code> 또는 <code>.ttf</code> 형식의 폰트 파일을 추가합니다.</p>
</li>
<li><p><strong>폰트 등록 코드 작성</strong>: Swift에서 <code>CTFontManagerRegisterFontsForURL</code> 함수를 사용하여 폰트를 등록합니다.</p>
</li>
</ol>
<h3 id="heading-7jii7kccioy9loutna">예제 코드</h3>
<p>아래는 커스텀 폰트를 등록하는 간단한 Swift 코드 예제입니다. 이 코드는 폰트 파일의 URL을 찾고, 해당 URL에서 폰트를 등록하는 과정을 보여줍니다.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">let</span> url = <span class="hljs-type">Bundle</span>.main.url(forResource: <span class="hljs-keyword">self</span>.fontName, withExtension: <span class="hljs-string">"otf"</span>)!

<span class="hljs-keyword">var</span> error: <span class="hljs-type">Unmanaged</span>&lt;<span class="hljs-type">CFError</span>&gt;?

<span class="hljs-keyword">let</span> result = <span class="hljs-type">CTFontManagerRegisterFontsForURL</span>(url <span class="hljs-keyword">as</span> <span class="hljs-type">CFURL</span>, .process, &amp;error)

<span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> error = error?.takeUnretainedValue() {
    <span class="hljs-built_in">fatalError</span>(<span class="hljs-string">"\(error)"</span>)
}
</code></pre>
<p>이 코드에서는 <code>Bundle.main.url</code>을 사용하여 폰트 파일의 URL을 얻고, <code>CTFontManagerRegisterFontsForURL</code> 함수를 호출하여 시스템에 폰트를 등록합니다. 만약 폰트 등록 과정에서 오류가 발생한다면 앱은 종료 될 것 입니다.</p>
<h2 id="heading-kirsu6tsiqtthyag7yw7yq4ioutseuhnsdtlbtsojztlzjqulaqkg"><strong>커스텀 폰트 등록 해제하기</strong></h2>
<p>폰트를 등록하는 것만큼 중요한 것이 폰트를 필요하지 않을 때 올바르게 등록 해제하는 것입니다. 이는 리소스 관리 측면에서 특히 중요하며, <code>CTFontManagerUnregisterFontsForURL</code> 함수를 사용하여 수행할 수 있습니다. 폰트 등록 해제는 주로 앱의 특정 부분이나 기능이 더 이상 사용되지 않을 때, 또는 앱이 종료될 때 수행합니다.</p>
<h3 id="heading-kirsmijsojwg7l2u65ockio"><strong>예제 코드</strong></h3>
<p>아래는 커스텀 폰트를 등록 해제하는 Swift 코드 예제입니다. 이 코드는 앞서 등록했던 폰트의 URL을 사용하여 해당 폰트를 시스템에서 등록 해제합니다.</p>
<pre><code class="lang-swift"><span class="hljs-keyword">let</span> url = <span class="hljs-type">Bundle</span>.main.url(forResource: <span class="hljs-keyword">self</span>.fontName, withExtension: <span class="hljs-string">"otf"</span>)!

<span class="hljs-keyword">var</span> error: <span class="hljs-type">Unmanaged</span>&lt;<span class="hljs-type">CFError</span>&gt;?

<span class="hljs-keyword">let</span> result = <span class="hljs-type">CTFontManagerUnregisterFontsForURL</span>(url <span class="hljs-keyword">as</span> <span class="hljs-type">CFURL</span>, .process, &amp;error)

<span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> error = error?.takeUnretainedValue() {
    <span class="hljs-built_in">fatalError</span>(<span class="hljs-string">"\(error)"</span>)
}
</code></pre>
<p>이 코드는 <code>CTFontManagerUnregisterFontsForURL</code> 함수를 호출하여 폰트를 등록 해제합니다. 이 과정에서 오류가 발생하면 앱은 종료 될 것입니다.</p>
<h2 id="heading-kirtj7dtirgg6rsa66as7j2yioykkeyaloyessoq"><strong>폰트 관리의 중요성</strong></h2>
<p>iOS 앱 개발에서 커스텀 폰트를 사용하는 것은 앱의 디자인을 개선하는 훌륭한 방법입니다. 하지만, 폰트를 적절히 관리하는 것도 중요합니다. 폰트를 필요할 때만 등록하고, 더 이상 사용하지 않을 때는 등록 해제하여 리소스를 효율적으로 사용하는 것이 좋습니다.</p>
]]></content:encoded></item><item><title><![CDATA[Xcode, Swift 추천 사이트]]></title><description><![CDATA[Xcode Tips

Swift Version

Xcode - 지원 - Apple Developer

What's new in Swift? - Hacking with Swift

What's new in Swift?]]></description><link>https://blog.jaemyeong.com/xcode-swift</link><guid isPermaLink="true">https://blog.jaemyeong.com/xcode-swift</guid><category><![CDATA[Swift]]></category><category><![CDATA[Xcode]]></category><dc:creator><![CDATA[진재명]]></dc:creator><pubDate>Tue, 09 Jan 2024 15:49:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/J4kK8b9Fgj8/upload/104c73fa86f71c1038f1089c35ac4f91.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<ul>
<li><p><a target="_blank" href="https://xcode.tips">Xcode Tips</a></p>
</li>
<li><p><a target="_blank" href="https://swiftversion.net">Swift Version</a></p>
</li>
<li><p><a target="_blank" href="https://developer.apple.com/kr/support/xcode/">Xcode - 지원 - Apple Developer</a></p>
</li>
<li><p><a target="_blank" href="https://www.hackingwithswift.com/swift">What's new in Swift? - Hacking with Swift</a></p>
</li>
<li><p><a target="_blank" href="https://www.whatsnewinswift.com/">What's new in Swift?</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Swift Package Manager에 관하여]]></title><description><![CDATA[5.4 이전 Swift 도구 버전에서는 패키지 매니페스트가 // swift-tools-version: 문자열로 시작하고 그 뒤에 버전 번호 지정자가 와야 합니다. 버전 5.4 이상에서는 공백 요구 사항이 완화되었습니다. 다음 코드 목록은 Swift 도구 버전에 대한 유효한 선언의 몇 가지 예를 보여줍니다.
// swift-tools-version:3.0.2
// swift-tools-version:3.1
// swift-tools-version...]]></description><link>https://blog.jaemyeong.com/swift-package-manager</link><guid isPermaLink="true">https://blog.jaemyeong.com/swift-package-manager</guid><category><![CDATA[WIL]]></category><category><![CDATA[Swift]]></category><category><![CDATA[Swift Package Manager]]></category><dc:creator><![CDATA[진재명]]></dc:creator><pubDate>Tue, 09 Jan 2024 15:43:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/isA8_lAgDjE/upload/69aebede974b3de4e123d4ec42bf9978.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>5.4 이전 Swift 도구 버전에서는 패키지 매니페스트가 <code>// swift-tools-version:</code> 문자열로 시작하고 그 뒤에 버전 번호 지정자가 와야 합니다. 버전 5.4 이상에서는 공백 요구 사항이 완화되었습니다. 다음 코드 목록은 Swift 도구 버전에 대한 유효한 선언의 몇 가지 예를 보여줍니다.</p>
<pre><code class="lang-swift"><span class="hljs-comment">// swift-tools-version:3.0.2</span>
<span class="hljs-comment">// swift-tools-version:3.1</span>
<span class="hljs-comment">// swift-tools-version:4.0</span>
<span class="hljs-comment">// swift-tools-version:5.3</span>
<span class="hljs-comment">// swift-tools-version: 5.6</span>
</code></pre>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Swift 5.6 버전 부터 Package.resolved 파일의 버전이 2로 설정 되는 것 같습니다.</div>
</div>

<blockquote>
<p><a target="_blank" href="https://developer.apple.com/documentation/packagedescription/package">Apple / PackageDescription / Package</a></p>
</blockquote>
]]></content:encoded></item><item><title><![CDATA[블로그 이전]]></title><description><![CDATA[워드프레스는 뭔가 설정이 많고 복잡하여 버리고 이전했습니다.]]></description><link>https://blog.jaemyeong.com/67iu66gc6re4ioydtoygha</link><guid isPermaLink="true">https://blog.jaemyeong.com/67iu66gc6re4ioydtoygha</guid><category><![CDATA[일기]]></category><dc:creator><![CDATA[진재명]]></dc:creator><pubDate>Wed, 10 May 2023 14:31:27 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/HrnAxAUwle8/upload/a8afa6a5a20ff13acc94609182d87a55.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>워드프레스는 뭔가 설정이 많고 복잡하여 버리고 이전했습니다.</p>
]]></content:encoded></item></channel></rss>