본문으로 건너뛰기

Live Activity 추가 후 Xcode 아카이브 및 배포 에러 트러블슈팅

·5 min read

문제 상황

  • 기존 pirl 단일 앱 구조였을 때는 eas cli를 통한 로컬 빌드 및 TestFlight 배포 제출이 원활하게 진행되었다.
  • 하지만 Live Activity 익스텐션 타겟을 추가한 이후, 배포 시 Xcode 아카이브 단계에서 프로비저닝 프로파일을 찾지 못하거나, HealthKit 권한 오류(Automatic signing cannot update...)가 발생하는 등 지속적인 빌드 및 제출 실패 문제가 발생했다.

원인 분석

  • 다중 타겟으로 인한 프로비저닝 프로파일 누락 및 불일치: 메인 앱 타겟(pirl)과 익스텐션 타겟(LiveActivity) 두 개가 되면서, 각 타겟별로 고유한 App ID와 배포용(Distribution) 프로비저닝 프로파일이 모두 필요하게 되었다.
  • 기존 로컬 빌드만 시도했을 때는 메인 앱과 Live Activity 익스텐션 간의 배포 인증서와 프로파일이 애플 개발자 센터 및 EAS 서버에 완전히 동기화되지 못했다. 이 상태에서 Xcode 아카이브를 시도하니, Xcode가 앱 번들에 맞는 올바른 프로파일을 찾지 못해 강제로 자동 서명(Automatic)을 시도하다가 권한 검증 에러(HealthKit 충돌 등)를 연쇄적으로 발생시켰다.

해결 과정

  1. EAS 원격 빌드를 통한 자격 증명(Certificate & Profile) 생성 및 동기화 (핵심 해결책):
    • 로컬 환경에서의 꼬임 문제를 해결하기 위해, EAS 원격 빌드(EAS Build)를 최초 1회 명시적으로 진행했다.
    • (중요) EAS 원격 빌드를 진행함으로써, Expo 서버가 알아서 Apple 개발자 센터와 연동하여 pirl 메인 앱뿐만 아니라 새로 추가된 LiveActivity 확장에 대해서도 고유한 App ID, 인증서(Certificate), 배포용 프로파일(Provisioning Profile)을 서버에 자동 생성하고 완벽하게 등록해준다.
  2. 로컬 빌드 및 Xcode 아카이브 우회 (정상화):
    • 위 과정을 통해 서버 단에 LiveActivity를 포함한 모든 타겟의 인증서/프로비저닝 프로파일이 완전하게 동기화된 상태가 되었다.
    • 이후 eas credentials 동기화가 반영된 상태로 로컬 빌드(pnpm build 또는 로컬 프리빌드)를 수행한 뒤 Xcode를 열었고, 각 타겟에 맞는 올바른 Distribution 프로파일을 수동 지정할 수 있었다.
    • 최종적으로 프로파일 꼬임 없이 Xcode에서 Product > Archive하여 TestFlight 배포를 성공적으로 완수했다.

배운 점 및 회고

  • 익스텐션(Live Activity 등) 추가 시 인증 관리의 복잡성: 위젯이나 익스텐션 타겟이 프로젝트에 추가되면 기존의 메인 앱과 분리된 완전히 독립적인 App ID, App Groups, Provisioning Profile이 필요하다는 것을 배웠다.
  • EAS 원격 빌드의 강력함 (트러블슈팅의 치트키): 로컬 Xcode 환경에서 프로파일 매핑이나 인증서가 꼬여 원인을 찾기 막막할 때, EAS 원격 서버 빌드를 강제로 한 번 태우는 것이 훌륭한 해법이 된다. EAS가 서버 상에서 필수적인 자격 증명을 일괄 생성하고 묶어주기 때문에, 이를 통해 로컬의 꼬인 상태를 서버 기준으로 리셋시키고 동기화할 수 있음을 깨달았다.
  • 느낀 점: 이전에는 손쉽게 되던 배포가 갑자기 막혀 다소 당황했지만, Expo 생태계(EAS CLI)가 훌륭하게 제공하는 자격 증명 동기화 원리를 명확하게 이해하는 계기가 되었다. 앞으로 다중 타겟(App Extension)이 포함된 앱을 빌드할 때는 원격 빌드 초기 동기화를 적극 활용할 것이다.