59

iPhone アプリケーション用の自動ビルド サーバーをセットアップしようとしています。テスターが開発をフォローできるように、毎晩アドホック ベータ ビルドを実行できるようにしたいと考えています。

アドホック ビルドを実行するように xcode を正常にセットアップしました。また、コマンド ラインからビルドを起動することもできます。

xcodebuild -configuration AdHoc -sdk iphoneos2.2 クリーン ビルド

私が抱えている問題は、次の行がフォークされた端末 (nohup または screen を使用) から機能せず、次のエラーで失敗したことです。

CodeSign エラー: コード署名 ID 'iPhone ディストリビューション: XXXXX' がキーチェーン内のどのコード署名証明書とも一致しません。キーチェーンに追加したら、ファイルをタッチするか、プロジェクトを消去して続行します。

シェルと nohup または screen で環境変数を確認しましたが、手がかりが見つかりませんでした。私の問題は、フォークされた端末がキーチェーンにアクセスできないことだと思いますが、それを許可する方法がわかりません。

ご協力いただきありがとうございます

4

13 に答える 13

91

ユーザーの操作は許可されていませんというエラーが発生し、最初にキーチェーンのロックを解除することで解決しました

security unlock-keychain /Users/yannooo/Library/Keychains/login.keychain

また、証明書をシステムのキーチェーンに入れようとしましたが、機能していました。私の最終的な解決策は、 Keychain Accessアプリケーションを使用して、すべての iPhone 関連の証明書を iPhone.keychain という名前の専用キーチェーンに入れることでした。

security list-keychains -s /Users/yannooo/Library/Keychains/iPhone.keychain 
security unlock-keychain -p keychainpassword /Users/yannooo/Library/Keychains/iPhone.keychain 
于 2009-02-24T08:59:49.430 に答える
30

これには 2 つ (場合によっては 3 つ!) のコンポーネントがあります。1 つは、キーチェーンのロックを解除する必要があることです。2 つ目は、キーチェーン内にアクセス制御リストがあり、ロック解除状態のアプリケーションにどのアクセス許可が与えられるかを示します。したがって、キーチェーンのロックが正常に解除されたとしても、秘密鍵にアクセスして署名する機能が与えられていない/usr/bin/codesign場合でも、このメッセージが表示されます。codesign最後に、Mac OS Sierra を使用している場合、バイナリ との互換性を保つために、キーに割り当てられたデフォルトのパーティション ID が正しくありません。

解決策は次のとおりです。

1) キーチェーン アクセス GUI にアクセスできる場合は、秘密鍵を右クリックして [アクセス制御] タブを選択し、[すべてのアプリケーションを許可] を選択して、すべてのプログラムまたは /usr/bin/codesign アクセスを手動で許可できます。このアイテムにアクセスするには」ラジオまたは「これらのアプリケーションによるアクセスを常に許可する」リストのリスト。

2) このエラーが発生した場合は、codesignログインしていないユーザーに対して実行しようとしている可能性があります。この場合、明らかに「キーチェーン アクセス」GUI にアクセスできません。これらのケースでは、すべてのアプリケーションを意味するように見えるsignapplication の認証が欠落していることを確認します。具体的には、次を使用して確認します。<null>/usr/bin/codesign

security dump-keychain -i login.keychain

ただし、何らかの理由で対話モードでアクセス制御属性を追加または変更することはできません -- 削除のみ! -T実際には、キーを手動で削除し、フラグ を指定してキーチェーンに再度追加する必要があります。

security import login.keychain -P "<password>" -T /usr/bin/codesign

-T指定する場所

-T  Specify an application which may access the imported key (multiple -T options are allowed)

3) Mac OS Sierra を使用している場合は、パーティション ID を変更してパーティションを含めますapple。おそらく、これはcodesignApple によって配布されたために割り当てられた名前空間です。

security set-key-partition-list -S apple-tool:,apple: -k "<password>" login.keychain

:apple-toolパーティションはsecurityツールによって挿入されるため、上記のコマンドはそのパーティションを保持します。この側面の詳細については、http ://www.openradar.me/28524119 を参照してください。

于 2013-02-07T21:11:33.370 に答える
12

Another solution :

  • Open the Keychain Access
  • Right click on the private key
  • Select "Get Info"
  • Select "Access Control" tab
  • Click "Allow all applications to access this item"
  • Click "Save Changes"
  • Enter your password
  • Enjoy
于 2012-09-02T11:08:22.507 に答える
9

