5

[さらに下で説明されている同様の質問の重複ではありません]

Jenkins 内から XCodeBuild を実行するとコード署名エラーが発生しますが、コマンド ラインまたは Xcode 内からは正常にビルドされます。

過去に何人かの人々がこの問題を抱えており、それらに共通するテーマは、Jenkins が起動時にデーモン ユーザーとして実行され、システム キーチェーンにアクセスしようとすることです。人々が適用した解決策は、資格情報をシステム キーチェーンにコピーするか、コマンドを実行して使用するキーチェーンを設定することです。

ただし、私の場合、Activity Manager で launchd を見ると、マシンにログオンしているユーザーとしてユーザーが表示されるため、Jenkins はデーモン ユーザーとしてではなく、このユーザーとして実行する必要があります。

XCodeBuild を実行する前に、このコマンドを Jenkins スクリプトに追加して、使用するキーチェーンを設定してみました

security list-keychains -s /Users/[user]/Library/Keychains/login.keychain

しかし、それで問題は解決しませんでした。

私が得ているエラーは次のとおりです。

Code Sign error: The identity 'iPhone Developer: NNNNN (9TYX5WAM63)' doesn't match any valid, non-expired certificate/private key pair in your keychains"

そのため、資格情報をシステム キーチェーンに移動しようとしましたが、Jenkins でこのエラーが発生しましたが、コマンド ラインからは問題ありません。

Code Sign error: Provisioning profile 'F152C66E-B99A-47F6-B262-376CE4403D71' can't be found

また、資格情報をシステム キーチェーンに移動すると、XCOde 内からビルドできなくなります。上記のエラー メッセージと同じエラーが表示されます。

これに従って、org.jenkins-ci.plistファイルを編集して、マシンにログオンしているユーザーとしてユーザーを設定しようとしましたが、それも効果がありませんでした。

Jenkins/Hudson を iOS および Mac 開発の継続的インテグレーションとして使用しているときに、キーチェーンに証明書とキーがありません

次に試すことができるアイデアはありますか?

4

5 に答える 5

6

私たちがこれを最後に台無しにしたとき、それはかなりの挑戦でした。これは、プロジェクトのCIサーバーをセットアップするときに行いました。私が正しく(広く)覚えている場合は、次の手順に従いました。

1)JenkinsをAppleDevアカウントの開発者として設定します

2)Jenkins専用の証明書と開発プロビジョニングプロファイルを作成しました

3)CIサーバーでJenkinsユーザーをセットアップし、そのユーザーのxcodeから以前の証明書/provプロファイルを削除します

4)Jenkins証明書をAD-Hoc Distプロファイルに追加します(.ipaをHockeyAppに配布しようとしている場合は、アーカイブビルドのためにこれを行う必要があります)。

5)xcodeプロジェクトファイルに移動し、プロビジョニングプロファイルへの既存の参照を削除します

6)このユーザーの証明書と適切なProvプロファイルをダウンロードしてインストールします。

7)ビルドの前に、Jenkinsユーザーキーチェーンのロックを解除します。これは、Jenkinsユーザーがxcodeビルドを実行しているユーザーではない場合にのみ実行してください。

Jenkinsユーザーとしてログインしたときに、XcodeがオーガナイザーでProvプロファイルを有効として表示することを確認します。

私の答えはやや曖昧であり、私の意図は役立つことです。このタイプのエラーは通常、3つの原因のいずれかが原因で発生します。Xcodeはプロファイルを見つけることができません、Xcodeは証明書を見つけることができません、またはXcodeは複数のプロファイルを見つけました(異なるエラーを生成すると思われますが、常にではありません)、ある種の不一致があります。通常、Provプロファイルをやり直すことは、最も苦痛の少ない解決策です。

幸運を祈ります。あなたはそれを解決するでしょうそれはただの大きな頭痛の種です!

于 2012-11-28T21:54:57.033 に答える
2

おそらくあなたが探している答えではありませんが、いくつかの理由で XCodeBuild プラグインをあきらめ、「シェルの実行」ステップでビルドを実行しました。

コマンドラインビルドが機能すると言ったので、必要なコマンドはすでにわかっています。それをシェルに入れるだけです。

xcodebuild -verbose -alltargets -configuration Debug clean build CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE=${PROVISIONING_PROFILE}
&&
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}.app" -o "${WORKSPACE}/client_trunk/build/Debug-iphoneos/${Application}-Debug-${shortVer}.${revVer}.ipa" --sign "${CODE_SIGN_IDENTITY}" --embed "/Users/[youruser]/Library/MobileDevice/Provisioning Profiles/${PROVISIONING_PROFILE}.mobileprovision"

上記${CODE_SIGN_IDENTITY}は、次のように見えるものであり、次のようなiPhone Developer: blah
プロファイル${PROVISIONING_PROFILE}の 16 進数ですF152C66E-B99A-47F6-B262-376CE4403D71

于 2012-11-29T15:50:08.123 に答える
0

Jenkins を使用すると、次のエラーが発生しました。

/Users/Shared/Jenkins/Home/jobs/ExampleTabbed-Integration/workspace/build/Debug-iphoneos/ExamplesTabbed.app: User interaction is not allowed.

コマンド /usr/bin/codesign が終了コード 1 で失敗しました

次のようにして修正しました。

  • XCode (jenkins プラグイン) ステップの前にビルド ステップを追加します。
  • 以下を実行コマンドとして追加します。

    security unlock-keychain -p "passwordhere" ${HOME}/Library/Keychains/login.keychain

  • XCode(プラグイン経由)構成では、次を使用しています:

    • キーチェーンのロックを解除しますか? (チェックなし)
    • キーチェーン パス: ${HOME}/Library/Keychains/login.keychain
    • キーチェーン パスワード: (空)

前のステップを削除して、実際の xcode 構成を使用してそれを行うことは可能かもしれませんが、説明どおりに問題なく動作しています。

これは、より安全なソリューションの使用をまだ考慮していないことに注意してください。ただし、これは xcode 署名の問題に対する私の解決策でした。私はOSX上でJenkinsインストーラーを使用して実行しており、デフォルトのJenkinsインストーラーアプリケーションで使用されるlaunchctlコマンドとして実行しています。それが役立つ場合。

于 2013-04-18T20:19:08.237 に答える