Validierungsfehler: Ungültiges Bundle. Das Bundle unter… enthält die nicht zugelassene Datei 'Frameworks'.

164

Ich versuche, eine App mit dem Xcode6 GM einzureichen, und bei der Validierung wird dieser Fehler angezeigt. Die App verfügt über eine Aktionserweiterung und ein dynamisches Framework, das von der Erweiterung und der App selbst gemeinsam genutzt wird.

Ich habe nirgendwo im Projekt eine Datei namens "Frameworks", daher bin ich mir nicht sicher, was dies bedeuten soll. Hat jemand dieses Problem bekommen oder hat er irgendwelche Ideen?So sieht der Fehler aus

Mike
quelle
Wie wäre es mit einem Ordner namens Frameworks?
Borrrden
Es gibt eine 'Gruppe' im Projekt namens Frameworks, aber keinen Ordner. Ich habe es entfernt, neu archiviert und erhalte immer noch den gleichen Fehler.
Mike

Antworten:

307

Es stellt sich heraus, dass der Fehler mit der Verwendung von Swift zusammenhängt (sowohl die App als auch die Erweiterung verwenden Swift).

Für die App musste ich einstellen:

Embedded Content Contains Swift Code: YES

und für die Erweiterung:

Embedded Content Contains Swift Code: NO

Xcode 8 und 9

Sieht so aus, als ob dies Always Embed Swift Standard Librariesin Xcode 8 und 9 umbenannt wurde. Also für die App:

Always Embed Swift Standard Libraries: YES

und für die Erweiterung:

Always Embed Swift Standard Libraries: NO
Mike
quelle
7
Du bist mein Retter. "Eingebettet" bedeutet Erweiterung im Bundle. Da eine Erweiterung keine weiteren Erweiterungen enthält, enthält sie keinen schnellen Code.
Chris Truman
2
Dies hat das Problem für mich nicht gelöst. Ich benutze auch CocoaPods. Hat jemand Probleme damit gesehen? Irgendwelche anderen Ideen?
Timschmitz
8
Vergessen Sie nicht mit WatchKit-Erweiterungen, um sicherzustellen, dass der Runpath Search Path hat@executable_path/../../Frameworks
Mr Rogers
1
@ MrRogers Dies ist, was mein Problem gelöst hat, nachdem ich der Antwort gefolgt bin. Ich habe eine Objekt-App mit schneller Uhr. Würde gut laufen, ohne den eingebetteten Inhalt festzulegen, aber es wurde von Apple abgelehnt. Durch korrektes Einstellen des eingebetteten Inhalts wurde die App beschädigt. Dieser Suchpfad hat das Problem behoben.
Beau Nouvelle
1
Dies hat bei mir nicht funktioniert, ich musste etwas anderes tun und befand mich in der Zielerweiterung, die das Problem hat. Danach habe ich das Skript auf "[CP * Embed Pods Frameworks" gelöscht. Es funktioniert korrekt !!
A. Trejo
122

Die einzige Lösung, die für mich funktioniert hat, war das Hinzufügen dieses Ausführungsskripts zum Ziel der App-Erweiterung:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

Geben Sie hier die Bildbeschreibung ein Quelle: https://github.com/CocoaPods/CocoaPods/issues/4203

römisch
quelle
7
Meine App verwendet Swift nicht, daher war dies das einzige Update, das auch für mich funktioniert hat.
Dan Loughney
6
Erwähnenswert ist, dass dies nur der Erweiterung hinzugefügt werden muss, nicht dem Hauptziel.
TheDuncs
3
Dies löst zwar das Problem, gibt aber ein weiteres Problem: Ich kann meine App weder auf dem Simulator noch auf meinem Gerät ausführen. Es gibt einen Fehler: dyld: Library not loaded: ... Image not foundKann mir jemand helfen?
Subkhan Sarif
4
Ist es nur ich oder ist das verrückt?
bkbeachlabs
1
Fehler beim Überprüfen von .ipa behoben, aber Absturz bei Installation mit Fehlermeldung: dyld: Bibliothek nicht geladen: @ rpath / AFNetworking.framework / AFNetworking Referenziert von: / var / container / Bundle / Application / .... Grund: Bild nicht gefunden
Aleem
45

Also 3 Schritte, um dies anhand der Build-Einstellungen zu beheben

  1. Container App: Embedded Content Contains Swift Code: YES
  2. Erweiterung: Embedded Content Contains Swift Code: NO
  3. Erweiterung: Runpath Search Path = @executable_path/../../Frameworks
Vincent Song
quelle
2
Container vs Extension, ich bin neu bei Xcode. Wo ist das? Sind Verlängerungskakaofrüchte? oder wo befinden sich diese beiden Dinge?
Serge Pedroza
16

In meinem Fall habe ich gerade ein Upgrade auf CocoaPods 1.0.1 durchgeführt, und dies scheint ein neuer Fehler zu sein.

