web-dev-qa-db-ja.com

iOSプロビジョニングプロファイルの再署名

クライアントにiOSアプリがあり、アプリ内購入、ゲームキット、プッシュ通知が有効になっています。現在、アプリストアにあります。社内のエンタープライズ配布証明書を使用してアプリケーションを辞任し、内部でテストしますが、元のプロビジョニングプロファイルに関連付けられたサービスを引き続きテストできます。これは可能ですか?

18
Koko Carl

私はこれを行うことになりました、これは次の組み合わせです:-

そして

1)エンタイトルメントplistを作成し、キーチェーンの問題などを防ぎます

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>GBA9L2EABG.com.your.bundle.id.MyApp</string>
    <key>get-task-allow</key>
    <false/>
</dict>

2)IPAを解凍します

unzip Application.ipa

3)古いコード署名を削除する

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

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

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

5)辞任

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

6)再パッケージ

Zip -qr "Application.resigned.ipa" Payload
31
Koko Carl

@Koko Carlが言ったことよりも少し簡単にアプリを辞任するために、フローサインスクリプトを採用しました。これは https://Gist.github.com/Weptun/540699 にあります。プロセスを本当に簡単にします:

sh floatsign.sh  ~/Downloads/File.ipa "iPhone Distribution: CertificateName" -b new.bundle.id -p /Path/To/Profile/Appstore.mobileprovision   App-resigned.ipa
4
LordT

検索すると、これはスタックオーバーフローに表示される最初の質問です。そのため、最新のiResign Macアプリで更新したかったので、ターミナルでのコマンドの代わりにGUIを使用すると、作業が非常に簡単になります。

iReSign

iReSignを使用すると、Apple)からのデジタル証明書でiDeviceアプリバンドル(.ipa)ファイルに署名または再署名できます。また、.x​​carchiveファイルから署名済みiDeviceアプリバンドル(.ipa)ファイルを作成できます。このツールは、アプリケーションに署名する人がアプリを開発する人と異なる場合に、企業の展開のために企業ユーザーを対象としています。

使い方

iReSignを使用すると、対応する秘密鍵を保持している証明書を使用して、暗号化されていないipaファイルに再署名できます。 iResignは、xcarchiveファイルから署名付きのipaファイルを作成することもできます。

署名のない.ipaファイルまたは.xcarchiveファイルを上部のボックスにドラッグするか、参照ボタンを使用します。

キーチェーンアクセスからの完全な証明書名を入力します。たとえば、下部のボックスに「iPhone Developer:Firstname Lastname(XXXXXXXXXX)」と入力します。

[再署名]をクリックします。そして待つ。署名されたファイルは、元のファイルと同じフォルダに保存されます。

出典: https://github.com/maciekish/iReSign

1
coder284

Koko Carlの応答に少し追加するだけで、ステップ5(辞任)に到達したときにcodesign_allocateで問題が発生した場合は、シェル変数CODESIGN_ALLOCATEをエクスポートして、iPhone SDK内で割り当てられるcodesignへのパスを指定してください。これを行うには、xcodeコマンドラインツールがインストールされていることを確認します(Xcodeの設定/更新)

たとえば、エラーが発生しました:

me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app"

出力:

Payload/MyApp.app: replacing existing signature
codesign_allocate: object: /Users/mimio/Downloads/Payload/MyApp.app/MyApp malformed object (unknown load command 33)
Payload/MyApp.app: object file format unrecognized, invalid, or unsuitable

これを解決するために、このように変数を設定します。

me$ export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

そして、もう一度私のコマンドを実行しました:

me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app"

そして出来上がり!すべてが新しいcodesign_allocateで適切に機能しました

1
tonyg