8

ユーザー名とパスワードをキーチェーンに保存するアプリケーションがあります。Xcode 3 で作業しているときはすべて正常に動作していましたが、最近 Xcode 4 に移行し、アプリケーションを実行すると次のプロンプトが表示されます。

Application wants to use your confidential information stored in keychain" in your keychain.

常に許可を押した後、アプリケーションがキーチェーン アイテムのアクセス コントロール リストに追加されていることがわかりますが、アプリを実行するたびに表示されます。

また、Always allow をもう一度押した後、アクセス制御に同じアプリの 2 つのインスタンスがあることがわかります。OS はこれを新しいアプリケーションだと考えているようです。

どんなアイデアでも大歓迎です。

4

1 に答える 1

4

問題は、署名の指定された要件により、それ自体が「同じアプリ」として受け入れられないことだと思います(キーチェーンの目的で)。

これの一般的な原因の 1 つ (それはあなたのものだと思います) は、指定された要件がなく、中間証明書がインストールされていない、開発者 ID アプリケーション証明書を使用していることです。

標準の開発者 ID 要件は次のようになります。

designated => anchor apple generic and 
identifier \"com.example.appName\" and 
((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or 
 (certificate 1[field.1.2.840.113635.100.6.2.6] exists and 
 certificate leaf[field.1.2.840.113635.100.6.1.13] exists  and 
 certificate leaf[subject.OU] = \"1AZBYCXDW9V\" ))

これを自分で作成する場合は、識別子をバンドル識別子に、subject.OU を証明書の値に置き換える必要があります。(キーチェーンアクセスでダブルクリックすると、組織単位としてリストされます。)次に、「その他のコード署名フラグ」に追加できます。

--requirements "=designated ..." (the whole mess from above)

ただし、これを行うには、Xcode 4.3.2 以降を使用する方がはるかに優れています。開発者 ID アプリケーション証明書を使用していることを認識し、キーチェーンで中間証明書を確認できる場合は、デフォルトでこれを生成します。

また、Xcode でアーカイブ オーガナイザーを使用して「開発者 ID で署名されたアプリケーションをエクスポート」する場合、ターゲット ディレクトリからのビルドを使用するだけでなく、アプリとその他の同封された署名可能ファイルに署名することを確認し、それをテストします。すべてが適切にセットアップされています。(たとえば、「署名する開発者 ID を選択してください」のステップには選択肢がなく、syslog に有用な情報がないメッセージが表示されるなど、かなり不可解です。しかし、少なくとも失敗または成功したという事実は絞り込みます。あなたの問題はどこですか。)

いずれにしても、開発者証明書ユーティリティサイトの「開発者 ID 中間証明書」リンクから、「開発者 ID 認証機関」と呼ばれる中間証明書を (ビルド マシンに) ダウンロードしてインストールする必要があります。

最後に 1 つ: これでビルド マシンでの実行に関する問題が解決されたとしても、サポートしている最も古い OS バージョンでテストする必要があります。たとえば、Lion のコードデザインによってコンパイルされた要件は、Leopard では解析できない場合があり、Snow Leopard でさえ解析できない場合があります。その場合は…ゲートキーパー vs. ヒョウ: 進行中の物語を参照してください。

于 2012-06-29T17:50:28.563 に答える