Das Pod-Update fügt dem Ziel meiner Erweiterung ein Ausführungsskript hinzu, das den Frameworks-Ordner erstellt. Ich fand es, als ich das Ausführungsskript von @ Roman hinzufügen wollte, um es zu entfernen.

Die Lösung bestand darin, dieses Skript aus der Erstellungsphase meiner Erweiterung zu löschen. Hier ist derjenige, der gehen musste ...

Geben Sie hier die Bildbeschreibung ein

Dan Loughney
quelle
7
Hat es für mich gelöst! Wieder einmal kostet mich CocoaPods über eine Stunde, um herauszufinden, was los ist. Ich habe eine ernsthafte Hassliebe zu diesem Produkt.
Fguchelaar
2
Cocoapods aktualisieren, um 1.1.0.rc.2das Problem für mich zu lösen.
Otávio
1
Das Löschen der Embed Pods Frameworks unter den Build-Phasen der Tastaturerweiterung hat bei mir funktioniert! Ich verwende Xcode 8 und CocoaPods v1.0.1. Vielen Dank!
Sturm Fabrik
13

Entfernen Sie jede Build-Phase für Ihre Erweiterungembed deren Titel ein Wort enthält.

Zusätzlich:

  • Eingebetteter Inhalt enthält Swift-Code , der Yesfür das Erweiterungsziel festgelegt werden muss .
Bartłomiej Semańczyk
quelle
11

Keine der oben genannten Antworten hat bei mir funktioniert. Dies lag daran, dass der Fehler nicht durch die übergeordnete App oder deren Erweiterung verursacht wurde. Vielmehr war eine der verknüpften Bibliotheken schuld.

Zur Bestätigung archivieren Sie zuerst mit Xcode und dann mit Organizer den Eintrag und suchen ihn mit Show in Finder. Dies zeigt die .xcarchiveDatei.

Wählen Sie diese Datei aus und wählen Sie "Paketinhalt anzeigen".

Wählen Sie die .app im Ordner Produkte / Anwendungen aus und wählen Sie erneut "Paketinhalt anzeigen".

Suchen Sie das fehlerhafte Modul im Ordner Frameworks. Zum Beispiel, wenn der Fehler ist:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

Dann wird im Frameworks/MyLib.frameworkFolgenden wohl Folgendes sichtbar sein:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

Diese sind vorhanden, weil die verknüpfte Bibliothek - oder das Modul -, die die übergeordnete App enthält, die EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Suchen Sie das abhängige Modul in Xcode und aktualisieren Sie das Flag:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass die App nach Behebung dieses Problems möglicherweise weiterhin mit einer erklärenden E-Mail aus dem iTunes Store abgelehnt wird:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

Wieder kommt dies zur EMBEDDED_CONTENT_CONTAINS_SWIFTFlagge zurück. Stellen Sie sicher, dass dies nur für die übergeordnete App festgelegt ist YES. Sowohl für die WatchKit-App als auch für die Erweiterung muss dieses Flag gesetzt sein NO. Dies ist wie in @ Mikes Antwort oben beschrieben.

Max MacLeod
quelle
10

In meinem Fall gab es eine CocoaPod-Bibliothek "Blockly", die "Ja für Swift Always Standard Libraries immer einbetten" angab. Nachdem Sie für die Option NEIN gemacht hatten, funktionierte es.Geben Sie hier die Bildbeschreibung ein

suztomo
quelle
9

In meinem Fall bestand die Lösung darin, mein Framework aus den eingebetteten Binärdateien meiner Erweiterung zu entfernen und es den verknüpften Frameworks und Bibliotheken meiner Erweiterung hinzuzufügen. (Beide finden Sie auf der Registerkarte Allgemein der Erweiterung.)

Pim
quelle
7

Wenn Embed Pods Frameworks- Skript und Roman-Skript beide im selben Ziel vorhanden sind.

Bitte überprüfen Sie, ob sich die Embed Pods Frameworks vor dem anderen befinden. Wenn nicht, verschieben Sie einfach Romans Skript zum letzten.

