#はじめに
書いている時点でいろいろまだ手強そうなところを感じています。
作るアプリによって、作業するMacの環境によって、開発者プログラムによって
使わない方が良いと個人的に判断している確認ポイントを書きます。
Auto Signingに向かない場合
- Developer証明書を自動でつくられると困る
- おなじTeamで複数のAppleIDを登録している
- AppIDのPrefixを決めている(keychainに情報を保持するようなアプリ)
Developer証明書を自動でつくられると困る
新規でプロジェクトファイルを作成してアラートが表示、OKをおしたらDeveloper証明書が作成される場合がありました
おなじTeamで複数のAppleIDを登録している
同一のiOS開発者プログラムに入っている複数のAppleIDが同じMacのXcode8に登録されている場合、Developer証明書を自分で選ぶことができない。
AppIDのPrefixを決めている(keychainに情報を保持するようなアプリなど)
後述します。
アーカイブからの書き出し時の確認
アーカイブファイルから書き出すときに選ばれるプロビジョニングファイルは
ダウンロードしているプロビジョニングファイルから選ばれます。
Provisiong File
Certificates, Identifiers & Profiles
でつくったプロビジョニングファイルは
Xcodeにダウンロードしているプロビジョニングファイルをもとに署名がされます。
ダウンロードされていない場合は
- Xcode経由で作成後にダウンロード
- ダウンロード済みのものから選ばれる
Accounts経由での取得
Certificates, Identifiers & Profiles
でつくったプロビジョニングファイルが
Accountsで表示されない場合は
Provisioning FilesのSelect All
にチェックがはいっているかを確認します。
目的のプロビジョニングファイルを作成後、デバイスが追加でされるなどがあると、Select Allのチェックが外れた状態で表示されます。チェックが外れた状態であれば、XcodeのAccountsでは目的のプロビジョニングが表示されなかったり、更新されなかったりといったことが起こります。
Certificates, Identifiers & Profiles
からダウンロード
適用したいプロビジョイングファイルをダウンロードするとXcodeのAccountsへも反映されます。
Select All
をチェックしていない、デバイスを限定した状態のプロビジョニングファイルでも問題なく選択されます。
これが、一番確実だと思っています。
以前の投稿にも書いたことが、あるのですが、隠れたお作法があり
http://qiita.com/nofrmm/items/2bc60313aa961baf501f
Push通知付きのアプリを間違ってtokenを渡さないように
*
ワイルドなAppIDを指定したプロビジョニングファイルを指定したいのに
どうしても新しいプロビジョニングファイルを作ろうとしたり(member権限だと権限がたりない
など表示され、admin以上だとプロビジョニングファイルXC adhoc
などが更新されたり)、と気持ちが通じない動作がいまだ見られます。
使用するProvisioing Fileをどうしても指定したい場合には最終的にterminalからの書き出し
に頼ることも検討する必要があるように思えます。
書き出したipaにProvisioning Fileが設定されない
書き出す前に
Certificates, Identifiers & Profiles
からAPP IDsの書き出し対象を確認します。
AppIDを追加時、デフォルトのTeamIDを選んでプロビジョニングを作ることがほとんどですが、複数のAppIDのprefixがある場合は問題が起こりがちです。
AppIDのprefixを複数もつiOS開発者プログラム
私の場合はTeamIDとなるPrefix以外に上記のAppID Prefixを一つ別に作成しています。
これが、プロジェクトファイルを新規で作ったとしても選ばれてしまうので
Auto Signing は確実にプロビジョニングファイルを指定したい場合には使えない、と思っています。
この場合のAuto Signingを有効にした状態での対処があるのでしょうか。
残念ながら、こういった場合はAuto Signingを外す選択で回避しています。
ビルド時のprefixの確認
Terminalを開き、codesignコマンドでprefixを確認できます。
次のように入力した状態でDrag&Dropでファイルのパスを取るのが一番簡単かと思います。
$ codesign -d --entitlements - [appファイルの置き場所]
入力例
$ codesign -d --entitlements - /Users/[ユーザ名]/Library/Developer/Xcode/DerivedData/ProvTest-hogehoge/Build/Products/Debug-iphoneos/ProvTest.app
<?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>application-identifier</key>
<string>[AppIDのPrefix].jp.hoge.releaseTest</string>
<key>com.apple.developer.team-identifier</key>
<string>[TeamID]</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>[AppIDのPrefix].jp.hoge.releaseTest</string>
</array>
</dict>
</plist>
他に
swiftでよくあることから
BundleIdentifierを変更してもアーカイブしたら前のBundleIdentifierのままだった
みたいなことがあります。
その場合は
Productを選んだ状態でoption
キーを押すと表示される
Product > Clean Build Folder...
を押すとバイナリから生成し直すことができます。
optionをおしながらキャプチャが取れなかったため、上記の写真はoptionを押す前の表示です。
参考
Technical Note TN2311
Managing Multiple App ID Prefixes
https://developer.apple.com/library/content/technotes/tn2311/_index.html
Verifying the App Binary Entitlements
https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingProfiles/MaintainingProfiles.html#//apple_ref/doc/uid/TP40012582-CH30-SW26
#さいごに
Developer証明書を自動で作られたところもそうですが、ハマリどころは も知っているから対処をAlertに差し込んでいるのです。
AppIDを全削除する前に、AutoSigningを外す選択肢もありますよっと。