[앱스토어 등록 대장정]MAUI iOS 앱 아이콘 복구부터 WCF 로그인 성공까지
“분명 빌드는 됐는데, 아이콘이 없고, 화면은 검고, 로그인은 죽는다.”MAUI iOS 앱을 Windows 빌드 + Mac 후처리로 App Store에 올리며 겪은실제 삽질 기록과 해결 과정을 단계별로 정리합니다. 1단계: 앱 아이콘 실종 사건 (The Icon Mystery)* 상황Windows 환경의 Visual Studio에서 MAUI iOS 빌…
“분명 빌드는 됐는데, 아이콘이 없고, 화면은 검고, 로그인은 죽는다.”
MAUI iOS 앱을 Windows 빌드 + Mac 후처리로 App Store에 올리며 겪은
실제 삽질 기록과 해결 과정을 단계별로 정리합니다.
1단계: 앱 아이콘 실종 사건 (The Icon Mystery)
* 상황
Windows 환경의 Visual Studio에서 MAUI iOS 빌드
Mac에서 수동으로 패키징(iOS Payload 구성)
실기기에서 앱 아이콘이 표시되지 않음
* 원인
MAUI iOS 앱은 빌드 시 아이콘 리소스를 Assets.car 파일로 컴파일합니다.
하지만:
Windows 빌드 결과물을
Mac에서 수동으로 병합 / 패키징하는 과정에서
Assets.car가 누락되거나 잘못된 위치에 존재 즉, 아이콘 소스는 있어도 iOS가 읽을 수 없는 상태였습니다.
* 해결
아이콘이 정상 표시되던 이전 성공 빌드에서
Assets.car 파일 추출
새 빌드 결과물의 아래 경로에 강제로 이식
Payload/APP.app/Assets.car
재서명 후 실행 → 아이콘 정상 표시 확인
MAUI iOS에서 “아이콘이 안 나온다” =
거의 항상 Assets.car 문제입니다.
2단계: 검은 화면의 공포 (Black Screen Issue)
* 상황
아이콘은 정상
앱 실행 시 아무 화면도 안 뜨고 검은 화면에서 멈춤
* 원인
Visual Studio가 Info.plist에 자동으로 주입한 UIApplicationSceneManifest 설정 때문.
iOS는 이 설정이 있으면:
다중 창(Scene) 앱으로 인식
Scene 기반 라이프사이클을 시도
하지만:
MAUI 기본 앱 구조와 충돌
결과: UI 렌더링 실패 → 검은 화면
* 해결 (순정화 작업)
Mac 터미널에서 아래 명령 실행:
/usr/libexec/PlistBuddy -c "Delete :UIApplicationSceneManifest" Info.plist
→ Scene 설정 제거
→ 앱 정상 렌더링
3단계: 리플렉션의 벽 (Reflection.Emit Error)
* 상황
화면은 정상 출력
로그인 버튼 클릭 시 즉시 앱 종료
에러:
PlatformNotSupportedException
* 원인
iOS는 JIT(실시간 코드 생성) 을 금지합니다.
하지만:
Newtonsoft.Json
WCF 통신 라이브러리
이 내부에서 Reflection.Emit 기반 동적 코드 생성을 시도 → iOS에서 즉시 크래시
* 해결
.csproj에 인터프리터 실행 강제 옵션 추가:
<MtouchInterpreter>-all</MtouchInterpreter>
모든 코드를 AOT + 인터프리터 방식으로 실행
Reflection 기반 라이브러리 사용 가능
→ 로그인 로직 정상 동작
4단계: 마지막 관문 – ATS(App Transport Security)
* 상황
앱 실행 OK
로그인 시:
The resource could not be loaded...
* 원인
iOS ATS 정책:
HTTPS만 허용
HTTP 요청은 기본 차단
문제의 서버:
http://XXXX.co.kr:88
* 해결
Info.plist에 ATS 예외 추가:
NSAppTransportSecurity
NSExceptionDomains
해당 도메인에 HTTP 허용
→ WCF 로그인 성공
최종 성공 프로세스 (정석 루트)
1. 빌드 (Windows)
MAUI 프로젝트에 <MtouchInterpreter>-all</MtouchInterpreter> 추가
iOS 빌드
2. 준비 (Mac)
빌드 결과 압축 해제
이전 성공 빌드에서 Assets.car 추출
Payload/AppName.app/에 덮어쓰기
3. 수정
PlistBuddy로 SceneManifest 삭제
ATS 예외 추가
버전 / 빌드 넘버 조정
4. 재서명
codesign -f -s [인증서ID] --entitlements temp.entitlements Payload/AppName.app
5. 업로드
zip 압축
TestFlight 업로드
✔ 심사 준비 완료
이 과정은 공식 문서 어디에도 안 나옵니다.
하지만 실제로 MAUI iOS + WCF + Windows 빌드 환경에서는
누구나 한 번은 겪게 되는 지점입니다.
이 글이 같은 삽질을 하는 분들에게
“아, 나만 그런 게 아니구나”가 되길 바랍니다.
댓글 0
첫 댓글을 남겨보세요.