IPhoneアプリケーションの自動ビルドサーバーをセットアップしようとしています。テスターが開発をフォローできるように、アドホックベータ版を毎晩ビルドできるようにしたいと思います。
アドホックビルドを実行するためにxcodeを正常にセットアップしました。また、コマンドラインからビルドを起動することもできます。
xcodebuild -configuration AdHoc -sdk iphoneos2.2 clean build
私が抱えている問題は、次の行がフォークされた端末(Nohupまたは画面を使用)から機能せず、次のように失敗することです。
CodeSignエラー:コード署名ID 'iPhone Distribution:XXXXX'は、キーチェーン内のコード署名証明書と一致しません。キーチェーンに追加したら、ファイルをタッチするか、プロジェクトをクリーンアップして続行します。
シェルとNohupまたは画面で環境変数を確認しましたが、手がかりが見つかりませんでした。私の問題は、フォークされた端末がキーチェーンにアクセスできないことだと思いますが、それを許可する方法がわかりません。
ご協力いただきありがとうございます
Teエラーが発生しましたユーザーの操作は許可されていません
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
これには2つ(おそらく3つ!)のコンポーネントがあります。 1つは、キーチェーンのロックを解除する必要があることです。次に、キーチェーン内に、ロック解除状態のアプリケーションに与えられるアクセス許可を示すアクセス制御リストがあります。したがって、キーチェーンが正常にロック解除された場合でも、秘密キーにアクセスして署名する機能が/usr/bin/codesign
に与えられていない場合、このメッセージが表示されます。最後に、Mac OS Sierraを使用している場合、キーに割り当てられたデフォルトのパーティションIDは、codesign
バイナリとの互換性を保つために正しくありません。
解決策は次のとおりです。
1)キーチェーンアクセスGUIにアクセスできる場合、プライベートキーを右クリックし、[アクセス制御]タブを選択して[すべてのアプリケーションを許可する]を選択することにより、すべてのプログラムまたは/ usr/bin/codesignアクセスを手動で許可できます[このアイテムにアクセスするには]ラジオまたは[これらのアプリケーションによるアクセスを常に許可する]リストのリスト。
2)このエラーが発生した場合、ログインしていないユーザーに対してcodesign
を実行しようとしている可能性があります。この場合、明らかに「キーチェーンアクセス」GUIにアクセスできません。これらの場合、アプリケーション<null>
のsign
認可がないことを確認します。これは明らかにすべてのアプリケーション、または具体的には/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
パーティションを含めます。おそらく、これはAppleによって配布されたため、codesign
に割り当てられた名前空間です。
security set-key-partition-list -S Apple-tool:,Apple: -k "<password>" login.keychain
[〜#〜] note [〜#〜]:Apple-tool
パーティションはsecurity
ツールによって挿入されるため、上記のコマンドは、そのパーティションを保持します。この側面の詳細については、以下を参照してください。 http://www.openradar.me/28524119
別の解決策:
ビルドプロセス内でsecurity list-keychains -s ${HOME}/Library/Keychains/login.keychain
を使用して、ログインキーチェーンを検索リストに明示的に追加できますか?分岐したターミナルからは、ビルドプロセスはユーザーキーチェーンを認識しないようです。キーチェーン検索リストが現在のセキュリティセッションに基づいている場合、これは理にかなっています。分岐したターミナルセッションは、ループバック接続を介してssh
のようにログインセッションを終了します。
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 Shellスクリプトから実行するときに問題が発生しました。 sshシェルから実行する場合、スクリプトは正常に機能しました。
ほとんどの人が見ている違いは、security list-keychainを実行すると次のようになることです:
$ 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"
...そして、魔法のようなものがジェンキンスで構築され始めました。うわー...それは私にとって排水の約4時間でした。はぁ。
OK、問題は私にとって2つのことでした。1つ目はキーチェーンのロックを解除することでした。
security unlock-keychain login.keychain
2番目は(空の)パスフレーズでした。
security import blahblahbackup.p12 -k login.keychain -T /usr/bin/codesign -P ""
更新:Aは、スクリプトがWebスクリプトまたはsthからトリガーされるときに、少し問題が発生しました。そのような。 /Library/Keychains/System.chainが表示されるだけです。だから私は汚い回避策を見つけました(これはセキュリティの問題につながるかもしれませんが、私にとっては大丈夫です);
someuser
として動作しており、ビルドのすべてがsomeuser
にセットアップされています。そして、私のPHPスクリプト(ビルドをトリガーするため)は〜/ build-scriptを呼び出していました。このように変更しました:
ssh someuser @ localhost〜/ build-script
そのため、実際のttyで動作し、すべてのキーチェーンにアクセスでき、すべてが正常に動作します。
別のポスターが言うように、
security list-keychains -s "~/Library/Keychains/login.keychain"
しかし、GUIコンテキストでログインしている場合にのみlogin.keychainにアクセスできると思います(SSHと画面を介してシステムでテストしたばかりですが、VNCを介してログインすることもあります)。
Launchctlを使用してGUIコンテキストを選択し、プログラムを実行することは明らかに可能ですが、「ログインしているユーザー」に対しても機能すると思われます。
「security show-keychain-info keychain-file
'次のエラーが表示されます。
ユーザー操作は許可されていません
そして、それはさらに情報を探すためのフレーズです。もう1つの解決策は、証明書をシステムキーチェーンに配置することです!
セキュリティコマンドを確認しましたが、フォークされたときに端末に割り当てられたキーチェーンは同じではないようです。ターミナルでセキュリティコマンドを起動した場合、次のようになります。
$ security list-keychains
"/Users/yannooo/Library/Keychains/login.keychain"
"/Library/Keychains/System.keychain"
一方、screenを使用すると、次の出力が得られます。
$ security list-keychains
"/Library/Keychains/System.keychain"
"/Library/Keychains/System.keychain"
ビルド証明書はログインキーチェーンに保存されているため、コード署名エラーは正常に見えます。
誰かがキーチェーンを端末に割り当てる方法を知っていますか?成功せずにこれを試しました
security login-keychain -s /Users/yannooo/Library/Keychains/login.keychain
何か案は?
Atlassian Bamboo 2.7とOS X 10.7.3 Lionを使用しており、スレッドで見つかったすべてのアプローチを試しましたが、「ユーザーインタラクションは許可されていません」というエラーが表示されていました。
問題は、リモート端末セッション(Bambooまたは別の自動ビルドシステムの場合のような「スーパーユーザー」として)で、署名証明書を含むロックを解除する必要があるキーチェーンが通常の表示と異なることです(そのようなスーパーユーザーではないときに here )でYannが示したように。
最終的に私のために働いたのは、次のことをすることでした:
ios.keychain
)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"
unlock-keychain
コマンドを実行する前に、検索スコープにios.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
ログインキーチェーンのロック解除が機能しませんでした。キーチェーンアクセス(iOSと呼ばれます)を使用して別のキーチェーンを作成し、ビルドにこれらのコマンドを追加すると動作しました(自分のユーザーとしてJenkinsを実行している場合):
security -v list-keychains -d system -s〜/ Library/Keychains/iOS.keychain; security -v unlock-keychain -p password〜/ライブラリ/Keychains/iOS.keychain;
しかし、これはより有望に見えます: https://wiki.jenkins-ci.org/display/JENKINS/Xcode+Plugin#XcodePlugin-Userinteractionisnotallowed
security list-keychains
を実行していて、リストにカスタムキーチェーンが表示されているが、それでも機能しない場合は、キーチェーンが順番にチェックされるという問題に直面している可能性がありますリストを検索し、SSHセッションでlogin.keychain
のロックを解除しなかったため、リスト内の次のキーチェーンに移動するのではなく、そこで失敗しました。
security unlock-keychain
でロックを解除するカスタムキーチェーンに検索リストを設定すると機能します。 Yannの回答からこのメソッドを使用すると、検索リストからlogin.keychainも削除されます。
Login.keychainを保存するには:
security list-keychains -s ~/Library/Keychains/custom.keychain ~/Library/Keychains/login.keychain
この方法では、マシンでGUIセッションを使用するときにlogin.keychain
アイテムにアクセスできますが、コード署名は最初にカスタムキーチェーンをチェックし、ロックを解除すると成功します。
ルートとしてxcodebuildを実行している場合(これはSudoのとき)、ルートとしてログインし、署名証明書をルートのキーチェーンに配置する必要があります。次に、上記のセキュリティでキーチェーンのロックを解除します。
やった:
リストからlogin.keychain
を削除
$HOME/Library/Keychains/
に独自のキーチェーンを作成します
キーチェーンリストに追加します(特定のドメインを指定しませんでした)
デフォルトとして設定
security unlock-keychain
を呼び出します
グローバル署名証明書(WWDRCA)を追加します
秘密鍵と開発および配布証明書の両方をインポートします
login.keychain
がある場合、「ユーザーの操作は許可されていません」というエラーが引き続き表示されます。したがって、login.keychain
を使用してsecurity delete-keychain
を削除すると、ようやく役立ちました!