iOS 프로젝트에 CICD를 구축하고 잘 사용하던 중
갑자기 에러가 뜨면서 업로드에 실패했습니다..!
Available session is not valid anymore. Continuing with normal login.
Two-factor Authentication (6 digits code) is enabled for account 'mymail@gmail.com'
More information about Two-factor Authentication: https://support.apple.com/en-us/HT204915
If you're running this in a non-interactive session (e.g. server or CI)
check out https://github.com/fastlane/fastlane/tree/master/spaceship#2-step-verification
(Input `sms` to escape this prompt and select a trusted phone number to send the code as a text message)
(You can also set the environment variable `SPACESHIP_2FA_SMS_DEFAULT_PHONE_NUMBER` to automate this)
(Read more at: https://github.com/fastlane/fastlane/blob/master/spaceship/docs/Authentication.md#auto-select-sms-via-spaceship_2fa_sms_default_phone_number)
Please enter the 6 digit code:
Requesting session...
콘솔창을 읽어보니 업로드된 마지막 빌드 넘버를 TestFlight에서 가져와 1을 더해주는데
이때 테플에 접근하기 위해 이중인증을 진행하는 것..!
(지금까지는 초반 셋팅할 때 수동으로 이중인증 했던것이 캐시로 남아있었나 봅니당)
어쩐지,, 맥북에 계속 이중인증 코드가 날아오더라니...
두둥... 관련 링크들을 전부 확인하여 해결방법을 찾았습니다.
App Store Connect에 접근해야 되는 구문에서 2FA 대신
key를 이용하도록 셋팅하는 방법을 사용했는데요.
아래와 같이 명령어를 입력할 때 Key정보를 함께 제공하여
안전하게 로그인 하도록 해주는 겁니다!
(내 API Key 넘겨줄테니 로그인 하게 해줘~~)
latest_build_number=latest_testflight_build_number(
api_key_path: "fastlane/{My_Key_ID}.json"
)
upload_to_testflight(
api_key_path: "fastlane/{My_Key_ID}.json"
changelog: "#{Time.now.strftime("%Y-%m-%d %H:%M")} 스테이징 QA"
)
그렇다면 API Key 정보를 어떻게 넘겨야될까요?
Fastfile에 직접 API 정보를 적어서 넘겨줄 수도 있지만
저희는 파일에 정보를 적고 경로를 알려주는 방법을 사용해봅시다.
.
.
.
.
.
.
fastlane폴더에 json파일을 만들고 발급받은
API key를 이름으로 지정해줍니다.
fastlane/{My_Key_ID}.json
{
"key_id": "D383SF739",
"issuer_id": "6053b7fe-68a8-4acb-89be-165aa6465141",
"key": "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHknlhdlYdLu\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
key와 관련된 다양한 정보를 넘겨주는데요.
각각의 값을 어디서 불러오는지 하나하나 살펴봅시다!
1. App Store에서 API Key 발급받기
App Store Connect에 접속하여
사용자 및 액세스 > 통합 > App Store Connect API > 팀 키
를 하나 생성합니다.
고정된 값인 Issuer_id와 발급받은 key_id를 확인하실 수 있습니다.
다음으로 API 키를 다운로드 받아보겠습니다.
활성화된 키 우측에 "다운로드" 버튼을 눌러 key 파일을 다운로드 받습니다.
** 키 파일은 최초 1회만 다운로드 가능하니 안전하게 잘 저장하도록 합니다.
다운로드된 p8파일을 열어보면 다음과 같이 나타납니다.
AuthKey_{My_Key_ID}.p8
-----BEGIN PRIVATE KEY-----
T9jRhF5zvPm28LCJXw7Knd1jBXYl0M6NaWf4UGpEsbHqOcI2SA
Q2lGmR7KaPZ4s1vTn8oHj3fN6cW5yDzJBrIkqEUwbOX9YLtCVA
Xj4DwU6Ns2KaHqPmV8FzL7B3g0R1yItOx9CdEHpJY5WlZnMvoS
69W0LpBt
-----END PRIVATE KEY-----
줄바꿈을 "\n"으로 변환해주면 key 값을 얻을 수 있습니다.
-----BEGIN PRIVATE KEY-----\nT9jRhF5zvPm28LCJXw7Knd1jBXYl0M6NaWf4UGpEsbHqOcI2SA\nQ2lGmR7KaPZ4s1vTn8oHj3fN6cW5yDzJBrIkqEUwbOX9YLtCVA\nXj4DwU6Ns2KaHqPmV8FzL7B3g0R1yItOx9CdEHpJY5WlZnMvoS\n69W0LpBt\n-----END PRIVATE KEY-----
2. API 키의 유효기간 설정
duration 필드는 fastlane을 통해 App Store Connect API에 접근할 때
사용되는 JWT기반 토큰이 얼마나 오랫동안 유효한지를 정의합니다.
이 값이 짧을수록 보안이 강화되지만,
너무 짧게 설정하면 자주 토큰을 갱신해야 하는 불편함이 있을 수 있으니
적정한 값을 설정해주세요.
설정 가능한 최대값은 1200으로 20분입니다.
3. 인하우스 배포 여부 설정
in_house 필드는 해당 API 키가 어떤 유형의 배포를 위해
생성되었는지를 나타냅니다.
주로 기업 계정(Enterprise Account)을 사용하는 경우에 설정됩니다.
이 필드가 true로 설정되면 해당 API 키는
기업용 앱의 배포에 사용된다는 것을 의미합니다.
기업 계정을 사용하는 경우 앱은 App Store를 통해서가 아니라
내부적으로(사내 배포) 배포됩니다.
일반적으로 개인 개발자나 표준 개발자 계정에서는
이 필드를 false로 설정하거나 아예 사용하지 않습니다.
.
.
.
여기까지 CI/CD 구축 시 Fastlane 2FA 이슈 관련 포스팅 마칩니다 :)
또다른 이슈사항이 생기면 다시 돌아오겠습니다 😎
'앱개발 > 에러모음.zip' 카테고리의 다른 글
Xcode Playground 무한로딩 해결 (1) | 2024.07.12 |
---|