업로드 화면에서 Internal Only를 잘못 선택해 외부 테스터를 추가할 수 없게 되셨나요?
팀 구성원만 검증할 개발 빌드라면 TestFlight Internal Only를 선택하고, 외부 테스터나 정식 출시 후보라면 일반 TestFlight 및 App Store 배포를 선택해야 합니다. 자주 배포한다면 두 경로를 분리하십시오.
이 글은 TestFlight에 개발 빌드를 자주 올리면서 분배 방식 선택을 걱정하는 독립 개발자를 위한 글입니다. 원격 Mac 또는 자체 Runner로 자동 업로드하는 소규모 팀, 외부 테스터를 처음 초대하려는 개발자도 대상입니다.
먼저 확인할 기준은 빌드의 최종 자격입니다
TestFlight Internal Only는 내부 팀 검증을 위한 선택입니다. Apple 문서상 이 방식으로 표시된 빌드는 내부 빌드로 취급되며 내부 테스트 그룹에만 연결할 수 있습니다. 외부 테스트나 App Store 제출까지 이어질 가능성이 있다면 처음부터 일반 배포 빌드로 준비해야 합니다. Apple의 Xcode 배포 문서도 업로드 전에 배포 목적을 정하도록 안내합니다.
판단은 다음처럼 간단히 나눌 수 있습니다.
- Internal Only: App Store Connect 팀 구성원만 확인하는 개발 빌드. 실험 기능, 디버그 스위치, 내부 검수에 적합합니다.
- 일반 TestFlight 및 App Store 배포: 외부 테스트 그룹에 제공하거나 나중에 App Store 제출 후보로 사용할 빌드에 적합합니다.
- 이중 작업 흐름: 내부 검증용 브랜치와 출시 후보 브랜치를 분리합니다. 빈번한 배포, 외부 베타, 정식 출시를 함께 운영하는 팀에 적합합니다.
Xcode 27 RC로 빌드를 업로드할 수 있다는 점은 Apple의 2026년 9월 9일 발표에서 확인할 수 있습니다. 다만 Xcode 27 RC 지원 여부와 Internal Only의 분배 자격은 서로 다른 문제입니다. Xcode 27 RC 발표를 확인한 뒤에도 빌드 목적은 별도로 결정해야 합니다.
업로드 전에 Archive의 용도를 고정해야 하는 이유
Internal Only 선택은 업로드 화면에서만 고민할 일이 아닙니다. Archive를 만들기 전에 브랜치, Scheme, export 방식, 서명 자격을 정해야 합니다. 이미 내부 전용으로 만든 빌드를 외부 테스트나 정식 제출용으로 바꾸는 것을 간단한 설정 변경처럼 취급하면 안 됩니다.
필요한 경우 새로 빌드하고 다시 서명해야 합니다. 버전과 빌드 번호를 관리해야 하며, 그 과정에서 출시 후보 검증이 늦어질 수 있습니다. 따라서 “일단 Internal Only로 올린 뒤 나중에 전환한다”는 방식은 후보 빌드 관리에 적합하지 않습니다.
테스트 대상이 누구인지에 따라 선택이 달라집니다
팀 구성원만 테스트한다면 Internal Only가 맞습니다
내부 테스터는 App Store Connect 팀에 연결된 계정과 적절한 역할이 필요합니다. 단순히 이메일 주소를 가진 사람이라는 이유만으로 내부 테스터가 되는 것은 아닙니다. Apple의 내부 테스터 추가 안내에서 계정과 역할 조건을 먼저 확인하십시오.
다음과 같은 빌드라면 Internal Only를 선택할 수 있습니다.
- 아직 외부에 공개하지 않을 실험 기능
- 개발자와 팀 구성원만 확인할 디버그 설정
- 고객이나 베타 사용자에게 배포하지 않을 임시 검증본
- 코드 서명, 자동화, 설치 과정만 점검하는 빌드
이 선택의 장점은 개발용 빌드가 외부 테스트나 정식 제출 후보로 잘못 사용되는 위험을 줄인다는 점입니다. 반면 내부 팀 밖의 사람에게 피드백을 받아야 하는 순간에는 경로가 막힙니다.
외부 테스터를 초대한다면 일반 TestFlight가 필요합니다
외부 테스터는 App Store Connect 팀 밖의 사용자입니다. 외부 테스트 그룹, 이메일 초대 또는 공개 링크를 통해 참여할 수 있습니다. Apple은 외부 테스터 초대에 별도의 절차를 두고 있으며, 외부 테스터 초대 안내에서 이를 구분합니다.
따라서 Internal Only 빌드가 외부 테스트 그룹에 보이지 않는 것은 업로드 실패가 아닙니다. 빌드의 분배 자격이 내부로 제한된 결과입니다. 일반 TestFlight 빌드와 테스트 그룹의 연결 규칙은 테스터와 빌드 연결 안내에서 확인할 수 있습니다.
주의: Internal Only 빌드는 외부 테스트용으로 바꿀 수 있는 대기 영역이 아닙니다. 외부 피드백이 조금이라도 필요하거나 출시 후보가 될 수 있다면 Archive 단계에서 일반 배포를 선택하십시오.
TestFlight Internal Only는 외부 테스트나 App Store 제출에 쓸 수 있을까요?
결론은 쓸 수 없습니다. Internal Only로 분류된 빌드는 내부 테스트 그룹에만 추가할 수 있고 외부 테스트에 사용할 수 없습니다. 같은 이유로 고객에게 제공할 후보 빌드나 App Store 제출용 빌드로 재사용하는 경로도 기대하면 안 됩니다. Apple의 TestFlight 개요와 빌드 업로드 안내를 기준으로 분배 목적을 확인해야 합니다.
내부 테스트 뒤에 외부 테스트가 예정되어 있다면 일반 TestFlight 빌드를 사용하십시오. 내부 검증만 필요하고 출시 계획이 없는 개발 빌드라면 Internal Only가 더 안전합니다.
일반 빌드와 Internal Only를 비교할 때 볼 항목
Internal Only의 장점
- 내부 전용 개발 빌드가 출시 후보 목록에 섞일 가능성을 줄입니다.
- 실험 기능과 디버그 설정을 팀 내부에서 검증하기 쉽습니다.
- 자동 업로드 작업에서 정식 제출 권한을 분리하기 좋습니다.
Internal Only의 한계
- 외부 테스트 그룹에 추가할 수 없습니다.
- 외부 사용자 피드백을 받을 수 없습니다.
- 나중에 정식 후보로 전환할 빌드라는 전제와 맞지 않습니다.
일반 TestFlight 및 App Store 배포의 장점
- 내부 테스트와 외부 테스트를 같은 출시 계획 안에서 운영할 수 있습니다.
- 후보 빌드를 외부 검증 후 App Store 제출 흐름으로 이어갈 수 있습니다.
- 제품 출시 전 사용자 피드백을 확보할 수 있습니다.
일반 배포의 주의점
- 개발용 Archive가 후보 목록에 들어갈 수 있으므로 이름과 브랜치 규칙이 필요합니다.
- 외부 배포와 제출 권한이 있는 자격 증명을 더 엄격히 관리해야 합니다.
- 잘못된 Scheme이나 서명 설정을 사용하면 개발 빌드가 출시 작업으로 넘어갈 수 있습니다.
App Store 제출 가능 여부는 내부 테스트 그룹에 보였는지만으로 판단하면 안 됩니다. 빌드 상태와 분배 방식, 서명, 버전 관리가 모두 맞아야 합니다. 현재 처리 상태의 의미는 Apple의 App 빌드 상태 안내에서 확인하십시오.
첫 번째 단계: 원격 Mac 자동 업로드를 두 작업으로 나누십시오
원격 Mac을 iOS 지속 통합 환경으로 사용하는 경우 하나의 업로드 Job에 모든 권한을 넣지 않는 것이 좋습니다. 원격 Mac 지속적 iOS 빌드 환경 구성 안내를 참고해 다음처럼 분리하십시오.
내부 검증 Job
- 내부 개발 브랜치만 실행 대상으로 지정합니다.
- 내부 검증용 Scheme을 고정합니다.
- Internal Only에 해당하는 업로드 방식을 사용합니다.
- 내부 테스트 그룹 확인 외에는 제출 권한을 부여하지 않습니다.
- 실패 시 로그와 Archive를 보존하되 외부 배포 자격 증명은 사용하지 않습니다.
출시 후보 Job
- 출시 후보 브랜치 또는 승인된 태그에서만 실행합니다.
- 후보용 Scheme과 export 방식을 고정합니다.
- 일반 TestFlight 및 App Store 배포 경로를 사용합니다.
- 담당자의 수동 승인 뒤에만 업로드하도록 설정합니다.
- 서명용 개인 키와 App Store Connect 자격 증명을 내부 Job과 분리합니다.
원격 Mac에서 자동 업로드할 때는 SSH, CI Runner, App Store Connect 인증 정보를 한곳에 몰아넣지 마십시오. 저장소에 개인 키, API 키, Team ID, Bundle ID, 호스트 주소, 실제 경로, 이메일 주소를 남기지 마십시오. 이 글의 예시는 특정 계정이나 저장소에 재사용할 수 있는 값이 아니라 권한 분리 원칙만 설명합니다.
두 채널을 실제 빌드로 검수하는 방법
설정 파일을 읽는 것만으로는 충분하지 않습니다. 실제 테스트 계정과 탈식별된 앱으로 두 경로를 각각 확인해야 합니다.
- [ ] 내부 검증용 브랜치와 출시 후보 브랜치를 분리합니다.
- [ ] 두 작업에서 사용하는 Scheme과 export 방식을 기록합니다.
- [ ] 내부 검증용 Archive가 Internal Only로 표시되는지 확인합니다.
- [ ] 해당 빌드가 내부 테스트 그룹에만 연결되는지 확인합니다.
- [ ] 후보 빌드가 일반 TestFlight 경로로 처리되는지 확인합니다.
- [ ] 외부 테스트 그룹에서 후보 빌드를 선택할 수 있는지 확인합니다.
- [ ] 후보 빌드에 정식 제출을 막는 Internal Only 표시가 없는지 확인합니다.
- [ ] 내부 Job에 외부 배포 및 제출용 개인 키가 없는지 점검합니다.
- [ ] 출시 후보 Job은 승인 없이 실행되지 않는지 확인합니다.
- [ ] 업로드 실패 시 인증, 분배 방식, 빌드 분류를 먼저 확인합니다.
검수에 실패했다고 곧바로 서명을 초기화하거나 인증서를 폐기하지 마십시오. 먼저 업로드 방식이 목적과 맞는지, Archive가 올바른 Scheme으로 만들어졌는지, 해당 빌드가 어느 테스트 그룹에 연결되는지 확인해야 합니다. Internal Only 표시와 외부 그룹 선택 가능 여부를 먼저 확인하는 편이 복구 비용이 낮습니다.
현재 Mac이 항상 켜져 있지 않거나 CI 작업을 지속적으로 실행하기 어렵다면, Mac mini 대여 가격과 원격 사용 조건을 비교해 볼 수 있습니다. 단순히 개발 화면을 원격으로 여는 것보다 내부 검증과 출시 후보 Job의 권한을 분리하고 안정적으로 실행하는지가 더 중요합니다.
상황별 최종 선택 카드
혼자 개발하고 팀 내부에서만 확인하는 경우
Internal Only를 선택하십시오. 외부 테스터나 고객에게 보낼 계획이 없는 개발 빌드에 적합합니다. 다만 출시 후보로 재사용할 가능성이 생기면 일반 배포용 Archive를 새로 계획해야 합니다.
공개 베타를 운영하는 경우
일반 TestFlight 및 App Store 배포를 선택하십시오. 내부 확인을 먼저 하더라도 외부 테스트로 이어질 빌드는 처음부터 일반 경로로 관리해야 합니다.
지속적으로 빌드하고 정식 출시하는 경우
내부 검증 Job과 출시 후보 Job을 분리하십시오. Internal Only를 모든 개발 작업의 기본값으로 사용하지 말고, 후보 관리와 제출 권한을 별도 승인 흐름에 두어야 합니다.
결국 선택 기준은 업로드가 쉬운가가 아니라 빌드가 어디까지 이동할 수 있어야 하는가입니다. 내부 전용이면 Internal Only, 외부 테스트나 App Store 제출 가능성이 있으면 일반 배포입니다.
현재 방식이 한 대의 개인 Mac에서 모든 작업을 처리한다면, 장시간 실행 중단, 로컬 저장 공간 부족, 서명 자격 증명 혼재가 반복될 수 있습니다. 반대로 원격 Mac을 무조건 도입해도 권한을 나누지 않으면 같은 위험이 남습니다. 내부 검증과 출시 후보를 안정적으로 계속 실행해야 하지만 보유 장비를 상시 운영하기 어렵다면, KVMNODE의 원격 Mac 환경을 임시 CI Runner 또는 출시 검증용으로 먼저 시험해 보는 편이 합리적입니다. 장기적으로 고정 부하가 크거나 물리 기기 연결이 반드시 필요한 경우에는 직접 Mac을 보유하는 방식이 더 적합할 수 있습니다.