[Fastlane] App Store Connect API Key로 인증하기

이중 인증 이슈 없이 App Store Connect 로그인하기

이승연
4 min readJul 9, 2021
Fastlane logo

Fastlane은 iOS와 Android 앱 배포를 쉽게 자동화 할 수 있는 오픈소스 플랫폼입니다. ruby로 구현되어있으며 lane이라는 단위로 구성해서 사용합니다. 배포 뿐만 아니라 Test, Build, Code Signing, 앱스토어 심사 요청, source control 등을 자동화 시킬 수 있는 아주 매력적인 툴입니다.

이전에 Flutter 프로젝트에 Fastlane을 사용했던 경험을 블로그 에 작성했었는데요. 요즘 fastlane을 다시 설정하고 있어서 놓쳤거나 부족한 부분은 다시 공부하고 다른 분들도 삽질하지 않으셨으면 하는 바람으로 정리해보려고 합니다.

App Store Connect API Key로 인증하기

TestFlight에 업로드 처럼 App Store Connect에 접근해야하는 작업에는 로그인이 반드시 필요합니다.

  1. App Store Connect API Key (추천)
    API Key를 발급받아 사용하는 방법.
  2. 이중 인증(2FA)
    키체인에 저장해두고 로그인하는 방식으로 세션이 만료되면 이중 인증을 해줘야함. 보통 아무 설정도 안하셨다면 이 방식으로 쓰고 계실 거예요.
  3. Application-specific passwords(앱 암호)
    저는 이거 입력하라는 메세지가 떠서 우선 입력해두긴 했어요. 이 방법도 괜찮은거 같지만 Fastlane에서 추천하는걸 쓰는게 좋을 것 같아요.

공식문서에서는 첫번째 방법인 App Store Connect API Key를 발급 받아 사용하는 것을 가장 추천합니다.

문서에서 말하는 App Store Connect API Key의 장점

  • No 2FA needed
  • Better performance
  • Documented API
  • Increased reliability

제가 느낀 장점

  • 이중 인증(2FA) 문제가 없다 💯
  • 관리가 쉽다

가장 큰 장점은 이중 인증을 하지 않아도 돼서 간편하다는 점입니다. 매번 이중 인증을 받거나 세션을 갱신해주는 처리를 하는건 너무 귀찮거든요ㅎ.. 특히 CI에 Fastlane을 붙일 때에도 편하겠죠.

App Store Connect API가 지원하는 기능

그런데 App Store Connect API가 아직 Fastlane의 모든 기능을 지원하지 않으니까 잘 보고 쓰라고 하길래 확인해봤습니다. 많이 쓰는 기능은 다 지원하고 있으니까 걱정안해도 될 것 같아요.

지원하지 않는 기능
produce: App Store Connect와 Developer Portal에 새 iOS 앱 생성
pem: push notification profile 생성 및 갱신

App Store Connect API Key 사용하기

  1. 키 생성
    App Store Connect에서 API Key를 발급 받습니다.
    https://appstoreconnect.apple.com/access/users
  2. 생성된 키 다운로드(.p8)
    새로 고침을 하면 키를 다운받을 수 없으니 주의하세요.
  3. fastlane 디렉토리에 [KEY ID].json 파일을 생성하고 아래와 같이 채워넣습니다.
Key ID json

예제 코드

TestFlight에 업로드할 때 가장 최근 빌드 번호를 가져와서 그 다음 번호로 올리는 코드입니다.

저는 json 파일로 관리하는 것이 가장 깔끔해보여서 이 방법을 사용했습니다. 이 외에도 app_store_connect_api_key 를 사용하는 방법도 있으니 취향에 맞는 방법을 선택하시면 되겠습니다.

References

https://docs.fastlane.tools/app-store-connect-api/#using-fastlane-api-key-json-file
https://docs.fastlane.tools/best-practices/continuous-integration/

--

--