【Xcode/Fastlane】自動ビルドしてipaファイルを生成/アーカイブする方法!build_app

【Xcode/Fastlane】自動ビルドしてipaファイルを生成/アーカイブする方法!build_app

この記事からわかること

  • iOS/Xcode自動化ツールFastlane使い方
  • 自動ビルドしてipaファイルを生成する方法
  • build_appアクションgym違い

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

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#parameters

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アクションとの違い

公式リファレンス:gym

Fastlaneには同じような挙動をするgymアクションがあります。調べてみるとbuild_appgymをラップして使いやすいようにしているものらしいので引数などもほぼ同じような感じで使用することができます。そのため先ほどのレーン処理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でパラメータを使い回しできる

公式リファレンス: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

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index