프로그래밍/Unity, MAUI, Mono

[Xamarin iOS] 'iTunes'로 부터 'CFBundleIconName'가 없다는 메시지가 왔을 때 해결방법

당근천국 2018. 5. 15. 15:30

앱을 만들고 올렸는데 앱스토어에서 다음과 같은 리턴 메일이 왔습니다.

 

 

 

The App Store Team.

We identified one or more issues with a recent delivery for your app, "[app 이름]". Please correct the following issues, then upload again.

Missing Info.plist value - A value for the Info.plist key 'CFBundleIconName' is missing in the bundle '[번들 식별자]'. Apps built with iOS 11 or later SDK must supply app icons in an asset catalog and must also provide a value for this Info.plist key. For more information see http://help.apple.com/xcode/mac/current/#/dev10510b1f7.

Best regards,

The App Store Team.

 

 

내용 자체는 'Info.plist'파일에 'CFBundleIconName'에 대한 카탈로그가 없다는 뜻입니다.

그런데 우리가 자마린을 쓰는 이유는 이런것들을 자동화 해주거나 UI로 제공받기 위해서가 아닌가?

왜 이 내용이 빠져있는 것일까요?

 

 

1. 원인

일단 자마린을 최신 버전으로 업데이트할 것을 권장합니다 ㅎㅎㅎ

 

자마린의 UI에서 'Info.plist'를 생성하는데 문제가 좀 있습니다.

거기다 iOS프로젝트 기본템플릿도 문제가 있고요......

이게 검색해보면 오래전부터 있던 현상인 거 같은데.....아직도 이 모양이라니;;;;

물론 업데이트할 때마다 한두 개씩 고쳐지긴 하고 있습니다 ㅎㅎㅎ

 

다행이 해결방법은 있습니다.

수작업이죠 ㅋㅋㅋㅋ

 

2. 자산 카탈로그 재생성

'iOS 9.0'부터 기본 자산 카탈로그(asset catalog)의 이름이 'Assets'에서 'Media'로 변경되었다고 합니다.

(근데 여전히 'Assets'도 쓰는 거 같은데....)

그러니 자산 카탈로그 폴더명도 'Assets.xcassets'에서 'Media.xcassets'로 변경되었습니다.

 

자마린에서 iOS프로젝트를 생성하면 자동으로 자산 카탈로그에 'Assets'가 추가됩니다.

(버전에 따라 없을 수 있습니다.)

'Assets'이 있다면 지워 줍니다.

 

 

 

이제 'Info.plist'를 'iOS 매니페스트 편집기'로 열어 줍니다.

 

 

 

 

'iOS 매니페스트 편집기'가 열리면 '시각적 자산' 탭으로 이동합니다.

앱 아이콘 > 자산 카탈로그 사용 버튼

을 누릅니다.

 

그러면 자산 카탈로그에 자동으로 'Media'가 생성되고 프로젝트 폴더에 'Media.xcassets'가 생성됩니다.

 

 

 

3. 자산 카탈로그 연결

이대로 되면 좋겠는데.....

'Info.plist'파일을 'XML 편집기'로 열어보면 이상한 점을 볼 수 있습니다.

 

'XSLaunchImageAssets' 카탈로그의 경로가 이상합니다?

 

 

 

분명 폴더는 프로젝트 루트에 생성되어있는데 경로는 'Resources'를 보고 있습니다.

결국 두 가지 선택지가 있는데

1) 'Resources'폴더로 'Media.xcassets'를 복사해서 넣는다.

2) 경로를 바꿔준다.

 

첫 번째 방법은 문제가 자산을 갱신할 때마다 수동으로 업데이트를 해야 합니다 ㅋㅋㅋㅋ

그러니 그냥 편하게 두번째 방법을 씁시다.

 


<key>XSLaunchImageAssets</key>
	<string>Resources/Media.xcassets/LaunchImages.launchimage</string>
<key>XSAppIconAssets</key>
	<string>Resources/Media.xcassets/AppIcons.appiconset</string>

<!-- 위 코드를 아래코드로 바꿔 줍니다. -->

<key>XSLaunchImageAssets</key>
	<string>Media.xcassets/LaunchImages.launchimage</string>
<key>XSAppIconAssets</key>
	<string>Media.xcassets/AppIcons.appiconset</string>

 

 

 

그럼 이렇게 코드가 되어 있을 겁니다.

 

 

 

 

4. 'CFBundleIconName'추가하기

'Info.plist'를 'XML 편집기'로 열고 'CFBundleIconFiles'카테고리를 찾습니다.

 

아마 아래와 같이 되어 있을 겁니다.

이건 잘못된 구조입니다.

 

 

 

맞는 구조는

CFBundleIcons > CFBundlePrimaryIcon > CFBundleIconName, CFBundleIconFiles

이렇게 되어있어야 합니다.

 

아래 코드와 스크린샷을 확인하여 모양을 맞춰 다시 작성합니다.

 


<key>CFBundleIcons</key>
<dict>
	<key>CFBundlePrimaryIcon</key>
	<dict>
		<key>CFBundleIconName</key>
		<string>Icon</string>
		<key>CFBundleIconFiles</key>
		<array>
			<string>Icon-60@2x</string>
			<string>Icon-60@3x</string>
			<string>Icon-76</string>
			<string>Icon-76@2x</string>
			<string>Default</string>
			<string>Default@2x</string>
			<string>Default-568h@2x</string>
			<string>Default-Portrait</string>
			<string>Default-Portrait@2x</string>
			<string>Icon-Small-40</string>
			<string>Icon-Small-40@2x</string>
			<string>Icon-Small-40@3x</string>
			<string>Icon-Small</string>
			<string>Icon-Small@2x</string>
			<string>Icon-Small@3x</string>
		</array>
	</dict>
</dict>

 

 

 

결과물은 다음 스크린샷을 확인해 주세요.

 

 

 

'CFBundleIconFiles'의 파일 리스트에는 사용하는 이미지의 이름이 전부 들어가 있어야 합니다.

자산으로 등록하면 자동으로 추가해주면 좋겠는데 그것까지는 안 되는 거 같습니다.

 

5. 빌드

이제 프로젝트를 '정리(clean)'한 후 '다시 빌드(rebuild)'를 합니다.

이제 결과물을 올리면 됩니다.

 

 

마무리
물론 이제 다른 오류를 받아 볼 수도 있습니다 ㅎㅎㅎㅎ

 

자마린이 다른 크로스 플랫폼 프래임웍들보다 빠릿빠릿하게 업데이트를 해주는 거로 알고 있습니다.

그런데 UI는 바로바로 따라가질 못하네요 ㅎㅎㅎ