이직을 준비하면서 새로운 프로젝트를 할 팀원들을 구하고 있었고 DDD라는 좋은 사이드프로젝트 동아리가 있어
iOS개발팀으로써 DDD사이드 프로젝트를 진행하게되었고 팀원과 이야기하여 서로의 요구를 만족하는 기술들을 찾던중
팀원과 나 둘다 CI / CD에 상당히 관심이 많아 작업을 진행하게 되었고 평소 Local or 물리맥에서만 진행했던 작업들을
GithubAction 을 통해 진행할려고하니 변경해야할 사항 찾아봐서 고쳐야할 사항들이 많아 많은 공부를 하게되었다.
Fastlane이란?
App을 빌드하고 앱스토어에 업로드하고 심사제출, 테스트빌드 업로드, 테스터 초대 등 번거롭고 오래 걸리는 작업들을 Fastlane을 통해서 자동화할 수 있습니다.
1. Fastlane 설치
brew install fastlane 명령어를 통해 fastlane을 설치한다
2. Fastlane 셋팅
fastlane init 명령어를 통해 fastlane의 기본 설정을 진행한다.
4를 입력하여 기본셋팅을 진행하게된다 진행하게되면 fastlane 폴더안에 Appfile , Fastfile이 생성된다
Appfile에 App에 대한 기본 셋팅값을 넣어주게된다
app_identifier("번들 아이디") # The bundle identifier of your app
apple_id("에플 아이디") # Your Apple email address
team_name("에플 팀이름")
team_id("에플 팀아이디") # Developer Portal Team ID
팀아이디와 팀이름은 apple developer 의 맴버쉽에 들어가면 확인 할 수 있다.
그리고 fastlane의 파일을 수정을 변경하면된다.
Fastlane을 사용하게되면 필연적으로 AppStore Connect에 접속을 하게 되는데 이때 이중인증이나 기타 여러 인증 작업들을
거치기에는 GithubAction에서 사용하기에 불편함이 많아 App Store Connect Api Key를 통해 AppStore Connect에 접속을 하게되었다 AppStore Connect를 이용하면 이중인증과 같은 불편한 사항을 따로 처리하지 않고 접속 할 수있다.
App Store Connect Api Key 를 발급 받는 방법이 정리되어있는 블로그 자료를 첨부해 대체하겠다.
AppName = "HelpMeChooseIOS"
Scheme = "HelpMeChooseIOS"
BundleId = "io.tuist.HelpMeChoose"
ApiKeyPath = "fastlane/29H93BJQ55.json"
#인증아이디
ENV['PROVISIONING_PROFILE_SPECIFIER'] = "match AppStore io.tuist.HelpMeChoose"
#Github ScreatKey에서 값을 받아 사용한다.
API_KEY_ID = ENV["API_KEY_ID"]
API_ISSUER_ID = ENV["API_ISSUER_ID"]
API_PRIVATE_KEY = ENV["API_PRIVATE_KEY"]
TEAM_ID = ENV["TEAM_ID"]
desc "build app and upload to testflight"
lane :debugUpload do
#앱스토어에 연결한다
#app_store_connect_api_key 연결시 2중 인증을 안해도된다.
app_store_connect_api_key(
key_id: API_KEY_ID,
issuer_id: API_ISSUER_ID,
key_content: API_PRIVATE_KEY
)
#testflight에 등록된 최신 빌드버전을 가져와 +1을 해준다.
latest_build_number=latest_testflight_build_number
buildApp "Debug"
pilot
end
desc "Get certificates"
lane :certificates do
app_store_connect_api_key(
key_id: API_KEY_ID,
issuer_id: API_ISSUER_ID,
key_content: API_PRIVATE_KEY
)
#Fastlane Match를 통해 인증키를 가져온다.
sync_code_signing(
type: "development",
app_identifier: BundleId,
force_for_new_devices: true,
readonly: false
)
sync_code_signing(
type: "appstore",
app_identifier: BundleId,
readonly: false
)
end
def buildApp(configuration)
#코드에 브로비저닝 파일 등록 및
#Tuist를 사용해서 프로젝트를 만들고 배포하기때문에 auto signing이 셋팅되어있는데 해당 사항을 해제한다.
update_code_signing_settings(
use_automatic_signing: false,
path: AppName + ".xcodeproj",
)
#App에 프로젝트 팀 등록
update_project_team(
path: AppName + ".xcodeproj",
teamid: TEAM_ID
)
build_app(
workspace: AppName + ".xcworkspace",
scheme: Scheme,
configuration: configuration,
xcargs: "-allowProvisioningUpdates",
export_method: "app-store",
export_options: {
provisioningProfiles: {
BundleId => 'match Development io.tuist.HelpMeChoose'
}
},
xcargs: "PROVISIONING_PROFILE_SPECIFIER='match Development io.tuist.HelpMeChoose'"
)
end
Fastlane의 값을 여기에 적혀있는대로 사용하고
각종 인증에 필요한 값들을 GithubAction Screet을 이용해 등록해 사용한다.
3. Fastlane Match 셋팅
Fastlane Match란?
https://docs.fastlane.tools/actions/match/
팀 전체에서 인증서 및 프로필을 쉽게 동기화
iOS 및 macOS 코드 서명에 대한 새로운 접근 방식: 개발 팀 전체에서 하나의 코드 서명 ID를 공유하여 코드 서명 설정을 간소화하고 코드 서명 문제를 방지합니다.
match 는 codesigning.guide 개념 의 구현입니다 . match 는 모든 필수 인증서 및 프로비저닝 프로필을 생성하고 별도의 git 저장소, Google Cloud 또는 Amazon S3에 저장합니다. 선택한 저장소에 대한 액세스 권한이 있는 모든 팀 구성원은 코드 서명에 해당 자격 증명을 사용할 수 있습니다. 또한 match 는 손상되고 만료된 자격 증명을 자동으로 복구합니다. 팀 간에 서명 자격 증명을 공유하는 가장 쉬운 방법입니다.
해당 프로젝트에 들어가 fastlane match init 명령어를 통해 match를 설정한다.
fastlane 폴더에 들어가 Matchfile 파일을 들어가보면
기본값이 셋팅되어있는데 해당 프로젝트의 설정에 맞게 변경을 해준다.
저기서 git url은 github에 들어가 private레포로 만들어 match file을 등록할 빈 레포를 만들고 설정을 하면 인증에 필요한 파일들이 레포에 등록이 된다.
우선 하나씩 셋팅을 진행하자면
fastlane match nuke development
fastlane match nuke distribution
를 통해 기존에 등록되어있던 인증키를 삭제한다.
그리고
fastlane match development
fastlane match distribution
을 통해 fastlane인증값을 새롭게 셋팅한다.
셋팅이 완료되면
이렇게 셋팅이 완료되고 내가 등록한 깃 허브 레포에 인증값이 들어가게되고 해당 인증값을 통해 어디서든 인증키값을 사용 할 수 있게된다.
명령어를 통해 인증키를 등록하고 사용 할 수 있게한다.
sync_code_signing(
type: "development",
app_identifier: BundleId,
force_for_new_devices: true,
readonly: false
)
3. Github Action 셋팅
Github Action에서는 그렇게 많은 셋팅을 할 필요가없는데 필요로한 변수값들을 env로 전달 한 후
필요한 순서에 맞추고 필요한 규칙에 맞춰 lane을 셋팅해주면된다.
'Swift 기술 공부' 카테고리의 다른 글
[Tuist] 회사 프로젝트에 Tuist 를 도입하고 난 후 주저리주저리 (3) | 2022.10.03 |
---|