Freigeben über


Kann ich einer IPA-Datei nach der Erstellung in Visual Studio Dateien hinzufügen bzw. Dateien daraus entfernen?

Ja, das ist möglich. In der Regel ist es jedoch erforderlich, dass Sie das Paket .app nach der Änderung erneut signieren.

Beachten Sie, dass das Ändern der .ipa Datei in der normalen Verwendung nicht erforderlich ist. Dieser Artikel wird nur zu Informationszwecken bereitgestellt.

Beispiel: Entfernen einer Datei aus einem .ipa Archiv

In diesem Beispiel wird davon ausgegangen, dass der Name des Xamarin.iOS-Projekts lautet iPhoneApp1 und generated session idcc530d20d6b19da63f6f1c6f67a0a254

  1. Erstellen Sie die .ipa Datei normal aus Visual Studio.

  2. Wechseln Sie zum Mac-Buildhost.

  3. Suchen Sie den Build im ~/Library/Caches/Xamarin/mtbs/builds Ordner. Sie können diesen Pfad in Finder > Go > to Folder einfügen, um den Ordner in Finder zu durchsuchen. Suchen Sie nach dem Ordner, der dem Projektnamen entspricht. Suchen Sie in diesem Ordner nach dem Ordner, der dem generated session id Build entspricht. Dies wird höchstwahrscheinlich der Unterordner sein, der die letzte Änderungszeit hat.

  4. Öffnen Sie ein neues Terminal.app Fenster.

  5. Geben Sie cd in das Terminal.app-Fenster ein, und ziehen Sie dann den generated session id Ordner in das Terminal.app Fenster:

    Locating the generated session id folder in Finder

  6. Geben Sie den Rückgabeschlüssel ein, um das Verzeichnis in den generated session id Ordner zu ändern.

  7. Entpacken Sie die .ipa Datei mit dem folgenden Befehl in einen temporären old/ Ordner. Passen Sie die Ad-Hoc Namen nach iPhoneApp1 Bedarf für Ihr bestimmtes Projekt an.

    ditto -xk bin/i Telefon/Ad-Hoc/i Telefon App1-1.0.ipa old/

  8. Lassen Sie das Terminal.app Fenster geöffnet.

  9. Löschen Sie die gewünschten Dateien aus der .ipa. Sie können sie entweder mithilfe von Finder in den Papierkorb verschieben oder in der Befehlszeile löschen.Terminal.app Um den Inhalt der Payload/iPhone Datei in Finder anzuzeigen, klicken Sie mit der CTRL-MAUSTASTE auf die Datei, und wählen Sie "Paketinhalt anzeigen" aus.

  10. Suchen Sie mit dem gleichen allgemeinen Ansatz wie in Schritt 3 die Protokolldatei, ~/Library/Logs/Xamarin/MonoTouchVS/ unter der sowohl der Projektname als auch der generated session id Name im Namen enthalten sind: Locate the project build log in Finder

  11. Öffnen Sie das Buildprotokoll aus Schritt 10, z. B. durch Doppelklicken darauf.

  12. Suchen Sie die Zeile, die enthält tool /usr/bin/codesign execution started with arguments: -v --force --sign.

  13. Geben Sie /usr/bin/codesign aus Schritt 8 in das fenster Terminal.app ein.

  14. Kopieren Sie alle Argumente, die mit der Zeile in Schritt 12 beginnen -v , und fügen Sie sie in das fenster Terminal.app ein.

  15. Ändern Sie das letzte Argument so, dass es sich um das .app Bundle im old/Payload/ Ordner befindet, und führen Sie dann den Befehl aus.

    /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. Wechseln Sie in das old/ Verzeichnis im Terminal:

    cd old
    
  17. Zippen Sie den Inhalt des Verzeichnisses mithilfe zip des Befehls in eine neue .ipa Datei. Sie können das "$HOME/Desktop/iPhoneApp1-1.0.ipa" Argument so ändern, dass die .ipa Datei überall ausgegeben wird, wo Sie möchten:

    zip -yr "$HOME/Desktop/iPhoneApp1-1.0.ipa" *
    

Häufige Fehlermeldungen

Wenn Sie sehen Invalid Signature. A sealed resource is missing or invalid., bedeutet dies im Allgemeinen, dass etwas innerhalb des .app Bundles geändert wurde und dass das .app Bündel danach nicht ordnungsgemäß signiert wurde. Beachten Sie außerdem, dass Sie das Original .ipa mit einem Verteilungsprofil mit einem Verteilungsprofil erstellen .ipa möchten. Andernfalls ist dies Entitlements.xcent falsch.

Wenn Sie nach Schritt 9 den folgenden codesign --verify Befehl im Terminalfenster ausführen, wird der Fehler zusammen mit der genauen Ursache des Fehlers angezeigt, um ein konkretes Beispiel dafür zu geben, wie dieser Fehler auftreten kann:

$ 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

Und der App Store-Überprüfungsprozess meldet eine ähnliche Fehlermeldung:

FEHLER ITMS-90035: "Ungültige Signatur. Eine versiegelte Ressource fehlt oder ist ungültig. Die Binärdatei im Pfad [i TelefonApp1.app/iTelefon App1] enthält eine ungültige Signatur. Stellen Sie sicher, dass Sie Ihre Anwendung mit einem Verteilungszertifikat signiert haben, nicht mit einem Ad-hoc-Zertifikat oder einem Entwicklungszertifikat. Stellen Sie sicher, dass die Codesignatureinstellungen in Xcode auf Zielebene korrekt sind (wodurch alle Werte auf Projektebene überschrieben werden). Stellen Sie außerdem sicher, dass das hochzuladende Bundle mit einem Release-Ziel in Xcode und nicht mit einem Simulatorziel erstellt wurde. Wenn Sie sicher sind, dass Ihre Codesignatureinstellungen korrekt sind, wählen Sie "Alle bereinigen" in Xcode aus, löschen Sie das Verzeichnis "Build" im Finder, und erstellen Sie Ihr Releaseziel neu. Weitere Informationen finden Sie unter https://developer.apple.com/library/ios/documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html"