<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Jacob iOS</title>
        <link>https://velog.io/</link>
        <description>iOS Dev</description>
        <lastBuildDate>Wed, 11 Jan 2023 05:09:06 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>Jacob iOS</title>
            <url>https://velog.velcdn.com/images/jacob-ios/profile/3b5fd81b-66a4-4de7-83da-4e581644db1c/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. Jacob iOS. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jacob-ios" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[iOS 앱 아이콘을 다른 회사의 아이콘으로 변경해도 될까? - Alternate App Icon]]></title>
            <link>https://velog.io/@jacob-ios/iOS-%EC%95%B1-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9D%84-%EB%8B%A4%EB%A5%B8-%ED%9A%8C%EC%82%AC%EC%9D%98-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9C%BC%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%B4%EB%8F%84-%EB%90%A0%EA%B9%8C-Alternate-App-Icon</link>
            <guid>https://velog.io/@jacob-ios/iOS-%EC%95%B1-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9D%84-%EB%8B%A4%EB%A5%B8-%ED%9A%8C%EC%82%AC%EC%9D%98-%EC%95%84%EC%9D%B4%EC%BD%98%EC%9C%BC%EB%A1%9C-%EB%B3%80%EA%B2%BD%ED%95%B4%EB%8F%84-%EB%90%A0%EA%B9%8C-Alternate-App-Icon</guid>
            <pubDate>Wed, 11 Jan 2023 05:09:06 GMT</pubDate>
            <description><![CDATA[<p>사업기획팀에서 문의가 들어왔다.</p>
<blockquote>
<p><code>렌톡</code>의 앱 아이콘을 다른 업체의 아이콘으로 변경할 수 있나요?</p>
</blockquote>
<p>기능 요구사항부터 정리해보자.</p>
<p><code>렌톡</code>은 탁송 중계 플랫폼의 탁송 요청용 앱이며,<br>탁송 요청은 개인이 아닌 고객사, 즉, 중고차 회사, 자동차 A/S 센터, 공업사 등에서 사용한다.</p>
<p>고객사에서는 직원들에게 렌톡을 사용해서 탁송 요청 업무를 하도록 하는데,<br>이때 앱 아이콘만이라도 해당 회사의 아이콘을 보여줄 수 있냐는 문의가 들어온 것이다.</p>
<p>즉, <code>A중고차</code> 회사 직원이 사용할 때는 <code>A중고차</code> 회사 아이콘을 보여주자는 것이다.</p>
<p><code>사용자의 업체에 따라서 아이콘을 다르게 보여주는 것</code>으로 기능 정리할 수 있겠다.</p>
<p>음... 앱 아이콘을 변경하는 기능이 있던 것 같은데...?</p>
<h2 id="alternate-app-icon">Alternate App Icon</h2>
<p>관련 키워드로 검색하니 앱 아이콘 변경이 하는 방법을 정리한 글들이 보였고,<br>애플 개발자 문서에서 <a href="https://developer.apple.com/documentation/xcode/configuring_your_app_to_use_alternate_app_icons">&quot;Configuring Your App to Use Alternate App Icons&quot;</a>를 찾을 수 있었다.<br>애플에서는 해당 기능을 <code>Alternate App Icon</code>이라고 한다.</p>
<p>구현 방법도 간단해 보인다. </p>
<ol>
<li>에셋 카탈로그에 메인 아이콘 외에 추가로 변경할 아이콘을 등록한다.</li>
<li>UIApplication의 <code>setAlternateIconName(_:completionHandler:)</code> 메서드를 사용한다.</li>
</ol>
<p><code>setAlternateIconName(_:completionHandler:)</code> 메서드가 <code>iOS 10.3</code> 이상 지원해서 호환성 문제도 걱정 없다.</p>
<p>음... 그러니까 업체들의 아이콘을 에셋 카탈로그에 미리 넣어두고,<br>로그인한 사용자의 업체 정보에 따라 아이콘을 변경해 주면 되겟는데?</p>
<p>기술적으로는 가능하다고 판단되지만 여기서 끝이 아니다, 
특히 iOS 개발자는 꼭 검토해야 할 것이 있다.</p>
<h2 id="앱스토어-리뷰-가이드라인-검토">앱스토어 리뷰 가이드라인 검토</h2>
<p>애플에서 해당 기능을 어떤 목적으로 사용하라고 만든 건지,<br>특히, 앱스토어 리뷰 가이드라인에 문제 될 것이 있는지를 꼭 확인해야 한다.</p>
<p>기껏 기능 개발해두고 리뷰를 통과하지 못해서 배포하지 못한다면,<br>나도 시간 낭비이며 관련자들 모두 피해를 본다.</p>
<p>먼저 앱스토어 리뷰 가이드라인부터 살펴보니 해당 항목이 있다.</p>
<blockquote>
<p><a href="https://developer.apple.com/app-store/review/guidelines/#alternate-app-icons">4.6 Alternate App Icons</a><br>Apps may display customized icons, for example, to reflect a sports team preference, provided that each change is initiated by the user and the app includes settings to revert to the original icon. All icon variants must relate to the content of the app and changes should be consistent across all system assets, so that the icons displayed in Settings, Notifications, etc. match the new springboard icon. This feature may not be used for dynamic, automatic, or serial changes, such as to reflect up-to-date weather information, calendar notifications, etc.</p>
</blockquote>
<p>요약하자면</p>
<ul>
<li>사용자가 아이콘을 직접 변경하며, 원래 아이콘으로 변경할 수 있는 설정을 포함해야 함</li>
<li>아이콘이 앱의 컨텐츠와 밀접한 관련이 있어야 함</li>
<li>이 기능은 동적, 자동, 연속 변경 등에는 사용하면 안됨</li>
</ul>
<p>한 마디로 <code>사용자가 직접 원하는 아이콘으로 설정하게 해야 함</code> 으로 정리된다.</p>
<p>우리가 원하는 기능은 <code>사용자의 업체에 따라서 아이콘을 다르게 보여주는 것</code>이므로 이 가이드라인에 위배될 가능성이 아주 높아 보인다.</p>
<h2 id="휴먼-인터페이스-가이드라인-검토">휴먼 인터페이스 가이드라인 검토</h2>
<p>앱스토어 리뷰 가이드라인으로 우리가 원하는 기능은 넣을 수 없다고 판단됐다.<br>그럼 Alternate App Icon은 어떤 경우에 사용하라는 걸까?<br>애플이 의도한 사용 방법을 알아보려면 <code>H.I.G</code>를 참고하는 게 도움 된다.</p>
<blockquote>
<p><a href="https://developer.apple.com/design/human-interface-guidelines/foundations/app-icons#best-practices">App Icons - Best practies</a></p>
<p><strong>Consider offering an alternate app icon.</strong> In iOS, iPadOS, and tvOS, people can choose an alternate version of an icon, which can strengthen their connection with the app or game and enhance their experience. For example, a sports app might offer different icons for different teams. Make sure that each alternate app icon you design remains closely related to your content and experience; avoid creating a version that people might mistake for the icon of a different app. When people want to switch to an alternate icon, they can visit your app&#39;s settings.</p>
<p><strong>NOTE</strong><br>As with a primary app icon, alternate app icons are also subject to app review and must adhere to the App Store Review Guidelines.</p>
</blockquote>
<p>요약하자면</p>
<ul>
<li>사용자는 앱이나 게임에서 결속력을 강하게할 수 있게하는 아이콘으로 선택할 수 잇다</li>
<li>각 아이콘은 앱의 컨텐츠와 관련있게 디자인해야하며 다른 앱으로 착각할 수 있는 아이콘은 피해야 한다</li>
<li>사용자가 원할때 앱의 설정에서 아이콘을 변경할 수 있어야한다.</li>
<li>기본 아이콘과 마찬가지로 alternate 앱 아이콘도 앱 리뷰를 받으며 앱 스토어 리뷰 가이드라인을 따라야 한다.</li>
</ul>
<p>표현이 조금 다르지만 결국 리뷰 가이드라인과 같은 내용으로 보인다.</p>
<h2 id="정리">정리</h2>
<p>앱 아이콘을 다른 업체의 아이콘으로 변경할 수 있는지에 대해 기술적으로 가능한지 알아보았고,<br>앱스토어 리뷰 가이드 라인, 휴먼 인터페이스 가이드라인 등 애플의 정책을 검토했다.</p>
<p>그 결과, <code>해당 기능이 기술적으로는 가능하지만 애플 리뷰에서 거절될 가능성이 높다.</code>라고 의견을 정리하여 공유했다.</p>
<p>끝! 👋</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[iOS 앱 Xcode 14 대응하기]]></title>
            <link>https://velog.io/@jacob-ios/iOS-%EC%95%B1-Xcode-14-%EB%8C%80%EC%9D%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@jacob-ios/iOS-%EC%95%B1-Xcode-14-%EB%8C%80%EC%9D%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Wed, 04 Jan 2023 08:30:57 GMT</pubDate>
            <description><![CDATA[<p>애플 개발자 사이트에 <a href="https://developer.apple.com/kr/news/?id=z1erkhzr">뉴스</a>가 올라왔다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/c0af76d7-6672-424a-b733-796f4d23dfef/image.png" alt=""></p>
<p>구체적인 날짜는 아니지만 아무튼 <code>2023년 4월</code>부터는 앱 심사를 올리려면 <code>Xcode 14.1</code> 이상으로 빌드 해야 한다... 😤</p>
<p>아직 1월이라 급하지 않지만 바쁘지 않을 때 미리 대응해 보자.</p>
<h2 id="xcode-142-앱-빌드-확인">Xcode 14.2 앱 빌드 확인</h2>
<p>현재 <code>Xcode 13.4.1</code> 사용 중이며 최신 버전인 <code>Xcode 14.2</code>를 따로 설치하고 기존 버전은 아직 삭제하지 않는다.</p>
<p>회사에서 담당하고 있는 앱인 <code>렌톡</code>과 <code>수퍼드라이버</code>를 빌드/아카이브 해봤다.</p>
<table>
<thead>
<tr>
<th></th>
<th>렌톡</th>
<th>수퍼드라이버</th>
</tr>
</thead>
<tbody><tr>
<td>빌드</td>
<td>실패: Error 1개</td>
<td>성공: Warning 2개</td>
</tr>
<tr>
<td>아카이브</td>
<td>성공: Warning 2개</td>
<td>성공: Warning 2개</td>
</tr>
</tbody></table>
<p>렌톡만 빌드 에러로 실패했으며, 아카이브는 성공했지만 전에는 안 보이던 Warning 2개가 발생했다.</p>
<p>혹시 모르니 시뮬레이터와 실기기 모두 테스트했고 결과는 동일했다.</p>
<p>생각보다 심각하진 않네 ㅎㅎ 에러부터 해결해 보자.</p>
<h2 id="awsmobileclient-에러">AWSMobileClient 에러</h2>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/e48254a7-5f31-4cce-94d7-e127e3f7abe1/image.png" alt=""></p>
<p>다행히?! 외부 라이브러리에서 발생한 에러다.</p>
<p>무슨 심볼이 정의되지 않았다는데... 구글에 물어보자.</p>
<pre><code>Undefined symbol: _OBJC_CLASS$_AWSCognitoIdentityProviderASF</code></pre><p>AWS iOS SDK 레포에서 비슷한 <a href="https://github.com/aws-amplify/aws-sdk-ios/issues/4310">이슈</a>를 발견했다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/6add64ac-c91a-4375-b9f1-19dc11af4a2b/image.png" alt=""></p>
<p>쭉 살펴보니 맘에 드는 답변이 보인다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/588668d6-c98e-406d-a09d-51696e0492b1/image.png" alt=""></p>
<p><code>AWSMobileClient</code> 버전을 <code>2.12.0</code>에서 <code>2.17.0</code>로 업데이트하고 Deployment target을 iOS 13으로 올렸더니 해결됐단다.</p>
<p>음... 내 프로젝트를 확인해 보자.<br>Deployment target은 <code>iOS 14</code>라서 상관없고...<br><code>AWSMobileClient</code>버전이 <code>2.13.1</code>이다.<br>나도 업데이트하면 해결될 것 같은 기분이 든다.</p>
<p>3일 전에 배포된 따끈따끈한 <code>2.29.1</code>로 업데이트해 보자.</p>
<p>podfile에서 버전을 지정한다.<br>왠지 <code>AWSS3</code>도 동일한 버전으로 맞추는 게 깔끔할 것 같다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/f8125f6a-93af-415d-8ebd-9509c3c0ed3a/image.png" alt=""></p>
<p>pod update 해주고 빌드 하니 에러 사라지고 빌드 성공. 🎉</p>
<h2 id="아카이브-warning">아카이브 Warning</h2>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/b485cfc2-cf0c-4c2a-abe6-254ad528f3aa/image.png" alt=""></p>
<p>아카이브는 성공했지만 노란색 Wanring이 불편하다... 이슈 내용을 살펴보자.</p>
<blockquote>
<p>rentalk - Run script build phase &#39;Run Script&#39; will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking &quot;Based on dependency analysis&quot; in the script phase.</p>
<p>PromisesObjC - Run script build phase &#39;Create Symlinks to Header Folders&#39; will be run during every build because it does not specify any outputs. To address this warning, either add output dependencies to the script phase, or configure it to run in every build by unchecking &quot;Based on dependency analysis&quot; in the script phase.</p>
</blockquote>
<p>음...output 디펜던시를 추가하거나 script phases에서 <code>Based on dependency analysis</code>를 체크해제하란다.</p>
<p>뭔가 추가하기는 귀찮으니 체크해제부터 시도해 보자.</p>
<p>프로젝트 Target -&gt; Build Phases -&gt; Run Script에서 체크박스를 찾아 해제한다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/70febc88-b072-4ead-b85f-4d56521d0a4e/image.png" alt=""></p>
<p>또, Pods -&gt; PromisesObjC Target -&gt; Build Phases -&gt; Create Symlinks to Header Folders에서도 해제한다.</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/551f96e6-8eff-4c79-9ff2-0ff99a6ef207/image.png" alt=""></p>
<p>다시 클린 빌드 하니 거슬리던 Wanring도 모두 사라졌다! 😀<br>수퍼드라이버도 동일한 Warning이라서 같은 방법으로 해결.</p>
<h2 id="앱-아이콘-싱글-이미지로-변경">앱 아이콘 싱글 이미지로 변경</h2>
<p>추가로 Xcode 14의 새 기능인 앱 아이콘 싱글 이미지를 적용해 보자.<br>빌드에는 문제없지만 해보고 싶잖아?!</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/2c0cbafb-92ed-4155-a729-d91136092c5b/image.png" alt=""></p>
<p>이제 앱 아이콘을 사이즈별로 만드느라 외부 앱을 사용할 필요가 없다!  
1024 사이즈의 이미지 하나만 넣으면 된다!!</p>
<p>물론 이전처럼 다양한 이미지를 제공해도 되지만...<br>사실 앱 아이콘을 변경하는 경우는 드물지만...</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/4e5f62aa-c687-4610-a623-e5af2870acd7/image.png" alt=""></p>
<p>다~양한 이미지를 볼 때마다 답답했었다. 😧</p>
<p>우측에서 <code>All Size</code> -&gt; <code>Single Size</code> 변경해 주면,</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/dd098fbb-944c-4520-b095-67c2791e672e/image.png" alt=""></p>
<p>편~안 😁</p>
<p>이제 사용하지 않게 된 이미지들은 자동으로 삭제도 해준다!</p>
<p><img src="https://velog.velcdn.com/images/jacob-ios/post/d142a280-f5ba-44cc-8a03-9a68c3299d03/image.png" alt=""></p>
<h2 id="정리">정리</h2>
<p>Xcode 14 최신 버전으로 앱 빌드/아카이브가 문제없는지 확인하고 에러를 해결했다.<br>또, Xcode 14의 신기능인 앱 아이콘 싱글 이미지도 적용했다.</p>
<p>끝! 👋</p>
]]></description>
        </item>
    </channel>
</rss>