5

phonegap CLI 3.1 と XCode5 を使用しています。Phonegap CLI と Xcrun を使用して、リリース モードのビルドを生成しようとしています。Phonegap Build を使用して mobileprovision やそれらのプロセスをアップロードしたくありません。xcrun で mobileprovison をリリース ビルドに割り当てたいと考えています。

1) コルドバ ビルド ios --リリース

コマンド「/Applications/MAMP/htdocs/MyTest/MyTestApp/platforms/ios/cordova/build」を介してプラットフォーム「ios」でアプリをコンパイルしています --release プラットフォーム「ios」が正常にコンパイルされました。

2) sudo xcrun -sdk iphoneos PackageApplication -v "ios/build/emulator/MyTestApp.app" -o "/Users/mymac/Desktop/Testnew/MyTestApp.ipa" --sign "iPhone ディストリビューション: NAME (TEAM_ID)" - -埋め込み「MyTestApp_Dis.mobileprovision」

アプリケーションのパッケージ化: 'ios/build/emulator/MyTestApp.app' 引数: embedded=MyTestApp_Dis.mobileprovision verbose=1 output=/Users/mymac/Desktop/Testnew/MyTestApp.ipa sign=iPhone ディストリビューション: NAME (TEAM_ID)
環境変数:
HOME = /Users/mymac
SUDO_GID = 20
SDKROOT =
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk VERSIONER_PERL_PREFER_32_BIT = メールなし
= /var/mail/root
SSH_AUTH_SOCK = /tmp/launch-zsBMC8/Listeners
LANG = en_US.UTF-8
USER = root
LOGNAME = root
__CF_USER_TEXT_ENCODING = 0x0:0:0
USERNAME = root
PATH = /usr/bin:/bin:/usr/sbin:/sbin:/ usr/local/bin:/usr/local/git/bin
SUDO_USER = mymac
SHELL = /bin/bash
TERM = xterm-256color
SUDO_COMMAND = /usr/bin/xcrun -sdk iphoneos PackageApplication -v ios/build/emulator/MyTestApp.app -o /Users/mymac/Desktop/Testnew/MyTestApp.ipa -- Sign iPhone Distribution: NAME (TEAM_ID) --embed MyTestApp_Dis.mobileprovision
SUDO_UID = 501
VERSIONER_PERL_VERSION = 5.12

出力ディレクトリ: '/Users/mymac/Desktop/Testnew/MyTestApp.ipa'
一時ディレクトリ: '/tmp/W81FhZ9VAH' (冗長設定の場合、終了時に削除されません)
+ /bin/cp -Rp ios/build/emulator/ MyTestApp.app /tmp/W81FhZ9VAH/ペイロード
プログラム /bin/cp が 0 を返しました: []

オリジナルアプリの確認

  • /usr/bin/codesign --verify -vvvv ios/build/emulator/MyTestApp.appプログラム /usr/bin/codesign が 1 を返しました: [ios/build/emulator/MyTestApp.app: コード オブジェクトは アーキテクチャ
    でまったく署名されていません
    : i386
    ] Codesign チェックに失敗しました: ios/build/emulator/MyTestApp.app: コード オブジェクトはまったく署名されていません アーキテクチャ: i386

元のアプリの確認を完了

「MyTestApp_Dis.mobileprovision」の埋め込み

  • /bin/rm -rf /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision プログラム /bin/rm は 0 を返しました: []
  • /bin/cp -rp MyTestApp_Dis.mobileprovision /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision プログラム /bin/cp が 0 を返しました: []
  • /usr/bin/codesign -d --entitlements /tmp/W81FhZ9VAH/entitlements_rawixGWnKhi /tmp/W81FhZ9VAH/Payload/MyTestApp.app プログラム /usr/bin/codesign が 1 を返しました: [/tmp/W81FhZ9VAH/Payload/MyTestApp.app: コードオブジェクトはまったく署名されていません]
    エラー: '/tmp/W81FhZ9VAH/Payload/MyTestApp.app' から資格を読み取れませんでした
