GitHubActions×Fastlane×FirebaseでiOSアプリを配布するCI/CDを構築
こんばんはリーさんです!
とある大型案件でCI/CDを構築してと頼まれたので
その際にかなり設定に手こずったので構築手順をメモして行こうと思います!!
手順1 GitHubActions secret設定
プロジェクト → Settingへ
Actionsをクリックしたら下記の内容を設定しましょう
CERT_PASSWORD
証明書を書き出す際に設定したパスワードを入れてください
FIREBASE_TOKEN
下記のコマンドでFirebaseにログインしてください
firebase login:ci
$ firebase login:ci
Visit this URL on this device to log in:
https://accounts.google.com/o/oauth2/auth?client_id=123456789012-aaaabbbbccccddddeeeeffffgggghhhh.apps.googleusercontent.com&scope=email%20openid%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloudplatformprojects.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ffirebase%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform&response_type=code&state=123456789&redirect_uri=http%3A%2F%2Flocalhost%3A9005
Waiting for authentication...
✔ Success! Use this token to login on a CI server:
1//xxxx_yyyy000_XXXXYYYYZZZZaaa-XXXXbb-ZZZZYYYYXXXX00001111222233_aaaabbbbccccddddeeeeffffgggghhhhiiiij ← 1//から始まるところ!
Example: firebase deploy --token "$FIREBASE_TOKEN"
KEYCHAIN_PASSWORD
こちらは好きなパスワードを入れてください(一時的に使うものなのでなんでもOK)
p12_BASE64
下記のコマンドで証明書をbase64化したものをコピーして入れてください
$ cat 証明書.p12 | base64 | pbcopy
PROVISIONING_BASE64
下記のコマンドでプロビジョニングプロファイルをbase64貸したものをコピーして入れてください
$ cat hogehoge.mobileprovision | base64 | pbcopy
手順2Git-workflowのymlファイルの作成
set up a workflow yourselfをクリック
ここに下記のコードをコピペしてコミットプッシュしてください
(プロジェクトルート)/.github/workflows/swift.yml
# This is a basic workflow to help you get started with Actions
name: Adhoc Distribution
on:
push:
tags:
- '[0-9].[0-9].[0-9]'. //バージョンタグをプッシュがトリガー
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '18.x'
- name: Bundle Install
run: bundle install
- name: Keychain.p12
run: |
echo "${{ secrets.P12_BASE64 }}" > ios_distribution.p12.txt
base64 --decode ios_distribution.p12.txt > ios_distribution.p12
- name: ProvisioningProfile
run: |
echo "${{ secrets.PROVISIONING_BASE64 }}" > adhoc.mobileprovision.txt
base64 --decode enterprise.mobileprovision.txt > adhoc.mobileprovision
- uses: actions/cache@v2
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Install CocoaPods frameworks and build with custom scripts
if: steps.cache-cocoapods.outputs.cache-hit != 'true'
run: pod install
- name: list files
run: ls -l
- name: Enterprise Build and App Distribution
env:
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
CERT_PASSWORD: ${{ secrets.CERT_PASSWORD }}
FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
DISABLE_SWIFTLINT: true //SWIFTLINT fastlaneが引っかかるため
run: |
npm install -g firebase-tools
bundle exec fastlane archive_stg_app_distribution
手順3 Fastlaneセットアップ
Fastlaneインストール
sudo gem install fastlane --verbose
fastlaneファイルを作成
fastlane init
Gemfileも一緒に作成されるので中身を修正
gem "fastlane"
gem "cocoapods" ← SPMの場合は不要
fastlaneにFirebase App Distributionのプラグイン追加
(プロジェクト配下で下記コマンド実行)
fastlane add_plugin firebase_app_distribution
fastlane fileの中身を編集
ENV["FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT"] = "1800" //タイムアウトして失敗を防ぐため
ENV['XCODE_VERSION'] = "14.3.1" 最新のXcodeを指定
default_platform(:ios)
platform :ios do
desc "Import Certificates and Provisioning Profile"
private_lane :import_certificates_and_provisioning_profile do
create_keychain(
name: "ios_app_keychain",
password: ENV["KEYCHAIN_PASSWORD"],
timeout: 1800
)
import_certificate(
certificate_path: "ios_distribution.p12",
certificate_password: ENV["CERT_PASSWORD"],
keychain_name: "ios_app_keychain",
keychain_password: ENV["KEYCHAIN_PASSWORD"]
)
install_provisioning_profile(path: "adhoc.mobileprovision")
end
desc "Archive STG and send to Firebase"
lane :archive_stg_app_distribution do
import_certificates_and_provisioning_profile
build_app(workspace: "SampleApp.xcworkspace",
scheme: "SampleApp_STG", //ビルドしたいスキーム
configuration: "STG",
clean: true,
export_options: {
method: "Adhoc", //AdhocやEnterpriseなど
provisioningProfiles: {
"jp.co.hoge.sampleApp" => "jp.co.hoge.sampleApp" //左バンドルID 右provisioning名
}
})
firebase_app_distribution(
app: "1:hogehogehogehogehogehogehoge", //firebaseのAppID
groups: "mygroup1,mygroup2,mygroup3", //テスターのgroup名
release_notes: "STG環境 テスト配信",
firebase_cli_path: `which firebase`.strip()
)
end
end
これで準備は完了です!
Githubに1.2.5などのバージョンタグをプッシュしてGitHubActionsが起動するか確認しましょう!細かいところは後ほど追記していけたらと思います。