1

iOSアプリケーションが開発用証明書または配布証明書で署名されているかどうかを知ることができるかどうかを知りたい。iOSアプリが開発証明書または配布証明書で署名されているかどうかを調べるにはどうすればいいですか?

iOSアプリは、バンドルの情報辞書にアクセスすることで、自分自身に関するメタ情報を取得できます。たとえば、辞書からCFBundleVersionキーを読み取ってバージョンを取得できます。証明書情報に署名するのに似たものがありますか?

私が尋ねる理由は、APNSのためです。私のアプリケーションがAPNSデバイストークンをクラウドサーバーに登録するとき、クラウドサーバーは、そのトークンのプッシュメッセージを作成する必要があるかどうかを、AppleのプロダクションAPNSサーバー(「api.push.apple.com」)または開発APNSサーバー"api.development.push.apple.com"

+0

APNSの設定は、署名証明書ではなく、エンタイトルメントに格納されます。あなたは 'codesign'ツールのソースを見たことがありますか? – Mats

+0

私はcodesignツールのソースを見ていませんでした。エンタイトルメントについてのあなたの発言は面白いです。私のプロジェクトには拡張子 ".entitlements"のファイルが含まれていることがわかります。このファイルは、キー "APS Environment"の値が "development"であることを指定します。したがって、アプリケーションからその情報にアクセスすることは、私の問題の解決にもなります。私はスウィフトコードからその情報をプログラムで取得する方法はまだ分かっていませんが、このヒントをお寄せいただきありがとうございます。 –

+0

値は、コード署名ビルドフェーズ中に 'development'または' production'のいずれかに設定されます。これはコード署名証明書とプロビジョニングプロファイルによって異なります。 – Mats

答えて

0

APNSサーバーに関する情報は、バイナリのコード署名セクションのエンタイトルメントにあります。基本的な手順は次のとおりです。

  1. dladdrからバイナリの読み込みアドレスを取得します。
  2. のすべてのMach-Oロードコマンドをループするcodesignツールと同じ方法でコードシグネチャコマンドを解析します。 opensource.apple.comで公開されています。
  3. 資格plist-dataを解析します。
  4. aps-environmentの値を抽出します。

これは基本的に、バイナリでコマンドcodesign -d --entitlements :-を実行しているのと同じです。

関連する問題