티스토리 뷰
지난 블로그에서 CI/CD 설명과 간략하게 설치까지 알아봤었는데 잘 되지 않았다!
그래서 오늘은 오류들을 어떻게 해결했는지에 대한 추가설명을 해보고자 한다.
[iOS] CI/CD 알아보기 (fastlane 설치까지)
소프트웨어 공부를 하다 보면 CI/CD 파이프라인 구축이라는 말을 한 번쯤은 들어봤을 것이다!오늘은 이 CI/CD 가 어떤 개념인지, 그리고 iOS에서는 어떻게 적용해 볼 수 있는지 한번 알아보자
yanni13.tistory.com
📍마주친 오류
처음에 fastlane을 설치하고 팀원에 속한 나의 계정을 통해 로그인을 해서 설치를 했었는데 내 계정에는 AppId가 존재하지 않는다는 오류가 발생했다. (이전블로그 참고)
그래서 팀원 ID로 다시 재설치를 해서 될 줄 알았더니 이번엔 빌드까진 됐지만 testflight에 업로드 하는 과정에서 오류가 생긴다는 것이었다. testflight에 업로드하는 과정에서 authorization에 대한 문제가 발생했던 것이였다.
apple 공식문서와 다른 블로그를 참고해 보니 지금 우리가 하려는 것은 터미널에서 fastlane beta를 입력하면 자동으로 testflight에 업로드가 되게 하는 자동화를 하고자 하는 것이다.
그럼 testflight에 접근 및 업로드하기 위해서 또 다른 인증관련한 key가 필요한데 그 방법 중에 하나가 App Store Connect에 연결하고 key를 통해 권한을 부여받는 것이다.
💡App Store Connect Api
App Store Connect API에 연결하기 위해서는 API에 대한 각 요청을 승인하기 위해 app store connect api에서 발급받은 JWT가 필요하다. 그래서 App Store Connect에서 다운로드한 API 키를 사용하여 JWT를 생성하도록 도와주도록 한다.
발급 방법
- App Store Connect -> 사용자 및 액세스 -> Key 발급

그럼 위와 같이 발급받을 수 있도록 뜬다. Issuer ID와 key ID, 키(. p8)가 발급받아지며 한번 발급받으면 다시 다운을 못한다는 얘기가 있어서 잘 저장해서 보관해야 한다.
📚 Fastfile 및 파일 추가
apple에서 Api key(. p8)을 발급받았으면 숫자와 영어로 된 파일이 존재한다.
예시에서는 임의로 abcdefghi라고 가정하겠다!
AuthKey_abcdefghi.p8 이런 식으로 키가 발급받아지는데 저 사이의 숫자와 영어로 된 키 명을 fastlane 폴더 내부에 json 파일로 파일을 생성해 주면 된다.

json 파일의 이름은 발급받은 키 이름과 동일하게 생성해주면 된다.
그리고 json파일에 아래 항목을 넣어서 저장해 주면 된다.
{
"key_id": "D383SF739",
"issuer_id": "6053b7fe-68a8-4acb-89be-165aa6465141",
"key": "-----BEGIN PRIVATE KEY-----\nMIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHknlhdlYdLu\n-----END PRIVATE KEY-----",
"duration": 1200, # optional (maximum 1200)
"in_house": false # optional but may be required if using match/sigh
}
애플 공식문서에도 자세하게 설명돼있어서 json파일의 예시를 가져와보았다.
사용해 줄 json 파일에 위 형식대로 저장해서 사용해~~라고 친히 알려주고 있다.
아까 키 생성할 때 발급받은 key_id와 issuer_id를 그대로 복사해서 넣어주면 된다.
keyID는 AuthKey_abcdefghi.p8 파일을 열게 되면 아래와 같이 뜨는데 줄 바꿈 없이 모두 이어줘서 위 형식으로 복사 붙여 넣기 하면 된다.

duration은 API 토큰의 유효 기간인데 최대가 1200이니 1200으로 설정해 주면 되고, in_house는 배포 여부를 지정하는 불리언 값인데 기본값이 false이므로 딱히 건들지 않았다.
이제 json 파일은 다 설정했으니 Fastfile을 수정해 주자!
upload_to_testflight에 api_key_path부분에다가 아까 생성한 json파일을 넣어주면 된다
default_platform(:ios)
platform :ios do
desc "Push a new beta build to TestFlight"
lane :beta do
get_certificates
get_provisioning_profile
increment_build_number(xcodeproj: "pennyway-client-iOS.xcodeproj")
build_app(workspace: "pennyway-client-iOS.xcworkspace", scheme: "Pennyway-Release")
upload_to_testflight(
api_key_path: "fastlane/abcdefghi.json"
)
end
end
그리고 다시 fastlane beta를 실행하면!! 성공한 것이 보인다!!!!!


apple developer에서도 정상적으로 testflight가 배포된 것을 확인할 수 있다 ㅎㅎㅎㅎ
🥊 gitIgnore

처음에 이대로 프로젝트 dev 브랜치에 commit과 push를 진행하려 했었다 ㅎㅎ..
인증 관련 파일까지 싹 다 올라갈뻔했었지만 다행히 커밋에서 멈춘 상태였다.
fastlane beta를 실행하고 나면 프로젝트 파일에 인증관련된 파일이 추가로 몇 개 더 생긴다.
대표적인 게 report.xml이랑, Api key가 들어있는. json 파일, 그리고 나머지 zip파일등 보안 관련 이슈로 깃허브에 올라가지 못하도록 gitignore을 통해 막아줘야 한다!
꼭!!!!!! 만약 인증 관련 키가 올라갔다면 oauth등등 인증관련 발급받아야 하는 것들을 다 다시 받아야 되므로 답이 없는 상황이 발생할 수 있다.
'iOS' 카테고리의 다른 글
| [iOS] URL Scheme를 통한 딥링크 설계 및 구현 (0) | 2025.02.14 |
|---|---|
| [iOS] RxSwift vs Combine (3) | 2024.11.30 |
| [iOS] CI/CD 알아보기 (fastlane 설치까지) (0) | 2024.11.17 |
| [iOS] RxSwift 예제로 알아보기 (2) (3) | 2024.11.07 |
| [iOS] RxSwift 알아보기 (1) (2) | 2024.10.13 |
- Total
- Today
- Yesterday
- SnapshotTest
- 프로그래머스
- Fastlane
- Xcode
- awakeFromNib
- internal Combine
- rxswift
- ios
- 코딩테스트
- UIKit
- ObservableObject
- swiftUI
- combine
- Swift Concurrency
- Task
- 백준
- 클로저
- CoreData
- SWIFT
- UITest
- Swift Format
- XCTest
- detached task
- unstructed task
- 스위프트
- group tasks
- prepareForReuse
- asyne-let
- closure
- foundation models
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |