LoginSignup
53
52

More than 5 years have passed since last update.

MacのJenkinsでiOSアプリをビルドするときにKeychain周りで失敗する時の対処

Posted at

想定するケース

GUIのない環境下でiOSアプリをコマンドラインでビルドするケースを想定しています。例えばJenkinsとか。
キーチェーンに証明書の鍵をimportしたのに動かない!というケースへの対応です。

xcodebuildでビルドしているときに

/usr/bin/codesign --force --sign <キーチェーンのUUID> --resource-rules= …中略… 
User interaction is not allowed.

The following build commands failed:
    CodeSign <アプリ名>

というエラーが出るときの対応です。

原因

キーチェーンに含まれている秘密鍵を利用しようとするとキーチェーンがポップアップを表示して秘密鍵を利用してもいいかを尋ねます。
GUI環境のある場合は、

codesignはキーチェーンに含まれるキー "your-key-name"を使用して
署名しようとしています。
この項目へのアクセスを許可しますか?

というダイアログが出るのですが、Jenkinsのようなコマンドライン環境ではポップアップが出せないため "User interaction is not allowed."というエラーが出て失敗します。

どうすればよいか

  • 署名用秘密鍵をimportするときに /usr/bin/codesign にアクセス権限を与える
  • ビルドする際にkeychainのパスフレーズを入力するポップアップが出ないようにする
署名用秘密のimport

GUIからでもimportはできますが、その場合特定のプログラムに対してアクセスを与えるのが面倒です。
以下のようにコマンドで実行します。

$ security unlock-keychain -p <キーチェーンのパスフレーズ>
$ security import <秘密鍵のパス> -k ~/Library/Keychains/login.keychain -P <キーチェーンパスワード> -T /usr/bin/codesign

まず、unlock-keychain でキーチェーンをunlockします。これをしないと次のコマンド実行時に"User interaction is not allowed."というエラーが出て失敗します。
次に security import... で秘密鍵をキーチェーンにimportします。ただしその時、-T /usr/bin/codesignで秘密鍵にアクセスできるプログラムを渡します。
xcodebuildでビルドするとき、内部では/usr/bin/codesignを利用しているようなのでこのプログラムにアクセス権限を与えます。

ビルドスクリプト

初めの方に

$ security unlock-keychain -p <キーチェーンのパスフレーズ>

としてキーチェーンをアンロックしてください。そうしないとビルドするときにキーチェーンパスワードを求めるポップアップが出現します。

合わせて読みたい

iOSアプリのプロビジョニング周りを図にしてみる
ssh - "User interaction is not allowed" trying to sign an OSX app using codesign - Stack Overflow

53
52
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
53
52