【Xcode/Fastlane】自動ビルドしてipaファイルを生成/アーカイブする方法!build_app
この記事からわかること
- iOS/Xcodeの自動化ツール:Fastlaneの使い方
- 自動ビルドしてipaファイルを生成する方法
- build_appアクションとgymの違い
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- watchOS:10.0
- Swift:5.9
- macOS:Sonoma 14.1
- fastlane:2.221.0
Xcode/iOSアプリでFastlaneを使用して自動ビルドしてipaファイルを生成する方法をまとめていきます。導入やセットアップの方法は以下の記事を参考にしてください。
自動ビルドしてipaファイルを生成する方法
iOSアプリでFastlaneを使用して自動ビルドし、ipaファイルを生成するには「Fastfile」でbuild_app
アクションを使用します。プロビジョニングプロファイルは今回自動生成させたいのでautomatic_code_signing
アクションを使用しておきます。その際にApple Developer ProgramのチームIDが必要になるので自身のものに置き換えておいてください。
公式リファレンス:automatic_code_signing
default_platform(:ios)
platform :ios do
desc "Create ipaファイル"
lane :build do
# 自動署名
automatic_code_signing(
use_automatic_signing: true,
team_id: XXXXXXXX # 自分のチームIDに置き換える
)
# ビルド(ipaファイル生成)
build_app(
scheme: "FastlaneTest",
output_directory: "./build", # 出力先ディレクトリ
output_name: "FastlaneTest.ipa", # 出力ファイル名
export_xcargs: "-allowProvisioningUpdates" # プロビジョニングプロファイルを自動的に更新
)
end
end
「Fastfile」の準備ができたら以下コマンドを実行します、
$ bundle exec fastlane build
問題なく成功すると以下のように表示され指定した出力先に「FastlaneTest.app.dSYM.zip」と「FastlaneTest.ipa」が生成されています。ついでにアーカイブも自動生成してくれているのであとはアップロード作業をするだけになります。
[13:50:08]: Successfully exported and compressed dSYM file
[13:50:08]: Successfully exported and signed the ipa file:
[13:50:08]: /Users/XXXXXX/Desktop/FastlaneTest/build/FastlaneTest.ipa
+---------------------------------------------+
| fastlane summary |
+------+------------------------+-------------+
| Step | Action | Time (in s) |
+------+------------------------+-------------+
| 1 | default_platform | 0 |
| 2 | automatic_code_signin | 0 |
| | g | |
| 3 | build_app | 21 |
+------+------------------------+-------------+
[13:50:08]: fastlane.tools finished successfully 🎉
引数でいろいろ設定を変更できる
build_app
アクションの引数からビルド時の詳細な設定をいろいろを指定することができます。詳細は公式リファレンスを参考にしてください。
build_app(
scheme: "スキーム名", # スキームを指定
project: "XXXXXXXXX.xcodeproj", # プロジェクトファイルを明示的に指定
workspace: "XXXXXXXXX.xcworkspace", # Cocoa Podsを使用している場合
clean: true, # ビルド前にクリーンビルドを実行
export_method: "app-store", # エクスポート方法 ex.app-store, ad-hoc, enterprise, development
output_directory: "./build", # 出力先ディレクトリ
output_name: "FastlaneTest.ipa", # 出力ファイル名
export_xcargs: "-allowProvisioningUpdates", # プロビジョニングプロファイルを自動的に更新
export_options: {
provisioningProfiles: { # プロビジョニングプロファイルを明示的に指定
"com.XXXXXXXXX.XXXXXXXXX" => "プロビジョニングプロファイル名"
}
}
)
gymアクションとの違い
Fastlaneには同じような挙動をするgym
アクションがあります。調べてみるとbuild_app
はgym
をラップして使いやすいようにしているものらしいので引数などもほぼ同じような感じで使用することができます。そのため先ほどのレーン処理gym
に置き換えても問題なく動作させることができました。
default_platform(:ios)
platform :ios do
desc "Create ipaファイル"
lane :build do
# 自動署名
automatic_code_signing(
use_automatic_signing: true,
team_id: XXXXXXXX # 自分のチームIDに置き換える
)
# ビルド(ipaファイル生成)
gym(
scheme: "FastlaneTest",
output_directory: "./build", # 出力先ディレクトリ
output_name: "FastlaneTest.ipa", # 出力ファイル名
export_xcargs: "-allowProvisioningUpdates" # プロビジョニングプロファイルを自動的に更新
)
end
end
Gymfileでパラメータを使い回しできる
build_app
またはgym
アクションのパラメータを使い回すようにしたい場合はfastlane gym init
コマンドでgymの構成ファイルである「Gymfile」を生成して中にパラメータを記述しておけば良いみたいです。
$ fastlane gym init
scheme("Example")
sdk("iphoneos9.0")
clean(true)
output_directory("./build") # store the ipa in this folder
output_name("MyApp") # the name of the ipa file
「Gymfile」にパラメータを定義しておくことで「Fastfile」側にパラメータを記述する必要が無くるので見通しが良くなります。
Looks like no provisioning profile mapping was providedエラーの解決方法
ビルドするコマンドを実行すると以下のようにエラーになることがありました。この場合でもアーカイブは成功しており、ipaファイルの作成が失敗していたようです。エラー内容をみるとLooks like no provisioning profile mapping was provided(プロビジョニング プロファイル マッピングが提供されていないようです)
と表示されていました。
これはautomatic_code_signing
アクションを実行していないから発生したようで、組み込むと解消することができました。
▸ ** ARCHIVE SUCCEEDED **
⬆️ Check out the few lines of raw `xcodebuild` output above for potential hints on how to solve this error
📋 For the complete and more detailed error log, check the full log at:
📋 /Users/s/Library/Logs/gym/FastlaneTest-FastlaneTest.log
Looks like fastlane ran into a build/archive error with your project
It's hard to tell what's causing the error, so we wrote some guides on how
to troubleshoot build and signing issues: https://docs.fastlane.tools/codesigning/getting-started/
Before submitting an issue on GitHub, please follow the guide above and make
sure your project is set up correctly.
fastlane uses `xcodebuild` commands to generate your binary, you can see the
the full commands printed out in yellow in the above log.
Make sure to inspect the output above, as usually you'll find more error information there
Looks like no provisioning profile mapping was provided
Please check the complete output, in particular the very top
and see if you can find more information. You can also run fastlane
with the `--verbose` flag.
Alternatively you can provide the provisioning profile mapping manually
https://docs.fastlane.tools/codesigning/xcode-project/#xcode-9-and-up
+------------------------------+
| Lane Context |
+------------------+-----------+
| DEFAULT_PLATFORM | ios |
| PLATFORM_NAME | ios |
| LANE_NAME | ios tests |
+------------------+-----------+
Called from Fastfile at line 21
```
19: desc "test sample"
20: lane :tests do
=> 21: gym(
22: scheme: "FastlaneTest",
23: output_name: "MyApp.ipa",
```
Error packaging up the application
+---------------------------------------+
| fastlane summary |
+------+------------------+-------------+
| Step | Action | Time (in s) |
+------+------------------+-------------+
| 1 | default_platform | 0 |
| 💥 | gym | 21 |
+------+------------------+-------------+
fastlane finished with errors
[!] Error packaging up the application
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。