Xcode9にしたらProvisioningProfileが埋め込まれなくなって困った話

また挙動が変わった…

Xcodeがバージョンアップするたびに悩まされている気がするんですが、iPhone Xに対応するのにXcode 9に更新したところ、ローカルでビルドして転送する分には問題ないものの、AdHoc用にコードサインするとProvisioningProfileが埋め込まれなくなってしまい、ちょっと困りました。

正直、何か効いてうまく行くようになったのかよく分からないんですが、どういう引数でコマンドを呼んでいるのかを書いておきますので、同じ問題にぶち当たった方は比較して参考にしてくださいませ。

build.sh
xcodebuild -target Unity-iPhone -configuration Debug -scheme Unity-iPhone -archivePath HogeApp.xcarchive archive CODE_SIGNING_ALLOWED=NO ENABLE_BITCODE=NO
xcodebuild -exportArchive -archivePath HogeApp.xcarchive -exportPath . -exportOptionsPlist HogeApp_ExportOptions.plist
HogeApp_ExportOptions.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>ad-hoc</string>
    <key>teamID</key>
    <string>**********</string>
    <key>provisioningProfiles</key>
    <dict>
        <key>com.hoge.hogeapp</key>
        <string>HogeApp_Dev</string>
    </dict>
    <key>signingCertificate</key>
    <string>iPhone Distribution</string>
    <key>signingStyle</key>
    <string>manual</string>
</dict>
</plist>

考察

plistのprovisioningProfiles以下を指定していなかった(manualにしてなかった)のが原因だと思うんですが、Xcode8ではそもそも指定しなくても動いてたところが謎です。"Automatically manage signing"はXcode8から導入されたはずなんですが、Xcode9からさらに挙動が変わったりしたんですかね?

で、provisioningProfilesのkeyはBundleIdでいいとして、stringがよく分からない。実は自分は取引先からmobileprovisionファイルを受け取って埋め込んでいるだけなので、Develperサイトで証明書の詳細を調べることもできず、ここが最下層プログラマの辛いところであります…。ただ、ProvisionQLで上部に表示される名前がどうもそれっぽいので採用(当たり)。

あと、CODE_SIGNING_ALLOWED=NO と ENABLE_BITCODE=NO はいらないような気もするのだけど、暇なときに要調査。

最後に

追求しきれてないのに記事にするのも申し訳ないのですが、問題解決のヒントになりましたらということで…。

ご参考

ProvisionQL
https://github.com/ealeksandrov/ProvisionQL

mobileprovisionの中身を表示するQuickLookプラグイン。デバイス数がアイコンとして表示されたりもするので便利。ipaファイルに埋め込まれているmobileprovisionも表示できて、mobileprovisionが入り乱れる環境には超おすすめです。