8

パッケージをビルドする Bamboo プランがあり、開発者証明書でそのパッケージに署名したいと考えています。私のビルドスクリプトには、これがあります:

productsign --sign "Name of my certificate" "input.pkg" "output.pkg"

コマンド ラインからこのスクリプトを実行すると、期待どおりに動作します。ただし、Bamboo からスクリプトを実行すると、常に次のエラーが表示されます。

productsign: error: Could not find appropriate signing identity for "Name of my certificate"

これは、Bamboo から実行するときにビルド スクリプトが実行されるコンテキストが原因であるに違いないと推測します。証明書を Bamboo で使用できるようにするにはどうすればよいですか? Systemではなくにインストールされloginます。

4

3 に答える 3

3

Bamboo を として実行する必要がある場合は、キーチェーン アクセス (アプリケーション > ユーティリティ) を使用して、ログインキーチェーンからシステムrootキーチェーンに適切な証明書をコピーする必要があります。

そうは言っても、Bamboo を ではなくユーザーとして実行した方がよいでしょうroot。たとえば、モバイル プロビジョニング プロファイルを使用して同じサーバー上の iOS ビルドに署名する必要がある場合、beingrootは機能しません。

于 2013-11-13T17:11:40.660 に答える
1

操作をsudoしてみましたか?

すなわち:

sudo productsign --sign "Name of my certificate" "input.pkg" "output.pkg"

キーはシステム キーチェーンにあるため (これはおそらくあなたのユース ケースでは使用すべきではないでしょうか?)、[設計上] アクセスできるにもかかわらず、「通常の」ユーザーとしてアクセスできない可能性があります。その中の証明書。

于 2013-08-26T10:16:49.700 に答える
0

必要なキーを別のキーチェーンに保存することをお勧めします。これにより、それらの検索と管理がはるかに簡単になります。新しいキーチェーンを作成し、証明書をそこに移動するだけです。便利な場所に保管してください。次に、この方法で署名します (私は を使用してcodesign--productsignますが、同じです)。root としてビルドしたり、これに sudo を使用したりしません。

# Keychain that holds all the required signing certificates
# To create a keychain like this, create it in "Keychain Access" and copy all your certificates into it
# Then set its timeout to infinite (so it doesn't re-lock itself during the build):
#    security set-keychain-settings <path>
# Passing no "-t" option means "no timeout."
# Generally you should just be able to copy this file from build host to build host as needed. Then
# add it to the available keychains using Keychain Access, File>Add Keychain…. If you don't add it to
# Keychain Access, you'll receive signing error CSSMERR_TP_NOT_TRUSTED, since it won't recognize the
# entire chain
keychain=~/Library/Keychains/MyProduct.keychain
keychain_password=somepassword # If you have one on the keychain
cert_identifier='My Signing Name'
...

# We assume the keychain has an infinite timeout, so we just unlock it once here.
if ! security unlock-keychain -p "${keychain_password}" ${keychain} ; then
  echo "Cannot unlock keychain. Cannot sign on this host."
  exit 1
fi

sign()
{
  name=$1 ; shift
  paths=$*

  if ${sign} ; then
    echo "** SIGNING $name **"
    chmod u+w $paths
    codesign --keychain ${keychain} -f -s ${cert_identifier} $paths
  fi
}

sign "The Whole Package" something.pkg
于 2013-11-13T17:22:18.227 に答える