[Tuist+Fastlane+GithubAction] App 배포 CI/CD 과정
2024. 4. 28. 00:09ㆍ🍏/Xcode
이 글은 Tuist와 Fastlane, Github Action을 통하여 앱을 배포한 과정을 큰 맥락으로 공유하고 있습니다. 😊
0. 버전
tuist@3.36.2
fastlane@2.220.0.
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.arm64e-darwin24]
해당 버전을 쓰고 있습니다.
1. Tuist 설치.
curl -Ls https://install.tuist.io|bash
2. Fastlane 설치
brew install fastlane
3. Ruby 설치
4. .cer, .p12, mobileprovision 발급 과 master.key를 이용한 tuist singing 아래 블로그 참조, 도움이 너무 많이 됐습니다.
5. Fastlane 설정
# Constants
APP_NAME = "iBox"
SCHEME = "iBox"
BUNDLE_ID = "com.box42.iBox"
KEYCHAIN_NAME = ENV["KEYCHAIN_NAME"]
KEYCHAIN_PASSWORD = ENV["KEYCHAIN_PASSWORD"]
default_platform(:ios)
platform :ios do
# Keychain
desc "Save To Keychain"
lane :set_keychain do |options|
create_keychain(
name: "#{KEYCHAIN_NAME}",
password: "#{KEYCHAIN_PASSWORD}",
default_keychain: true,
unlock: true,
timeout: 3600,
lock_when_sleeps: true
)
import_certificate(
certificate_path: "Tuist/Signing/release.cer",
keychain_name: "#{KEYCHAIN_NAME}",
keychain_password: "#{KEYCHAIN_PASSWORD}"
)
import_certificate(
certificate_path: "Tuist/Signing/release.p12",
keychain_name: "#{KEYCHAIN_NAME}",
keychain_password: "#{KEYCHAIN_PASSWORD}"
)
install_provisioning_profile(path: "Tuist/Signing/#{APP_NAME}.Release.mobileprovision")
end
# Upload TestFlight
desc "Push to TestFlight"
lane :tf do |options|
# AppStore Connect API key
app_store_connect_api_key(is_key_content_base64: true, in_house: false)
# BuildNumber Up
increment_build_number({ build_number: latest_testflight_build_number() + 1 })
# Build App
build_app(
workspace: "#{APP_NAME}.xcworkspace",
scheme: "#{SCHEME}",
export_method: "app-store"
)
# Upload to TestFlight
upload_to_testflight(skip_waiting_for_build_processing: true)
end
end
5. Github Token 발급, 설정
6. AppStore Connect API KEY 설정
7. GitHub Action workflows 설정
# Author by chanhihi
# Date 2024.04.26
name: Deployment
on:
pull_request:
branches:
- main
types:
- closed
jobs:
build:
name: Deploy on macOS latest - Release for iOS
runs-on: macos-latest
env:
XCODE_VERSION: "16.1.0"
SWIFT_VERSION: "5.9.2"
RUBY_VERSION: "2.6.10"
TUIST_VERSION: "3.36.2"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Ruby 2.6
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ env.RUBY_VERSION }}
bundler-cache: true
- name: Set Xcode version
run: sudo xcode-select -s '/Applications/Xcode_15.2.0.app/Contents/Developer'
- name: Setup Swift
uses: swift-actions/setup-swift@v1
with:
swift-version: ${{ env.SWIFT_VERSION }}
- name: .env
run: touch .env &&
echo "APP_STORE_CONNECT_API_KEY_KEY_ID=${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}" >> .env &&
echo "APP_STORE_CONNECT_API_KEY_ISSUER_ID=${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}" >> .env &&
echo "APP_STORE_CONNECT_API_KEY_KEY=${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}" >> .env
- name: Setting Master Key
run: |
echo "$MASTER_KEY" > Tuist/master.key
env:
MASTER_KEY: ${{secrets.MASTER_KEY}}
- name: Mise
uses: jdx/mise-action@v2
- name: Install Tuist
run: mise install tuist@${{ env.TUIST_VERSION }}
- name: Tuist version
run: mise use -g tuist@${{ env.TUIST_VERSION }}
- name: Install Fastlane
run: brew install fastlane
- name: Tuist clean
run: tuist clean
- name: Tuist fetch
run: tuist fetch
- name: Tuist Signing Decrypt
run: tuist signing decrypt
- name: Set Keychain
run: fastlane set_keychain
env:
KEYCHAIN_NAME: ${{ secrets.KEYCHAIN_NAME }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
- name: Generate Xcode project with Tuist
run: tuist generate
- name: Fastlane run
run: fastlane tf
- name: Tagging
id: tag_version
uses: mathieudutour/github-tag-action@v6.1
with:
github_token: ${{ secrets.CHANHIHI }}
- name: Draft Release
id: draft_release
uses: release-drafter/release-drafter@v5
with:
config-name: Release-note.yml
env:
GITHUB_TOKEN: ${{ secrets.CHANHIHI }}
8. main branch로 push
9. Test Flight
- 2024/11/11 추가
Xcode major version이 올라가면서 github action의 major버전도 대응했습니다.
'🍏 > Xcode' 카테고리의 다른 글
[Xcode Cloud] 토이프로젝트에 CI / CD 적용하기 (1) | 2024.11.11 |
---|---|
[Xcode / Swift] 빌드 시스템에 대한 이해 / 증분 빌드 / 병렬 처리 / Eager Linking / Incremental (1) | 2024.10.29 |
[Tuist] Version 4 / config / package / dependencies (0) | 2024.03.29 |
[Tuist] Version 4 / UIKit / AppDelegate / SceneDelegate (1) | 2024.03.28 |
[Tuist] Version 4 / init / edit / generate / 초기설정 / 수정 / 실행 (1) | 2024.03.27 |