web-dev-qa-db-ger.com

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

Ich versuche, eine App mit dem Xcode6 GM einzureichen, und ich bekomme diesen Fehler bei der Validierung. 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 mit dem Namen 'Frameworks', daher bin ich mir nicht wirklich sicher, was das bedeuten soll. Hat jemand diese Ausgabe oder irgendwelche Ideen?here's what the error looks like

135
Mike

Es stellt sich heraus, dass der Fehler mit 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  

Anscheinend wurde dies in Xcode 8 und 9 in Always Embed Swift Standard Libraries umbenannt. Also für die App:

Always Embed Swift Standard Libraries: YES

und für die Erweiterung:

Always Embed Swift Standard Libraries: NO
264
Mike

Die einzige Lösung, die für mich funktionierte, bestand darin, dieses Run-Skript zum Ziel der App-Erweiterung hinzuzufügen:

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

 enter image description here Quelle: https://github.com/CocoaPods/CocoaPods/issues/4203

112
Roman

Also 3 Schritte, um dies von den 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
40
Vincent Song

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

Das Pod-Update fügt dem Ziel meiner Erweiterung ein Ausführungsskript hinzu, das den Ordner "Frameworks" erstellt. Ich habe es gefunden, als ich gerade das Laufskript 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 der, der gehen musste ...

 enter image description here

16
Dan Loughney

Entfernen Sie alle Build-Phasen für Ihre Erweiterung, die embed Word im Titel hat.

Zusätzlich:

  • Eingebetteter Inhalt enthält Swift-Code muss für das Erweiterungsziel auf Yes gesetzt sein.

Keine der obigen Antworten funktionierte für mich. Dies lag daran, dass der Fehler nicht von der übergeordneten App oder ihrer Erweiterung verursacht wurde. Vielmehr war eine der verknüpften Bibliotheken schuld.

Zur Bestätigung archivieren Sie zunächst mit Xcode, dann mit Organizer den Eintrag und suchen Sie mit In Finder anzeigen. Dadurch wird die .xcarchive-Datei angezeigt.

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

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

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

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

In Frameworks/MyLib.framework wird dann wahrscheinlich 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, den EMBEDDED_CONTENT_CONTAINS_Swift = YES; hat.

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

 enter image description here

Beachten Sie, dass die App nach Behebung dieses Problems immer noch mit einer erläuternden E-Mail aus dem iTunes Store abgelehnt werden kann:

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

Dies kommt wieder auf das Flag EMBEDDED_CONTENT_CONTAINS_Swift zurück. Stellen Sie sicher, dass nur für die übergeordnete App YES festgelegt ist. Für die WatchKit-App und die Erweiterung muss dieses Flag auf NO gesetzt sein. Dies ist wie in @ Mikes Antwort oben beschrieben.

11
Max MacLeod

In meinem Fall gab es eine CocoaPod-Bibliothek "Blockly", die Ja für "Always Embed Swift Standard Libraries" angab. Nachdem für die Option NEIN gemacht wurde, hat es funktioniert.  enter image description here

8
gonbe

Wenn Embed Pods Frameworks -Skript und Römers Skript beide in demselben Ziel vorhanden sind 

Bitte überprüfen Sie, ob die Embed Pods Frameworks vor den anderen liegen. Wenn nicht, verschieben Sie einfach Roman's Skript zum letzten.

7
Reeonce Zeng

In meinem Fall bestand die Lösung darin, mein Framework aus den Embedded Binaries meiner Erweiterung zu entfernen und es den Linked Frameworks und Bibliotheken meiner Erweiterung hinzuzufügen. (Beide befinden sich auf der Registerkarte "Allgemein" der Erweiterung.)

7
Pim

Ich konnte keine Einstellungen für Embedded Content Contains Swift Code finden, aber ich konnte eine Einstellung Always Embed Swift Standard Libraries finden. Wenn Sie dies für mein Framework auf NO setzen, wurde dieses Problem behoben.

6
Gujamin
  1. Container-App: Build-Einstellung -> Eingebetteter Inhalt enthält Swift-Code:YES
  2. Erweiterung: Build-Einstellung -> Eingebetteter Inhalt enthält Swift-Code:NO
  3. Erweiterung: Erstellungsphase -> fügte das folgende Run Script in hinzu 

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

  1. (wichtig) Erweiterung: Erstellungsphase -> Verschieben Sie das Run Script nach Last (nach dem Script zum Einbetten von Pods Frameworks). 
4
Yongxiang Ruan

Wenn Sie CocoaPods verwenden, würde ich in Betracht ziehen, die Build-Phase des Embed-Frameworks für das problematische Ziel (die Erweiterung) zu löschen. Dies hat das Problem für mich behoben.

1
Kurt J

Keine der hier aufgelisteten Build-Einstellungen hat dieses Problem für mich gelöst. Nachdem ich einige Frameworks von "Embedded Binaries" zu "Linked Frameworks and Libraries" verschoben hatte, funktionierte dies jedoch.

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 das Verschieben in meiner Haupt-App aus dem Bereich Eingebettet in den Bereich Verknüpft hat es mir ermöglicht, die App erfolgreich mit hochzuladen keine Fehler.

0
Travis M.

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

0
Zatman

Ich bekam diesen Fehler zusammen mit einem

Fehler bei geschachtelten Bundles nicht zulässig

Mein Problem war spezifisch mit dem SquareReaderSDK.framework, aber ich musste ein neues Run-Skript gemäß den Anweisungen hinzufügen: 

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

Ich hatte dieses Problem zum ersten Mal mit XCode 7.1.1 für meine App, die eine Today-Erweiterung hat (in meinem Projekt gibt es keine Swift-Funktion) ... Das Skript ( https://github.com/CocoaPods/CocoaPods/ Ausgaben/4203 ) hat bei mir nicht funktioniert.

Durch das Downgrade von cocoapods auf Version 0.39.0.beta.3, Ausführen von pod install und anschließendes erneutes Archivieren wurde das Problem behoben.

0
andreacipriani