Reeonce Zeng
quelle
Du bist unglaublich @Reeonce Zeng, rette meinen Tag!
mgyky
Sollte ich beide Skripte dort behalten oder nur den letzten Teil? "$ {SRCROOT} / Pods / Zielunterstützungsdateien / Pods-Orsys WatchKit-Erweiterung / Pods-Orsys WatchKit-Erweiterung-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Framework ]; dann rm -fr Frameworks fi
@stack, Sie sollten eine neue Ausführungsskriptphase hinzufügen und Folgendes füllen: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; dann rm -fr Frameworks fi `
Reeonce Zeng
Was meinst du mit neuem Skript ausführen? Wir haben dort bereits ein Skript. in Ordnung ? Ersetzen Sie das alte Skript, sollte ich einmal das Projekt mit dem Ersetzen Ihres Textes ausführen. Muss ich dort die Option "Skript ausführen, wenn das Programm installiert wird" auswählen?
Bitte helfen Sie mir ein bisschen mehr. Ich habe den Fehler für die Wathckit-Erweiterung erhalten. In meinem Watchkit-Erweiterungsprojekt gibt es in meinen Projekten keine Option / Menü / Registerkarte "Fix the Appex enthält nicht zulässig ...". wo kann ich es finden Ich habe nur "Pods-Framework einbetten" und "Pods-Framework kopieren". Bitte helfen Sie.
6

Ich konnte keine Einstellungen für finden, Embedded Content Contains Swift Codeaber ich konnte eine Einstellung finden Always Embed Swift Standard Librariesund diese Einstellung auf NEIN für mein Framework hat dieses Problem behoben.

Gujamin
quelle
4
  1. Container-App: Build-Einstellung -> Eingebetteter Inhalt enthält Swift-Code: JA
  2. Erweiterung: Build-Einstellung -> Eingebetteter Inhalt enthält Swift-Code: NO
  3. Erweiterung: Build - Phase -> hinzugefügt folgende Skript ausführen in

cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; dann rm -fr Frameworks fi

  1. (wichtig) Erweiterung: Erstellungsphase -> Verschieben Sie das Ausführungsskript auf die letzte (nach dem Einbetten von Pods Frameworks-Skripten)
Yongxiang Ruan
quelle
"to the Last" war das wichtige Stück für mich, danke.
Andy Obusek
3

Wenn Sie CocoaPods verwenden, würde ich in Betracht ziehen, die Erstellungsphase für eingebettete Frameworks auf dem problematischen Ziel (der Erweiterung) zu löschen. Dies hat das Problem für mich behoben.

Kurt J.
quelle
2

Ich habe den gleichen Fehler erhalten, weil ich das Framework in das Erweiterungspaket kopiert habe. Wie sich herausstellt, sollten Frameworks, die von der Erweiterung verwendet werden, in das Haupt-App-Bundle kopiert und nur in den Einstellungen für die Erweiterungserstellung verknüpft werden (nicht kopiert). Stellen Sie sicher, dass der Erweiterungsbuild den Suchpfad '@executable_path /../../ Frameworks' enthält. Ich denke, dieser Pfad wurde automatisch von XCode 10 hinzugefügt.

Zatman
quelle
1

Ich habe viele Fragen wie diese gefunden und keine hat mir geholfen, mein Problem zu beheben. Hoffentlich kann dies jemandem helfen.

Ich erstelle eine App mit einer Intent-Erweiterung (für Siri-Verknüpfungen) und verwende ein Framework für Code, der zwischen der Erweiterung und meiner App geteilt wird, wie von Apple empfohlen.

Ich hatte mein Framework zu meiner Erweiterung im Abschnitt "Frameworks und Bibliotheken" der "Allgemeinen" Einstellungen für das Ziel hinzugefügt. Wenn Sie hier ein Framework hinzufügen, gibt es zwei Spalten. Einer sagt den Namen des Frameworks und der andere trägt den Titel "Einbetten". In der Spalte "Einbetten" wurde nichts angezeigt, daher fand ich das in Ordnung, musste jedoch für mein Framework explizit die Option "Nicht einbetten" für diese Spalte auswählen. Als ich das tat und in Xcode archivierte, konnte ich während der Validierung feststellen, dass das Framework nicht mehr in meinem IPA-Inhalt unter jedem Ziel aufgeführt war, sondern nur noch einmal, und die Validierung war schließlich erfolgreich.

Belle B. Cooper
quelle
0

Ich hatte dieses Problem zum ersten Mal mit XCode 7.1.1 für meine App mit einer Today-Erweiterung (in meinem Projekt ist kein Swift vorhanden). Das Skript ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) hat bei mir nicht funktioniert.

Das Herabstufen von Cocoapods auf Version 0.39.0.beta.3, Ausführen pod installund erneutes Archivieren löste das Problem.

andreacipriani
quelle
0

Ich bekam den gleichen Fehler zusammen mit einem

Fehler bei verschachtelten Bundles nicht zulässig

Mein Problem war SquareReaderSDK.frameworkspeziell mit dem, aber ich musste ein neues Ausführungsskript gemäß ihren Anweisungen hinzufügen:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Frank
quelle
0

Keine der hier aufgeführten Build-Einstellungen hat dieses Problem für mich behoben. Dies hat jedoch funktioniert, nachdem einige Frameworks von "Embedded Binaries" zu "Linked Frameworks and Libraries" verschoben wurden.

Es scheint, dass meine Haupt-App und eines meiner benutzerdefinierten Frameworks in beiden die gleiche Framework-Abhängigkeit hatten, und das scheint ein Nein Nein zu sein, aber durch Verschieben in meiner Haupt-App vom eingebetteten Bereich in den verknüpften Bereich konnte ich die App erfolgreich hochladen keine Fehler.

Travis M.
quelle