#はじめに
Xcode6からビルドしてアーカイブをipaファイルに書き出すときに
provisioning Fileを固定されるようになり、イロイロ困っています。
To upload an app to iTunes Connectより
In the dialog that appears, choose a team from the pop-up menu and click Choose.
If necessary, Xcode creates a distribution certificate and distribution provisioning profile for you. The name of the distribution provisioning profile begins with the text XC:.
この部分です。
Appleの方針が反映されつづけるのか、開発者の使い勝手を考えて仕様を変更してくれるかはわからないですが、現行で出来る対処を備忘録的に書きます。
##追記
2014/12/18 Xcode6.1.1で個人用のAppleIDを設定している場合は
次のように、表示が変わっていました。
今度は同期機能は、個人では使えなくなっている?かを検証する必要がありそうです。
#検証環境
- iOSの開発者ライセンスStandard版(個人)
- Xcode6.1
- OS X Marvericks
#困る点
-
XC
とついたprovisioing FileがCertificates, Identifiers & Profiles
生成される -
XC
なprovisioning Fileが指定しているビルド証明書が異なる場合がある - デバイスを限定した、自分で作成したprovisioing Fileを使いたくても使えない
XC
とついたprovisioing File
Xcode6を使っている環境(Develoer、Agentの証明書など)は整っているのが前提とします。
対応するAppIDに対して、
Certificates, Identifiers & Profiles
で、登録されている全てのデバイスが追加されているprovisioing Fileがない
と表示されて、Certificates, Identifiers & Profiles
にprovisioning Fileが作成されます。
##自動生成されないために
メッセージに書かれている通りであれば、Provigioning Fileに全デバイス登録すれば良いんだ。。。
と解釈して作成したら、できました。
##ipa書き出し時に選択される証明書
provisioning Fileを何回か作成して、archiveから書き出す作業を繰り返して次のことが分かりました。
(1)全デバイス入り
かつ
(2)作成日付が最も最新なもの
が選択されます。
ない場合は、XC
なファイルが自動生成されます。
###プロビジョニングファイルの選択フロー
(1)アーカイブからipaのexportを選択する
(2)Certificates, Identifiers & Profiles
からデバイスの一覧を取得(しているみたい)
(3)ローカルにキャッシュされているprovisioning fileから選択される
Certificates, Identifiers & Profiles
から削除されたProvisioning Fileでも、ダウンロードしてXcode6に追加しておけば同期の影響を受けないようです。
###invalidなprovisioning File
Certificates, Identifiers & Profiles
では
Provisioning Fileが更新されずにDeviceの増減があった場合に
invalid
と表示されます。
ダウンロード出来ない状態になっています。
この場合、Xcode6で同期しても更新されず、削除もされないことを確認しています。
#登録デバイスの増減
##検証
Certificates, Identifiers & Profiles
と同期して全てのprovisioning Fileを取得している状態から
###デバイス減
(1)Certificates, Identifiers & Profiles
からデバイスを削除する(Xcode6と同期しない)
(3)Certificates, Identifiers & Profiles
では
削除されているデバイスが含まれているprovisioning File はinvalidになっています
削除されていないデバイスのみが含まれているprovisioning Fileはvalidになっています
invalidであるかどうかは関係ないようです。
(5)Xcode6とCertificates, Identifiers & Profiles
を同期します
Certificates, Identifiers & Profiles
でデバイスが存在する、最新のプロビジョニングファイルが選択されました。
###デバイス増
Accountsを同期をしたときに選択されたprovisioning Fileの中身です。
キャッシュされているXcode6の内容は下記の通り、Certificates, Identifiers & Profiles
で当該のprovisioning Fileを更新しなければ、Xcode6で同期しても変更がかかりませんでした。
<key>ProvisionedDevices</key>
<array>
<string>[削除していないデバイスのUUID]</string>
<string>[削除して今回追加したデバイスのUUID]</string>
<string>[削除したままのデバイスのUUID]</string>
</array>
キャッシュしているprovisioning Fileに現時点での全端末が入っていれば
問題なく使えるようです。
追加したデバイスがキャッシュしているprovisioning Fileにない場合は
XC
なprovisioning Fileが生成されました
#運用を考える
Xcode6を使う場合は、Certificates, Identifiers & Profiles
の登録している全デバイス追加が必須という前提です。
##自分で作成したProvisioing Fileを使う場合
新規デバイスの追加時は必ずprovisioning Fileに追加して更新
ipa書き出し時にXC
なProvisioning Fileが生成されるため
Provisioing Fileをダウンロードしておく
invalidになった場合にダウンロードが出来なくなるため
複数で一つの端末を使用する場合があれば同期を全くしない状況が想定できない。
##XCなProvisioing Fileを使う場合
自分が製作しているアプリに関係しないデバイスがライセンスに追加されるたびに、XC
なProvisioning Fileが作成されるならXC
なProvisioning Fileで運用を考える方が正解なのかもしれません。
証明書との紐付け
デフォルトは最新の証明書が紐づけられます。
誰かが勝手に証明書を作って、どこにも書き出してなかったら、共有していなかったら?
新規にAgentの証明書を作るまでXC
のプロビジョニングファイルは失敗し続けます。
証明書を複数個使用した運用を行っている場合は、XCode6の環境での証明書と
Certificates, Identifiers & Profiles
でのProvisioning Fileでの証明書を一致させて更新し、その後Xcode6で同期して、ローカルのprovisioning ファイルを更新します。
同じアプリ(Bundle Identifer)の開発では、同じ証明書を使うことにした方が運用上安全だと思います。
#参考URL
Uploading Your App Using Xcode
https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/SubmittingYourApp/SubmittingYourApp.html#//apple_ref/doc/uid/TP40012582-CH9-SW1
#さいごに
これはまだ検証中の内容から出た個人の見解でApple公式のものとは別、ということをご理解ください。
また追記します。