4

4 に答える 4

2

その間、私は見つけました:事実は、コルドバが終了してシェルに戻るとき、コルドバ関連のアクティビティはまだ完了していないということです!

「platforms/ios/AppName/_CodeSignature/CodeResources」ファイルが表示されるまで、cordova の終了後しばらく時間がかかります。このファイルは、xcrun コマンドによって開始される「codesign」が成功するために不可欠です。

だから私は自分のスクリプトで行います(これを「buildit.sh」と呼びます)

#!/bin/bash
[...]
cordova build ios --release
signaturefile="platforms/ios/build/device/$appname/_CodeSignature/CodeResources"
echo DEBUG:signatur file is $signaturefile

while [ ! -f $signaturefile ]
do
  echo waiting
  sleep 1
done
xcrun ...

その後、1 つのスクリプトでのビルド/パッケージ化プロセス全体が成功します。

ただし、ContinuousIntegration サーバーの Jenkins からスクリプトを実行すると、この基準は必須ではあるものの、十分ではないことがわかります。CIから私はまだ得ます

/usr/bin/codesign --verify -vvvv [...] プログラム /usr/bin/codesign が 1 を返しました: [...] コード オブジェクトはまったく署名されていません

エラー!??

編集 (2013 年 5 月 12 日):これは、Jenkins サービスがキーチェーンにアクセスできなかったためです。たとえば、ビルド スクリプトを実行する前に Jenkins ジョブでキーチェーンのロックを解除すると、ソートされます。(最も洗練された解決策ではないかもしれませんが、少なくとも問題がスクリプトにないことを証明しています:)

于 2013-12-03T10:14:51.667 に答える
2

うーん、シャシと同じような問題を抱えています。

シェルから「cordova buld ios [--release]」を実行し、その後「xcrun ...」を実行すると、問題なく動作します。

しかし: スクリプト内からこのシーケンスを実行すると、「Codesign チェックに失敗しました ...」というエラーも表示されます ...

コードバと xcrun 呼び出しの間のスクリプト内に「待機」サイクルを挿入 (のように)すると、機能します。

それで、私には、コルドバが完全に終了していない間にシェルに戻ったように見えます(?)

事実は、スクリプトを次のようにコーディングした場合です

#!/bin/bash
cordova build ios --release
sleep 5
sh -c "xcrun ..."

それは私のために働いています。 質問: cordova/phonegap のバグですか ???

于 2013-12-02T09:44:45.060 に答える
1

コード署名をスキップするには、次のようにコンソールから手動ビルドを実行できます。

xcodebuild clean build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ビルド設定を定義するには、さらに -configuration、-target、および -sdk パラメーターを使用します。

コード署名を無効にするには:

*/アプリケーションに移動します。XCode を右クリックし、[パッケージの内容を表示] を選択します。Content/Developer/Platform/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/SDKSettings.plist をデスクトップにコピーします。(必ず実際にコピーして貼り付けてください。ドラッグ アンド ドロップは必要ありません) それを開き、DefaultProperties で CODE_SIGNING_REQUIRED を NO に設定します。それをコピーして、元のファイルを置き換えます。XCode を再起動します。プロジェクトを開きます。Project Navigator でプロジェクトを選択し、プロジェクトの Build Settings セクションを開きます (特定のターゲットではありません)。Code Signing で Code Signing Identity を見つけ、デバッグ モードとリリース モードの両方で Any iOS SKD を Don't Code Sign に設定します。これで、エラーなしでプロジェクトをビルドできるはずです。*

IPA を作成するには:

[Project Navigator] で [Products] を選択します [NameOfYourProject].app を右クリックし、[Show in Finder] を選択します。フォルダを作成し、Payload という名前を付けます [NameOfYourProject].app を Payload に移動します。ペイロードを圧縮し、名前を [NameOfYourProject].ipa に変更します

于 2013-11-15T09:35:03.197 に答える