ビルド プロセス内で使用security list-keychains -s ${HOME}/Library/Keychains/login.keychainして、ログイン キーチェーンを検索リストに明示的に追加できますか? 分岐したターミナルから、ビルド プロセスでユーザー キーチェーンが認識されないようです。キーチェーン検索リストが現在のセキュリティ セッションに基づいている場合、これは理にかなっています。フォークされたターミナル セッションはssh、ループバック接続を介しているかのように、ログイン セッションを離れます。

于 2009-02-23T22:28:47.153 に答える
7

Jenkinsで同様の問題が発生した場合の更新:

LaunchDaemonsを介してjenkinsを起動するようにMacを設定する場合は、必ず追加する必要があります

<key>SessionCreate</key>
<true />

したがって、ci.plist全体は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
 <key>Label</key>
 <string>Jenkins</string>
 <key>UserName</key>
 <string>user</string>
 <key>GroupName</key>
 <string>staff</string>
 <key>ProgramArguments</key>
 <array>
 <string>/usr/bin/java</string>
 <string>-Xmx512m</string>
 <string>-jar</string>
 <string>/path/to/jenkins/jenkins.war</string>
 </array>
 <key>RunAtLoad</key>
 <true/>
 <key>KeepAlive</key>
 <true/>
 <key>EnvironmentVariables</key>
   <dict>
     <key>JENKINS_HOME</key>
     <string>/path/to/jenkins/home</string>
   </dict>
 <key>SessionCreate</key>
 <true />
</dict>
</plist>

私は上記の多くの人々が抱えているのと同じ問題で立ち往生しています。具体的には、Jenkinsシェルスクリプトから実行したときに同じ問題が発生しました。**ユーザー操作は許可されていません**エラーが発生しました。sshシェルから実行すると、スクリプトは正常に機能しました。

ほとんどの人が見ている違いは、 セキュリティリストキーチェーンを実行すると次のようになることです。

$ security list-keychain
  "/Library/Keychains/System.keychain"
  "/Library/Keychains/System.keychain"

しかし、sshシェルで実行すると、次のようになります。

$ security list-keychain
    "/Users/<i>user_account_name</i>/Library/Keychains/login.keychain"
    "/Library/Keychains/System.keychain"

そして、ほとんどの人は、ユーザーアカウントのキーチェーンにすべてのキー/証明書などを持っています。一部の人々が示唆したように、ユーザーキーチェーンとは異なる新しいキーチェーンを作成し、XCode署名用に再予約するのは簡単です。私はここに私のものを置くことになりました:/Library/Keychains/sysiphone.keychain

問題は、私のセットアップ(そしておそらくあなたのセットアップも)では、異なるセキュリティ設定ドメイン(システムとユーザー)で実行していることだと思います。最後に、sysiphone.keychainを表示する方法は次のとおりです。

$ sudo security list-keychains -d system -s "/Library/Keychains/sysiphone.keychain"
Password: *****
$ security list-keychains -d system
    "/Library/Keychains/sysiphone.keychain"

...そして魔法のようにJenkinsで物事が構築され始めました。うわー...それは私にとっては約4時間でした。はぁ。

于 2012-04-06T07:46:14.987 に答える
6

わかりました、問題は私にとって2つのことでした。1つ目はキーチェーンのロックを解除することでした。

security unlock-keychain login.keychain

2 番目は (空の) パスフレーズで、

security import blahblahbackup.p12 -k login.keychain -T /usr/bin/codesign -P ""

更新: スクリプトが Web スクリプトまたは sth からトリガーされたときに、後で少し問題が発生しました。そのように。/Library/Keychains/System.chain が表示されるだけです。だから私は汚い回避策を見つけました(セキュリティの問題につながる可能性がありますが、私にとっては問題ありません)。

  • 私の場合、pubkey sshログインをセットアップします(ビルドスクリプトを呼び出したいユーザーから、証明書を持ちxcodebuildを実行する実際のユーザーへ)、それは同じユーザーです。Apache は として機能してsomeuserおり、ビルドのすべてが でセットアップされていsomeuserます。
  • 私のphpスクリプト(ビルドをトリガーするため)は〜/ build-scriptを呼び出していました。私はそれを次のように変更しました:

    ssh someuser@localhost ~/build-script

したがって、実際の tty で動作し、すべてのキーチェーンにアクセスでき、すべて正常に動作します。

于 2011-10-27T13:25:04.103 に答える
4

別のポスターが言うように、

security list-keychains -s  "~/Library/Keychains/login.keychain"

ただし、GUIコンテキストでログインしている場合にのみlogin.keychainにアクセスできると思います(SSHと画面を介してシステムでテストしたばかりですが、VNCを介してログインしていることもあります)。

