次の方法で共有


IPA ファイルを Visual Studio でビルドした後でファイルを追加または削除することはできますか?

はい、可能ですが、通常は変更を加えた後で、.app バンドルに再署名する必要があります。

.ipa ファイルの変更は通常の使用では必要ないことにご注意ください。 この記事は、情報提供のみを目的として提供されています。

例: .ipa アーカイブからのファイルの削除

この例では、Xamarin.iOS プロジェクトの名前を iPhoneApp1 とし、generated session id の名前を cc530d20d6b19da63f6f1c6f67a0a254 とします。

  1. Visual Studio から通常どおりに .ipa ファイルをビルドします。

  2. Mac ビルド ホストに切り替えます。

  3. ~/Library/Caches/Xamarin/mtbs/builds フォルダーでビルドを検索します。 このパスを Finder > に貼り付け、> に移動し、フォルダー に移動して、Finder でフォルダーを参照します。 プロジェクト名と一致するフォルダーを検索します。 そのフォルダー内で、ビルドの generated session id と一致するフォルダーを検索します。 これは、最も新しい変更時間を持つサブフォルダーである可能性が最も高くなります。

  4. 新しい Terminal.app ウィンドウを開きます。

  5. Terminal.app ウィンドウに cd を入力し、generated session id フォルダーを Terminal.app ウィンドウにドラッグ アンド ドロップします。

    Locating the generated session id folder in Finder

  6. Return キーを押して、generated session id フォルダーにディレクトリを変更します。

  7. 次のコマンドを使用して、.ipa ファイルを一時的な old/ フォルダーに解凍します。 Ad-HociPhoneApp1 の名前は、特定のプロジェクトに応じて調整します。

    ditto -xk bin/iPhone/Ad-Hoc/iPhoneApp1-1.0.ipa old/

  8. Terminal.app ウィンドウを開いたままにします。

  9. .ipa から目的のファイルを削除します。 Finder を使用してごみ箱に移動させるか、コマンド ラインで Terminal.app を使用して削除できます。 Finder で Payload/iPhone ファイルの内容を表示するには、Control キーを押しながらファイルをクリックし、[パッケージの内容を表示する] を選択します。

  10. 手順 3 と同じ一般的なアプローチを使用して、プロジェクト名と名前の generated session id の両方を持つ ~/Library/Logs/Xamarin/MonoTouchVS/ でログ ファイルを見つけます: Locate the project build log in Finder

  11. たとえば、ダブルクリックして、手順 10 からビルド ログを開きます。

  12. tool /usr/bin/codesign execution started with arguments: -v --force --sign を含む行を検索します。

  13. 手順 8 の Terminal.app ウィンドウに /usr/bin/codesign を入力します。

  14. 手順 12 の行から -v で始まるすべての引数をコピーし、Terminal.app ウィンドウに貼り付けます。

  15. 最後の引数を 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
    
  16. ターミナルの old/ ディレクトリに変更します。

    cd old
    
  17. 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" にお問い合わせください