Posted at

sighで取得したProvisioning Profileをgymで使う

More than 1 year has passed since last update.


環境


  • 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を使ってビルドできるようになりました! \\ ٩( 'ω' )و //


参考