20

私の会社では、CI ノードとして 1 つのビルド マシン (Mac Mini) を使用して、iOS アプリをビルドしています。現在、ミニ上でアドホックおよび App Store 構成を構築しています。最近エンタープライズ プログラムに登録したので、エンタープライズ構成の構築も開始したいと考えています。ただし、「iPhone Distribution: Widget Corporation」という名前の証明書が 2 つあるため、ビルド プロセスは失敗します。1 つは AdHoc/AppStore 用の配布証明書で、もう 1 つは Enterprise 用です (Apple は In-House と呼んでいます)。

mini のキーチェーンを変更して、1 つの証明書がログイン キーチェーンにあり、もう 1 つが "enterprise" という新しいキーチェーンにあるようにしましたが、これはビルドの開始時からエラーをシフトしただけです:

CodeSign error: Certificate identity 'iPhone Distribution: Widget Corporation' appears more than once in the keychain.

ビルドの最後まで:

iPhone Distribution: Widget Corporation: ambiguous (matches "iPhone Distribution: Widget Corporation" in /Users/hudson.admin/Library/Keychains/login.keychain and "iPhone Distribution: Widget Corporation" in /Users/hudson.admin/Library/Keychains/enterprise.keychain)

私の質問は、2 つの証明書を適切にサンドボックス化して、同じマシン上でアプリのアドホック バージョン、App Store バージョン、および社内バージョンを構築できるかどうかです。私がまだ試していない唯一の可能な解決策は、実際に証明書をソースと一緒にバンドルし、security必要に応じて証明書を追加および削除することです。明らかに、そのソリューションはあまりきれいではなく、セキュリティ リスクをもたらします。

何か案は?

4

5 に答える 5

17

Apple Developer Technical Support と話し合った結果、別のキーチェーンを作成してさまざまな証明書を格納し、--keychain filename引数をcodesignステップに渡して適切なファイルを指すようにすることをお勧めしました。オプションを使用して、この引数を Xcode または xcodebuild に渡すことができOTHER_CODE_SIGN_FLAGSます。例えば:

xcodebuild -target "<targetname>" -configuration "<configname>" \
  PROVISIONING_PROFILE=A3A47A82-E91F-4E95-8559-601C6C857053 \
  OTHER_CODE_SIGN_FLAGS="--keychain=/Users/username/Library/Keychains/enterprise.keychain" \
  build  

また、新しいキーチェーンを作成した後、デフォルトで 5 分後に再ロックされるようです。ビルドに時間がかかる場合は、これを変更することをお勧めします。

于 2011-06-01T15:21:44.913 に答える
9

私を助けたもう1つの方法は、署名IDをSHA1ハッシュとしてcodesignに与えることです。手順:

  1. 必要な証明書のキーチェーンアクセスでSHA1ハッシュを見つけます
  2. SHA1ハッシュを以下によって返されるものと比較します。security find-identity -v -p codesigning
  3. コードサインには、手順2の正しいSHA1を使用します。codesign -s "SHA1_FROM_STEP2" ...
于 2013-03-12T22:24:58.957 に答える
5

WWDCのxcodeチームと話し合った後、彼らはもっと簡単な解決策を提案しました。衝突が起こらないように、エンタープライズ証明書の名前を変更するように要求できます。

これを行うには、開発者の連絡先ページで[アカウントの管理]リンクをクリックし、件名として[iOSプロビジョニングポータル]を選択して、開発者サービスに連絡します。

これは他のどの方法よりもはるかに簡単です。キーチェーンに両方の証明書セットがあり、コード署名する適切なエンティティを選択する以外に何もすることなく、アプリストアまたはエンタープライズ配布用に問題なく構築できます。

于 2012-07-06T16:30:02.237 に答える
0

私はこれに多くの問題を抱えてきました。おそらく最善の解決策は、証明書の名前を変更するよう Apple に要求することですが、それを処理したくない場合は、別の解決策を使用しました。通常の証明書とエンタープライズ証明書の両方をエクスポートしたフォルダーがあります。次に、使用していない証明書を削除して、別の証明書をインポートできます。こっちの方が面倒かもしれませんが、普段は企業内でしかアプリを配布していないので、それほど面倒ではありません。

ちなみに、証明書を削除するには、証明書フィルターを選択すると、関連する秘密鍵が表示され、証明書と鍵の両方が削除されます。証明書のみを削除すると、Xcode はそれを再度作成し続けます。

于 2013-05-29T09:31:55.780 に答える
0

homer_simpson の答えを詳しく説明するには、.p12 ファイルの SHA1 を (security呼び出しを使用せずに) 直接計算し、結果をcodesignorにフィードすることができxcrunます。以下は、私の autobuild スクリプトからの抜粋です。

# get SHA1 of .p12 file and pass it to PackageApplication to prevent ambiguity in cert selection
# sample output of openssl: SHA1 Fingerprint=14:B0:58:D1:F9:1D:A5:74:0A:AA:BE:B9:F2:7A:7E:AD:58:82:A2:25
# fingerprint (everything after =) is extracted with cut, and : are removed with sed

# ${IDENTITY} is a variable that contains path to your .p12 file. passphrase is empty in this case.
P12_SHA=$(openssl pkcs12 -in "${IDENTITY}" -nodes -passin pass: | openssl x509 -noout -fingerprint -sha1 | cut -d = -f 2 | sed -e 's/://g')

/usr/bin/xcrun -sdk iphoneos PackageApplication -s "${P12_SHA}" ...
于 2014-08-25T17:44:32.017 に答える