144

現在、xcodebuild を使用して hudson ですべてのアプリケーションをビルドし、その後に xcrun を使用して問題なくビルドしています。

企業アカウント (アプリ ストア用、場合によってはアドホック配布用) ではなく、企業アカウントで再署名したい複数の IPA ファイルをさまざまな人から受け取りました。

私の問題は、アプリを辞任しようとすると、デバイスにインストールされないことです (エンタープライズ ビルドであるため、インストールされるはずです)。エラー メッセージは (iTunes ではなく) デバイスに表示され、単にアプリをインストールできなかったことを示しています。これ以上の情報はありません。

いくつかの情報を見つけました ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-アップロード/ )

そして、これは可能かもしれません。私が直面している問題は、通常のビルド (xcrun を使用) のようにモバイル プロビジョニング プロファイルを埋め込んでいないように見えることです?

私の辞任スクリプトで私は現在行っています

  • app.ipa を解凍します
  • appname=$(ls ペイロード)
  • xcrun -sdk iphoneos PackageApplication -s "$provisioning_profile" "$project_dir/Payload/$appname" -o "$project_dir/app-resigned.ipa" --sign "$provisioning_profile" --embed "$mobileprovision"

結果の ipa ファイルを調べたところ、元のアプリと非常によく似ているようです。ここで実際に変更する必要があるのはどのファイルですか? 最初は _CodeSignature/CodeResources が変更されると思っていましたが、内容はほとんど同じに見えます。

ポインタは大歓迎です。

4

13 に答える 13

220

ついにこれが機能しました!

プロビジョニング プロファイルにデバイスを追加せずに、アプリ ストアへの送信用に cert1 で署名された IPA でテスト済み。エンタープライズ アカウントで署名された新しい IPA と、社内展開用のモバイル プロビジョニング プロファイルが作成されます (モバイル プロビジョニング プロファイルは IPA に埋め込まれます)。

解決:

IPAを解凍します

unzip Application.ipa

古い CodeSignature を削除する

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

埋め込まれたモバイル プロビジョニング プロファイルを置き換える

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

辞任

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

再パッケージ

zip -qr "Application.resigned.ipa" Payload

編集:資格部分を削除しました(路地のコメントを参照してください、ありがとう)

于 2011-08-03T04:36:57.477 に答える
58

この質問への回答は少し古く、重要な手順が欠落している可能性があるため、これは外部開発者からアプリをインストールするための更新されたガイドです。

----- iOS アプリの退会方法 -----

別の開発者からアプリ (MyApp.ipa など) を受け取り、それをデバイスにインストールして実行できるようにしたいとします (たとえば、 ideviceinstallerを使用して)。

新しい署名アセットを準備する

最初のステップは、インストールして実行するすべてのデバイスを含むプロビジョニング プロファイルを取得することです。Keychain Accessにインストールした証明書がプロファイルに含まれていることを確認します(例: iPhone Developer: Some Body (XXXXXXXXXX) )。アプリに埋め込まれたプロファイルを置き換えることができるように、プロファイル (MyProfile.mobileprovision) をダウンロードします。

次に、署名に含める権利ファイルを準備します。ターミナルを開き、次を実行します。

$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

これにより、プロビジョニング プロファイルを記述した xml ファイルが作成されます。次に、権利をファイルに抽出します。

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

プロビジョニング プロファイルを置き換えてアプリを辞任する

.ipaファイルを使用している場合は、まずアプリを解凍します (代わりに.appがある場合は、この手順をスキップできます)。

$ unzip MyApp.ipa

作業ディレクトリには と が含まれPayload/ますPayload/MyApp.app/。次に、古いコード署名ファイルを削除します。

$ rm -rf Payload/MyApp.app/_CodeSignature

既存のプロビジョニング プロファイル (つまり、embedded.mobileprovision) を独自のものに置き換えます。

$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

重要: アプリに含まれるすべてのフレームワークも再署名する必要があります。これらは にありPayload/MyApp.app/Frameworksます。アプリが Swift で作成されている場合、または追加のフレームワークが含まれている場合、これらを再署名する必要があります。そうしないと、アプリはインストールされますが実行されません。

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

次に、プロビジョニング プロファイルに含まれている証明書と、前に作成した entitlements.plist を使用してアプリに署名します。

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app

アプリを再圧縮できるようになりました。

$ zip -qr MyApp-resigned.ipa Payload

終わり

Payload元のアプリ (MyApp.ipa) と再署名されたバージョン (MyApp-resigned.ipa) があるため、ディレクトリを削除できます。プロビジョニング プロファイルに含まれる任意のデバイスに MyApp-resigned.ipa をインストールできるようになりました。

于 2016-05-11T20:37:25.193 に答える
13

Fastlane を使用するのが最も簡単だと思います。

sudo gem install fastlane -NV
hash -r # for bash
rehash # for zsh
fastlane sigh resign ./path/app.ipa --signing_identity "Apple Distribution: Company Name" -p "my.mobileprovision"
于 2019-06-03T11:56:09.543 に答える
11

私はこの回答にうまく従いましたが、資格が変更されたため、--entitlements "Payload/Application.app/Entitlements.plist"最後から2番目のステートメントの一部を削除しただけで、魅力的に機能しました.

于 2012-04-02T14:26:13.640 に答える
4

これらの辞任のアプローチはどれも私にとってうまくいかなかったので、何か他のことを考え出さなければなりませんでした。

私の場合、期限切れの証明書を持つ IPA がありました。アプリを再構築することもできましたが、まったく同じバージョン (新しい証明書のみを使用) を確実に配布したかったため、再構築したくありませんでした。

他の回答で言及されている辞任の方法の代わりに、ビルドから .xcarchive で始まる IPA を作成する Xcode の方法に目を向けました。

  1. 既存の .xcarchive を複製し、コンテンツの置き換えを開始しました。(.dSYM ファイルは無視しました。)

  2. 古い IPA ファイルから古いアプリを抽出しました (解凍により、Payload フォルダーにあるのはアプリだけです)。

  3. このアプリを新しい .xcarchive に移動し、Products/Applicationsそこにあったアプリを置き換えました。

  4. 編集しましたInfo.plist、編集中

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. .xcarchive を Xcode のアーカイブ フォルダー (通常は/Users/xxxx/Library/Developer/Xcode/Archives.

  6. Xcode で、オーガナイザー ウィンドウを開き、この新しいアーカイブを選択して、通常の (この場合はエンタープライズ) エクスポートを行いました。

その結果、機能する優れた IPA が得られました。

于 2017-10-05T03:00:39.907 に答える
0

これを投稿してくれてありがとう、エリック。これは私にとってはうまくいきました。必要な追加の手順についてメモを追加したいと思います。「Payload/Application.app/」内には、「cacert.pem」という名前のファイルを含む「CACertChains」という名前のディレクトリがありまし。これらの手順を完了するには、ディレクトリと .pem を削除する必要がありました。再度、感謝します!–

于 2014-11-26T18:19:56.577 に答える
-1

拡張機能や監視アプリを備えたアプリがあり、拡張機能や監視アプリごとに複数のプロビジョニング プロファイルがある場合は、このスクリプトを使用して ipa ファイルに再署名する必要があります。

Github でのスクリプトの再署名

このスクリプトの使用例を次に示します。

./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision  resignedYourApp.ipa

さらに別の -p オプションを追加することで、他の拡張機能プロビジョニング プロファイルを含めることもできます。

私にとっては、すべてのプロビジョニング プロファイルが同じ証明書/署名 ID によって署名されていました。

于 2016-02-16T23:50:08.983 に答える