LoginSignup
70
51

More than 5 years have passed since last update.

Xcode8 - Automatic Signingで疲弊しないために

Last updated at Posted at 2016-10-02

はじめに

書いている時点でいろいろまだ手強そうなところを感じています。

これ

スクリーンショット 2016-10-01 2.00.04.png

作るアプリによって、作業するMacの環境によって、開発者プログラムによって
使わない方が良いと個人的に判断している確認ポイントを書きます。

Auto Signingに向かない場合

  • Developer証明書を自動でつくられると困る
  • おなじTeamで複数のAppleIDを登録している
  • AppIDのPrefixを決めている(keychainに情報を保持するようなアプリ)

Developer証明書を自動でつくられると困る

新規でプロジェクトファイルを作成してアラートが表示、OKをおしたらDeveloper証明書が作成される場合がありました

おなじTeamで複数のAppleIDを登録している

同一のiOS開発者プログラムに入っている複数のAppleIDが同じMacのXcode8に登録されている場合、Developer証明書を自分で選ぶことができない。

AppIDのPrefixを決めている(keychainに情報を保持するようなアプリなど)

後述します。

アーカイブからの書き出し時の確認

スクリーンショット 2016-09-30 23.33.07.png

アーカイブファイルから書き出すときに選ばれるプロビジョニングファイルは

スクリーンショット 2016-09-30 23.32.42.png

ダウンロードしているプロビジョニングファイルから選ばれます。
スクリーンショット 2016-10-01 8.51.23.png

Provisiong File

Certificates, Identifiers & Profiles でつくったプロビジョニングファイルは
Xcodeにダウンロードしているプロビジョニングファイルをもとに署名がされます。

ダウンロードされていない場合は

  1. Xcode経由で作成後にダウンロード
  2. ダウンロード済みのものから選ばれる

Accounts経由での取得

Certificates, Identifiers & Profiles でつくったプロビジョニングファイルが
Accountsで表示されない場合は
スクリーンショット 2016-10-01 2.13.11.png

Provisioning FilesのSelect Allにチェックがはいっているかを確認します。
スクリーンショット 2016-10-01 2.32.28.png

目的のプロビジョニングファイルを作成後、デバイスが追加でされるなどがあると、Select Allのチェックが外れた状態で表示されます。チェックが外れた状態であれば、XcodeのAccountsでは目的のプロビジョニングが表示されなかったり、更新されなかったりといったことが起こります。

Certificates, Identifiers & Profilesからダウンロード

スクリーンショット 2016-10-01 2.38.47.png

適用したいプロビジョイングファイルをダウンロードするとXcodeのAccountsへも反映されます。
Select Allをチェックしていない、デバイスを限定した状態のプロビジョニングファイルでも問題なく選択されます。

これが、一番確実だと思っています。

以前の投稿にも書いたことが、あるのですが、隠れたお作法があり
http://qiita.com/nofrmm/items/2bc60313aa961baf501f

Push通知付きのアプリを間違ってtokenを渡さないように
*ワイルドなAppIDを指定したプロビジョニングファイルを指定したいのに
どうしても新しいプロビジョニングファイルを作ろうとしたり(member権限だと権限がたりないなど表示され、admin以上だとプロビジョニングファイルXC adhocなどが更新されたり)、:apple:と気持ちが通じない動作がいまだ見られます。

使用するProvisioing Fileをどうしても指定したい場合には最終的にterminalからの書き出しに頼ることも検討する必要があるように思えます。

書き出したipaにProvisioning Fileが設定されない

書き出す前に

application-identifierを確認します。
スクリーンショット 2016-10-01 10.30.53.png

Certificates, Identifiers & ProfilesからAPP IDsの書き出し対象を確認します。

スクリーンショット 2016-10-01 10.41.18.png

AppIDを追加時、デフォルトのTeamIDを選んでプロビジョニングを作ることがほとんどですが、複数のAppIDのprefixがある場合は問題が起こりがちです。

スクリーンショット 2016-10-01 10.53.00.png

AppIDのprefixを複数もつiOS開発者プログラム

私の場合はTeamIDとなるPrefix以外に上記のAppID Prefixを一つ別に作成しています。

これが、プロジェクトファイルを新規で作ったとしても選ばれてしまうので
Auto Signing は確実にプロビジョニングファイルを指定したい場合には使えない、と思っています。
この場合のAuto Signingを有効にした状態での対処があるのでしょうか。

アラートで表示されるとおりに
スクリーンショット 2016-10-02 8.06.30.png

残念ながら、こういった場合はAuto Signingを外す選択で回避しています。

スクリーンショット 2016-10-02 7.58.19.png

ビルド時のprefixの確認

ビルドして
スクリーンショット 2016-10-02 8.22.48.png

作成されたappファイルの置き場所を開きます
スクリーンショット 2016-10-02 8.24.47.png

スクリーンショット 2016-10-02 8.29.15.png

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...を押すとバイナリから生成し直すことができます。
スクリーンショット 2016-10-02 8.58.01.png
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証明書を自動で作られたところもそうですが、ハマリどころは :apple: も知っているから対処をAlertに差し込んでいるのです。
AppIDを全削除する前に、AutoSigningを外す選択肢もありますよっと。

70
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
51