多数の.ipaファイルがあり、スクリプトを使用してそれらを再署名しました。
では、プロビジョニングプロファイル/署名証明書をチェックして、正しい情報を使用していることを確認するにはどうすればよいでしょうか?
理想的には、任意の.ipaファイルを取得し、どのプロビジョニングプロファイル/署名証明書がその署名に使用されたかを確認できるようにします。
Backstory:エンタープライズ配布証明書の有効期限が切れているので、自分のものに再署名したい。これは、Xcodeで作成およびアーカイブしたすべてのものの単純な例ですが、サードパーティベンダーが配布物を作成した場合、それはできません。新しい.ipamightには未知の変更が含まれており、問題が発生するため、再署名された.ipaファイルの要求を避けたいと思うでしょう。あまりにも...しかし、私は最初の問題についてもっと心配しています。
古い配布証明書と新しい配布証明書の両方がまだ有効であるため(6か月の重複が発生します)、新しい配布証明書が使用されていることを確認する必要があります。 tは実際に仕事をします。
プロビジョニングプロファイルには、ターミナルコマンドを使用して表示できるUUIDがあります。
セキュリティcms -D -i(path_to_your_provisioning_profile)
次のようなコマンド出力のUUIDセクションを参照してください。
<key>UUID</key> <string>A008C022-7B82-4E40-8B37-172763E1E3CC</string>
Xcodeは、.appバンドル内のアプリケーションの署名に使用されるプロビジョニングプロファイルを挿入します。それを見つけるには、.ipaの名前を.Zipに変更し、Finderで解凍し、/ Payloadで.appファイルを見つけます。 .appファイルで「パッケージの内容を表示」し、embedded.mobileprovision
という名前のプロビジョニングプロファイルを見つけます。
上記のコマンドを使用して資格をダンプし、Xcode Organizer>デバイスタブ>「ライブラリ」の下のプロビジョニングプロファイルセクションのプロファイル内にあるUUIDと比較します。それらの「Finderで表示」を使用して、ディスク上の位置を表示できます。
パーティーに遅れて....
しかし、このツールは時間を節約します。 nomad/shenzhen
$ ipa info /path/to/app.ipa
+-----------------------------+----------------------------------------------------------+
| ApplicationIdentifierPrefix | DJ73OPSO53 |
| CreationDate | 2014-03-26T02:53:00+00:00 |
| Entitlements | application-identifier: DJ73OPSO53.com.nomad.shenzhen |
| | aps-environment: production |
| | get-task-allow: false |
| | keychain-access-groups: ["DJ73OPSO53.*"] |
| CreationDate | 2017-03-26T02:53:00+00:00 |
| Name | Shenzhen |
| TeamIdentifier | S6ZYP4L6TY |
| TimeToLive | 172 |
| UUID | P7602NR3-4D34-441N-B6C9-R79395PN1OO3 |
| Version | 1 |
+-----------------------------+----------------------------------------------------------+
Bobjtの答えに基づいて、IPCUを使用してプロファイルの詳細を取得しました。
.appファイルで「パッケージの内容を表示」し、embedded.mobileprovisionという名前のプロビジョニングプロファイルを見つけます。
MobileprovisioningファイルをiPhone構成ユーティリティにドラッグします
IPCUは、プロファイルの名前/有効期限などを示します。
次のプロセスを使用して、正常にテストできました。
これは、プロビジョニングプロファイルが更新されたことを確認する防弾の方法と思われます。プロファイルには1つの署名証明書しか含まれていないため、新しい証明書で署名する必要があります。
(しかし、私はまだより良い方法を見つけたいです)
最終的には、BobjtとHaemEternalのソリューション提案を組み合わせて使用しました。
特定の証明書が.ipaの署名に使用されたかどうかを判断しようとしている場合、次のことができます。
Pythonに慣れている場合は、作成したこのスクリプトを使用して、.ipaに埋め込まれている証明書を所有している証明書と比較できます。
https://Gist.github.com/ronsims2/1b7a8b9e15898f9406788988106b2f78
python ipa_cert_checker.py /Users/janedoe/Dcouments/Foobar.ipa /Users/janedoe/Dcouments/barfoo.cer
または、Macのコマンドラインからスクリプトが行うことを手動で行うこともできます。
IPAアーカイブを解凍します。 「Payload」というフォルダが作成されます。
unzip Foobar.ipa
埋め込まれたプロビジョニング情報を読みます。ペイロードディレクトリ内のパッケージ/フォルダは、.app拡張子を除いて.ipaと同じ名前が付けられていることに注意してください。
security cms -Di Payload/Foobar.app/embedded.mobileprovision
上記のコマンドの出力では、証明書がbase64文字列としてキー「DeveloperCertificates」に関連付けられた配列データ要素に埋め込まれています。 3.証明書をコピーし(xmlタグを含めず、余分な空白がないことを確認します)、テキストとして便利な場所に保存します。この例では、「cert_from_foobar.txt」と呼びます
Base64は既知の証明書をエンコードし、出力をファイルに保存します。
base64 barfoo.cer > barfoo.txt
既知の証明書を、保存した埋め込み証明書と比較します。 cmp cert_from_foobar.txt barfoo.txt || echo 'These files are NOT the same.'
それらが同じ場合、メッセージは表示されません。