環境
- fastlane 1.17.1
- Xcode 8.2.1
- mac OS 10.12.3
- 組織の署名ID管理の仕方の都合で match は使っていない
前提
署名などは変更せず、Provisioning Profileのみ、新しいものを自動的に取得して使いたいものとします。
また、Provisioning Profile更新前はすでにビルドが通っているものとします。
問題
sigh を使ったりしているとカジュアルに Provisioning Profile が更新されたりします。
いちいちXcodeの設定画面を開いてダウンロードしなくても済むのは助かるのですが、
Provisioning Profileの名前にタイムスタンプが入ってしまうので、CIで sigh を使うと予期しないタイミングでProvisioning Profileの名前が変更されてビルドがコケてしまいます。
// こんな名前のPPができあがる
net.kikuchy.hogeapp AdHock 14578645
sighで取得したProvisioning Profileを使う
レーンは以下のように作ってあります。
lane :beta do
cert
sigh(force: false, adhoc: true)
gym(scheme: "HogeApp", export_method: "ad-hoc")
deploygate(user: "kikuchy")
end
sigh をfastlaneのActionとして実行すると、有効なProvisioning Profileをダウンロード & インストールしてくれます。
そして gym を使うといい感じにビルドをしてくれます。
が、sigh が取得してきたProvisioning Profileを使ってくれるわけではありません。
sigh実行後にcontextに残るもの
fastlaneのActionの中には、 lane_context
としていくつかの情報を以降のActionに渡してくれるものがあります。
sighもいくつかのcontextを残してくれるので、それを使うことにします。
今回使うのは以下の2つです。
変数名 | 内容 |
---|---|
SIGH_PROFILE_PATH |
sighがダウンロードしたProvisioning Profileのファイルパス |
SIGH_UUID , SIGH_UDID
|
sighがダウンロードしたProvisioning ProfileのUUID |
project.pbxの設定項目を引数から指定する
xcodebuild
の説明 によると、引数から設定項目の上書きができるようです。
xcodebuild ...(中略)... [buildsetting=value] ...
gym は xcargs
というオプションに xcodebuild
で使う追加の引数を渡せる ようなので、 sigh がcontextに残した情報を使って必要な引数を組み立てます。
上書きする必要がある項目は以下のとおりです。
設定項目 | 内容 |
---|---|
PROVISIONING_PROFILE |
使用したいProvisioning ProfileのUUID |
PROVISIONING_PROFILE_SPECIFIER |
使用したいProvisioning Profileの名前 |
引数を作る
lane_context
はFastfile内でも引ける ので早速使います。
またFastfile内では FastlaneCore も使用可能なので、 FastlaneCore::ProvisioningProfile
を使ってProvisioning Profileの名前を取り出せば良さそうです。
sigh(force: false, adhoc: true)
# 取得したProvisioningProfileを使用する
xcodebuild_args = {
PROVISIONING_PROFILE: lane_context[SharedValues::SIGH_UDID],
PROVISIONING_PROFILE_SPECIFIER: FastlaneCore::ProvisioningProfile.parse(lane_context[SharedValues::SIGH_PROFILE_PATH])["Name"],
}
xcodebuild_args = xcodebuild_args.map do |k,v|
"#{k.to_s.shellescape}=#{v.shellescape}"
end.join ' '
gym(scheme: "HogeApp", export_method: "ad-hoc", xcargs: xcodebuild_args)
無事に sigh がダウンロードしたProvisioning Profileを使ってビルドできるようになりました! \\ ٩( 'ω' )و //