はい、可能ですが、通常は変更を加えた後で、.app
バンドルに再署名する必要があります。
.ipa
ファイルの変更は通常の使用では必要ないことにご注意ください。 この記事は、情報提供のみを目的として提供されています。
例: .ipa
アーカイブからのファイルの削除
この例では、Xamarin.iOS プロジェクトの名前を iPhoneApp1
とし、generated session id
の名前を cc530d20d6b19da63f6f1c6f67a0a254
とします。
Visual Studio から通常どおりに
.ipa
ファイルをビルドします。Mac ビルド ホストに切り替えます。
~/Library/Caches/Xamarin/mtbs/builds
フォルダーでビルドを検索します。 このパスを Finder > に貼り付け、> に移動し、フォルダー に移動して、Finder でフォルダーを参照します。 プロジェクト名と一致するフォルダーを検索します。 そのフォルダー内で、ビルドのgenerated session id
と一致するフォルダーを検索します。 これは、最も新しい変更時間を持つサブフォルダーである可能性が最も高くなります。新しい
Terminal.app
ウィンドウを開きます。Terminal.app ウィンドウに
cd
を入力し、generated session id
フォルダーをTerminal.app
ウィンドウにドラッグ アンド ドロップします。Return キーを押して、
generated session id
フォルダーにディレクトリを変更します。次のコマンドを使用して、
.ipa
ファイルを一時的なold/
フォルダーに解凍します。Ad-Hoc
とiPhoneApp1
の名前は、特定のプロジェクトに応じて調整します。ditto -xk bin/iPhone/Ad-Hoc/iPhoneApp1-1.0.ipa old/
Terminal.app
ウィンドウを開いたままにします。.ipa
から目的のファイルを削除します。 Finder を使用してごみ箱に移動させるか、コマンド ラインでTerminal.app
を使用して削除できます。 Finder でPayload/iPhone
ファイルの内容を表示するには、Control キーを押しながらファイルをクリックし、[パッケージの内容を表示する] を選択します。手順 3 と同じ一般的なアプローチを使用して、プロジェクト名と名前の
generated session id
の両方を持つ~/Library/Logs/Xamarin/MonoTouchVS/
でログ ファイルを見つけます:たとえば、ダブルクリックして、手順 10 からビルド ログを開きます。
tool /usr/bin/codesign execution started with arguments: -v --force --sign
を含む行を検索します。手順 8 の Terminal.app ウィンドウに
/usr/bin/codesign
を入力します。手順 12 の行から
-v
で始まるすべての引数をコピーし、Terminal.app ウィンドウに貼り付けます。最後の引数を
old/Payload/
フォルダー内の.app
バンドルに変更し、コマンドを実行します。/usr/bin/codesign -v --force --sign SOME_LONG_STRING in/iPhone/Ad-Hoc/iPhoneApp1.app/ResourceRules.plist --entitlements obj/iPhone/Ad-Hoc/Entitlements.xcent old/Payload/iPhoneApp1.app
ターミナルの
old/
ディレクトリに変更します。cd old
zip
コマンドを使用して、ディレクトリの内容を新しい.ipa
ファイルに圧縮します。"$HOME/Desktop/iPhoneApp1-1.0.ipa"
引数を変更して、好きな場所に.ipa
ファイルを出力できます。zip -yr "$HOME/Desktop/iPhoneApp1-1.0.ipa" *
一般的なエラー メッセージ
Invalid Signature. A sealed resource is missing or invalid.
が表示された場合、一般的には .app
バンドル内で何らかの変更があり、.app
バンドルがその後正しく再署名されなかったことを意味します。 また、配布プロファイルを持つ .ipa
を作成する場合は、配布プロファイルを持つオリジナルの .ipa
をビルドする必要があることに注意してください。 それ以外の場合は、Entitlements.xcent
は不正確になります。
このエラーが発生する具体的な例を挙げると、手順 9 の後にターミナル ウィンドウで次の codesign --verify
コマンドを実行すると、エラーの正確な原因に沿ってエラーが表示されます。
$ codesign -dvvv --no-strict --verify old/Payload/iPhoneApp1.app
old/Payload/iPhoneApp1.app: a sealed resource is missing or invalid
file missing: /Users/macuser/Library/Caches/Xamarin/mtbs/builds/iPhoneApp1/cc530d20d6b19da63f6f1c6f67a0a254/old/Payload/iPhoneApp1.app/MyFile.png
また、App Store の検証プロセスでも同様のエラー メッセージが報告されます。
エラー ITMS-90035: "無効な署名。 封印されたリソースが見つからないか無効です。 パス [iPhoneApp1.app/iPhoneApp1] のバイナリに無効な署名が含まれています。 アドホック証明書や開発証明書ではなく、配布証明書でアプリケーションに署名していることを確認してください。 Xcode のコード署名設定が、ターゲット レベルで正しいことを確認します (プロジェクト レベルの値をオーバーライドします)。 さらに、アップロードするバンドルが、シミュレーター ターゲットではなく Xcode のリリース ターゲットを使用してビルドされていることを確認します。 コード署名の設定が正しいことが確実である場合は、Xcode で [すべて消去] を選択し、Finder で "build" ディレクトリを削除して、リリース ターゲットをリビルドします。 詳細については、https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html" にお問い合わせください