はじめに
ユーザがProvisioningFileを意識しなくても済むように・・・ってアプリ設計をのポリシーを感じるXcode8.3
Accountsからは
- ダウンロードは全部まとめてのみ:
Download All Profiles
- どのプロビジョニングファイルがあるかわからない
というようになりました。
ダウンロードしたProvisioning File
ダウンロードしたプロビジョニングファイルの置き場所をみるには
アプリをアーカイブして、書き出し時に表示されるリンクから辿れます
隠しリンクのように。
ユーザのホーム配下ライブラリ以下にあります。前のバージョンからパスは変わってませんが、知ってないとわからないです。
~/Library/MobileDevice/Provisioning\ Profiles
Provisioning FileのUUID

autosigning がついている場合も
Build Settings > Provisioning File(Deplicated)
で Other...
を選択した場合に表示されます。
確認後は元の設定にもどせば問題ありませんでした。
特定のプロビジョニングファイルを消す
Xcode経由で削除
アーカイブ後に表示されるリンクか、FinderなどからUUIDを確認しながら消す方法が取れます。
Terminal経由で削除
CIなどでプロビジョニングファイルを消す場合にTerminal経由で消したい場合に
実行する前に下記前提が満たされているか動作を確認してから実行します。
- 削除対象のプロビジョニングファイルのUUIDを取得
-
>~/Library/MobileDevice/Provisioning\ Profiles
から削除する
OSXがSierraになってからsecurityコマンドでstderrorが出力
security cms -D -i
hogehoge.mobileprovision
2> /dev/null
OSXがSierraになってからsecurityコマンドでstderrorが出力されるようになっており
fastlaneでもissueになっていました。Sierraの場合はstderrorは捨てるようにしました。
https://github.com/fastlane/fastlane/issues/6387
Sierra以降はこの書き方だとstderrorが出力され
思ったような結果になりませんでした。
security cms -D -i
hogehoge.mobileprovision
結果次のコマンドでプロビジョニングファイルを削除しています。
$ xmllint <(security cms -D -i `hogehoge.mobileprovision` 2> /dev/null) --xpath '/plist/dict/key[text()="UUID"]/following-sibling::string[position()=1]/text()' | xargs -I{} rm ~/Library/MobileDevice/Provisioning\ Profiles/{}.movileprovisioin
参考
http://qiita.com/mattak/items/dcb25ad7e12501d1525d
http://itpro.nikkeibp.co.jp/article/COLUMN/20140331/547143/
さいごに
XcodeではプロビジョニングファイルをUUIDで管理することからは遠ざける改修がされていますのでCIで使うには
fastlaneを使う方が楽、という結論に行きがちなのですが、fastlaneの対応を待てない場合の対処としては押さえておいた方がよいかとおもいます。
はautosigningで技術者の難易度をさげた改修をしているようで、解決要素がみえにくい状況になっているに気づいているのかなと。CIにはまったく使いにくい改修なので、別ラインでCI対応も考えて欲しいと思っています。