launchctlを使用してGUIコンテキストを選択し、プログラムを実行することは明らかに可能ですが、「ログインしたユーザー」に対してのみ機能するのではないかと思います。

' security show-keychain-info keychain-file'を実行しようとすると、次のエラーが発生します。

ユーザーの操作は許可されていません

そして、それはいくつかのより多くの情報を検索するためのフレーズです。もう1つの解決策は、証明書をシステムキーチェーンに入れることです。

于 2009-02-23T23:35:23.780 に答える
2

セキュリティ コマンドを調べたところ、端末に割り当てられたキーチェーンがフォークされたときに同じではないようです。ターミナルでセキュリティ コマンドを起動すると、次のようになります。

$ security list-keychains
  "/Users/yannooo/Library/Keychains/login.keychain"
  "/Library/Keychains/System.keychain"

一方、画面を使用すると、次の出力が得られます。

$ security list-keychains
    "/Library/Keychains/System.keychain"
    "/Library/Keychains/System.keychain"

私のビルド証明書はログイン キーチェーンに保存されているため、コード署名エラーは正常に見えます。

キーチェーンを端末に割り当てる方法を知っている人はいますか? 私は成功せずにこれを試しました

security login-keychain -s /Users/yannooo/Library/Keychains/login.keychain

何か案は?

于 2009-02-23T20:18:44.983 に答える
2

ログイン キーチェーンのロックを解除してもうまくいきませんでした。Keychain Access (iOS と呼ばれる) を使用して別のキーチェーンを作成し、これらのコマンドをビルドに追加すると、うまくいきました (自分のユーザーとして Jenkins を実行している場合)。

security -v list-keychains -d system -s ~/Library/Keychains/iOS.keychain; security -v unlock-keychain -p password ~/Library/Keychains/iOS.keychain;

ただし、これはより有望に見えます: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin#XcodePlugin-Userinteractionisnotallowed

于 2013-05-30T22:36:21.683 に答える
2

Atlassian Bamboo 2.7 と OS X 10.7.3 Lion を使用しており、スレッドで見つかったすべてのアプローチを試しましたが、「ユーザーの操作は許可されていません」というエラーが引き続き表示されます。

問題は、リモート ターミナル セッション (Bamboo やその他の自動ビルド システムの場合のように「スーパーユーザー」として) で、署名証明書を含むロックを解除する必要があるキーチェーンが、通常表示されるものとは異なることでした (そのようなここでYannが示したように)スーパーユーザーではない場合。

最終的に私にとってうまくいったのは、次のことをすることでした:

  1. ここで説明されているように、システム管理者としてログインします
  2. 署名のみのキーチェーンを作成します (例: ios.keychain)
  3. それに署名証明書を追加します(WWDRCA証明書とともに)

ターミナルsuで実行して確認します。security list-keychainsリストに ios.keychain が表示されます。(sudo security list-keychains同じものは表示されません):

sh-3.2# security list-keychains
"/private/var/root/Library/Keychains/login.keychain"
"/Library/Keychains/ios.keychain"
"/Library/Keychains/System.keychain"

コマンドを実行する前に、検索範囲に ios.keychain を追加する必要があることがわかりましたunlock-keychain。ビルド スクリプトで、次の行を実行します。

KEYCHAIN=/Library/Keychains/ios.keychain
# the -s option adds $KEYCHAIN to the search scope, while the -d option adds $KEYCHAIN to the system domain; both are needed
security -v list-keychains -d system -s $KEYCHAIN 
security -v unlock-keychain -p bambooiphone $KEYCHAIN
于 2012-04-19T09:28:40.280 に答える
1

root として xcodebuild を実行している場合 (sudo を実行している場合)、root としてログインし、署名証明書を root のキーチェーンに入れる必要があります。次に、上記のセキュリティでキーチェーンのロックを解除します。

于 2009-02-25T06:57:39.433 に答える
0

やった:

  • login.keychainリストから削除

  • で独自のキーチェーンを作成する$HOME/Library/Keychains/

  • キーチェーンリストに追加します(特定のドメインは指定しませんでした)

  • デフォルトとして設定します

  • security unlock-keychainそれを呼び出す

  • それにグローバル署名証明書 (WWDRCA) を追加します

  • 秘密鍵と、開発証明書と配布証明書の両方をインポートします

がある場合login.keychainでも、「ユーザーの操作は許可されていません」というエラーが表示されます。login.keychainしたがって、使用して削除すると、security delete-keychain最終的に役立ちました!

于 2012-04-16T08:32:59.543 に答える