Skip to content

ci(cd-qa): iOS 빌드를 Firebase App Distribution 에도 배포 - #167

Open
imhyunho99 wants to merge 1 commit into
Onz_Androidfrom
ci/ios-firebase-distribution
Open

ci(cd-qa): iOS 빌드를 Firebase App Distribution 에도 배포#167
imhyunho99 wants to merge 1 commit into
Onz_Androidfrom
ci/ios-firebase-distribution

Conversation

@imhyunho99

Copy link
Copy Markdown
Contributor

TestFlight 는 테스터마다 App Store Connect 팀 자리가 필요하고, 그 자리는 Account Holder / Admin 만 줄 수 있습니다. 팀에 넣을 수 없는 테스터에게는 iOS 빌드를 전달할 방법이 없어서, 같은 빌드를 Firebase 로도 보냅니다.

어떻게

아카이브를 다시 만들지 않습니다. exportArchive 는 넘겨준 프로파일로 다시 서명하므로, TestFlight 용으로 이미 뜬 .xcarchive 를 재사용해 ad-hoc 으로 한 번 더 export 합니다. 20분짜리 잡이 하나 더 생기는 대신 export 한 번 값만 늘어납니다.

Archive → Export(app-store) → TestFlight     ← 기존, 손대지 않음
        ↘ Export(ad-hoc)    → Firebase       ← 추가

지금 머지해도 아무 일도 일어나지 않습니다

IOS_ADHOC_PROFILE_BASE64FIREBASE_IOS_APP_ID둘 다 있을 때만 동작합니다. 없으면 세 단계를 건너뛰고 notice 만 남깁니다. TestFlight 경로는 어느 쪽이든 영향받지 않습니다.

머지 후 필요한 것

시크릿
FIREBASE_IOS_APP_ID 1:513269758316:ios:66fdd942934a6d90391b49
IOS_ADHOC_PROFILE_BASE64 Ad Hoc 프로파일을 만들어 base64 -i AdHoc.mobileprovision

App ID 는 ios/GoogleService-Info.plist 에서 읽었습니다. Android 가 이미 보고하고 있는 프로젝트(cocktail-f9689)와 같습니다.

Ad Hoc 프로파일은 Apple Developer 포털에서 만들어야 합니다 — 테스터 기기 UDID 등록 → Profiles → Ad Hoc → 지금 쓰는 배포 인증서 선택.

알고 계셔야 할 비용

ad-hoc 은 기기 UDID 가 프로파일에 박혀 있어야만 설치됩니다. 테스터가 늘 때마다 UDID 등록 → 프로파일 재발급 → 시크릿 갱신 → 재빌드가 필요하고, 연 100대 한도가 있습니다. TestFlight 에는 없는 제약이고, 이게 팀 자리를 안 주는 대가입니다.

"설치가 안 된다"는 문의는 거의 항상 UDID 누락이라, 프로파일 import 단계에서 등록된 기기 수를 로그로 남기게 해뒀습니다. 재빌드 없이 로그만 보고 판별됩니다.

곁가지로 확인된 것

ios/Cocktail_Front/GoogleService-Info.plist 는 다른 Firebase 프로젝트(cocktail-e311f, 프로젝트 번호 265741208176)를 가리키는 쓰이지 않는 파일입니다. Xcode 타깃에 들어가는 건 ios/GoogleService-Info.plist 쪽입니다. 누가 실수로 타깃에 추가하면 iOS 만 조용히 죽은 프로젝트로 보고하게 되니 지우는 편이 낫습니다. 이 PR 범위 밖이라 건드리지 않았습니다.

검증

로컬에서 YAML 파싱과 스텝 순서만 확인했습니다. 시크릿이 없어 실제 실행은 못 해봤습니다.

TestFlight requires every tester to hold an App Store Connect team seat,
which only the Account Holder or an Admin can grant. That blocks testers
we cannot add to the team. This adds a second destination for the same
build.

It reuses the archive rather than building again — exportArchive re-signs
with whichever profile it is handed, so the ad-hoc IPA costs one export
instead of another 20-minute job.

The whole branch is skipped unless both IOS_ADHOC_PROFILE_BASE64 and
FIREBASE_IOS_APP_ID are set, so this is a no-op until someone supplies
them and the existing TestFlight path is untouched either way.

The catch is ad-hoc itself: a device only installs if its UDID is baked
into the profile. Adding a tester means registering the UDID, reissuing
the profile, and updating the secret. TestFlight has no such limit — this
is the trade for not needing team seats. The import step logs how many
devices the profile carries, because "it won't install" is almost always
a missing UDID and that number answers it without a rebuild.

FIREBASE_IOS_APP_ID is 1:513269758316:ios:66fdd942934a6d90391b49, read
from ios/GoogleService-Info.plist — the same Firebase project (f9689) the
Android app already reports to.

Not yet runnable: the two secrets do not exist yet.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant