“분명 빌드는 됐는데, 아이콘이 없고, 화면은 검고, 로그인은 죽는다.”
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 요청은 기본 차단
문제의 서버:
* 해결
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 빌드 환경에서는
누구나 한 번은 겪게 되는 지점입니다.
이 글이 같은 삽질을 하는 분들에게
“아, 나만 그런 게 아니구나”가 되길 바랍니다.
'HJSoft' 카테고리의 다른 글
| 엑셀이 설치돼 있는데 자동화가 안 될 때 (엑셀버전 충돌) (0) | 2026.02.06 |
|---|---|
| MAUI [다중 선택] 사진 업로드에서 iOS와 Android의 위치정보(EXIF) 차이 정리 (1) | 2026.02.04 |
| 카톡 자동발송에 이은 - '내용 수집' 자동화 (0) | 2026.01.24 |
| “단순히 사진을 올리는 앱이 아닙니다.여러분의 증빙 데이터를 지켜주는 기술입니다.” (0) | 2026.01.12 |
| 안드로이드 사진 [다중선택] 위치정보(GPS 태그)는 왜 사라질까? 그리고 어떻게 보전했을까 (1) | 2026.01.08 |