1. ホーム
  2. macos

[解決済み] OSXアプリにcodesignで署名しようとすると、"User interaction is not allowed "と表示される。

2022-04-27 18:02:21

質問

自動ビルドはJenkinsで行っています。ビルド自体はスレーブで実行されており、スレーブはSSH経由で実行されます。

エラーが発生します。

00:03:25.113 [codesign-app] build/App.app: User interaction is not allowed.

これまで、ここの他の投稿で見たすべての提案を試してみました。

  • 署名の直前に security unlock-keychain を使ってキーチェーンのロックを解除する。
  • 署名キーを独自のキーチェーンに移動させる。
  • 署名キーをログインキーチェーンに移動させる。
  • 署名キーをシステムキーチェーンに移動させる。
  • 手動でlist-keychainsをキーを含むキーチェーンだけに設定する。

どの場合も、同じエラーが発生します。

この問題を診断するために、ローカルのターミナルで "security unlock-keychain" コマンドを実行してみたところ、実際にはキーチェーンのロックが解除されないことがわかりました。これは、コマンドラインでパスワードを渡しても、パスワードの入力を求めても、同じことが起こります。GUIで同じキーチェーンのロックを解除すると、パスワードの入力を求められ、その後ロックが解除されます。さらに、"security lock-keychain"を実行すると、次のようになります。 する は、コマンド実行後すぐにキーロックが表示されます。このことから、unlock-keychainは実際には機能しないと思われます。Lion (ビルドスレーブとして使用しています) と Mavericks (私が開発しています) で同じ挙動を経験しました。

次に、すべてのセキュリティコマンドに-vを追加してみました。

list-keychains "-d" "system" "-s" "/Users/tester/.secret/App.keychain"
Listing keychains to see if it was added: ((
        "/Library/Keychains/System.keychain"
))
unlock-keychain "-p" "**PASSWORD**" "/Users/tester/.secret/App.keychain"
build/App.app: User interaction is not allowed.

このことから、うまくいっていないのはlist-keychainsのようです。もしかしたら、どちらも機能していないかもしれませんね :/。

があります。 似たような質問はこちら . 解決策は面白いです - launchctlで"SessionCreate"をtrueに設定することです。しかし、私はマスター上でビルドしていません。私のビルドプロセスは、スレーブのビルドマシン上でSSHから開始されます。もしかしたら、"SessionCreate" を実行したときに launchctl が行っていることを行うコマンドラインの方法があるのではありませんか?

解決方法は?

というのも、2日半に渡り、いろいろと試した結果、あることが功を奏したようなのです。このままうまくいくことを祈りつつ、今は手を引いておこうと思います。

本質的には、以下のようなことになるようです。 -d system が実際に機能しない。ですから、このあたりの他の質問に対する多くの回答は、おそらくそれを反映するように更新されるべきでしょう。

security -v list-keychains -s "$KEYCHAIN" "$HOME/Library/Keychains/login.keychain"
security list-keychains # so we can verify that it was added if it fails again
security -v unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN"
codesign --sign "$SIGNER_IDENTITY" --force --signature-size 9600 \
         --resource-rules src/AppResourceRules.plist --timestamp --verbose \
         "$APP"