2012-06-27 14 views
6

私はキーチェーンにユーザー名とパスワードを格納するアプリケーションを持っています。すべてはXcodeの3で作業するとき、私は最近、Xcodeの4に移動し、私はアプリケーションを実行すると、今、私はプロンプトを取得罰金働いていた:アプリケーションは常にキーチェーンにアクセスする許可を要求します

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

打った後、いつも私は、アプリケーションがアクセス制御に追加見ることができキーチェーンアイテムのリストですが、アプリを実行するたびに取得します。

また、常に再度許可すると、アクセスコントロールに同じアプリのインスタンスが2つあることがわかります。 OSのように、これは新しいアプリケーションだと思います。

感謝しています。

+0

どのようにコード署名していますか? (これは、この問題の最も一般的な理由の1つです) – abarnert

+0

Xcodeのビルド設定でコードサインを設定する必要があります。コード記号の下に自分の開発者IDにコード署名アイデンティティを選択しました。 –

+0

同じマシン?指定された要件(使用しているXcode 4のバージョンによって異なります)を使用している場合、Keychainは古いビルドと新しいビルドを異なるアプリケーションとして扱うことがあります。つまり、新しいビルドがポップアップします古いビルドがキーチェーンに何かを保存していた場合の警告。 – abarnert

答えて

3

私は、あなたの署名の指定された要件が、それ自体(「キーチェーン」目的のために)「同じアプリ」として受け入れられないという問題があると信じています。

これは一般的な原因の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に入れて選択するしかないかもしれないが、少なくとも失敗したり成功したという事実は狭められる

Developer Certificate Utilityサイトの「Developer ID Intermediate Certificate」リンクから、「Developer ID Certification Authority」という中間証明書をダウンロードして(ビルドマシンに)インストールする必要があります。 。

最後のこと:ビルドマシンで実行している問題を解決しても、サポートしている最も古いOSバージョンで実際にテストしたいと思っています。たとえば、Lionのcodesignによってコンパイルされた要件は、LeopardやSnow Leopardで解析されないことがあります。その場合は... Gatekeeper vs. Leopard: an ongoing taleを参照してください。

+0

abarnertに感謝します。素晴らしい情報でした。しかし、私はこの問題の解決策を見つけたようです。 XcodeのUIからコード署名を削除し、ビルドスクリプトの最後にこれをコマンドラインステップとして追加しました。これは今はうまくいっているようですが、本当にありがとうございました。 –

+1

Nitin、解像度を共有できますか?Xcode 6で同じ問題が発生しています –

関連する問題