Errore di convalida: pacchetto non valido. Il bundle su ... contiene il file non consentito "Frameworks"


165

Sto cercando di inviare un'app con Xcode6 GM e visualizzo questo errore durante la convalida. L'app ha un'estensione di azione e un framework dinamico condiviso tra l'estensione e l'app stessa.

Non ho un file chiamato 'Frameworks' da nessuna parte nel progetto, quindi non sono davvero sicuro di cosa significhi. Qualcuno ha riscontrato questo problema o ha qualche idea?ecco come appare l'errore


Che ne dici di una cartella chiamata Frameworks?
Borrrden,

C'è un 'gruppo' nel progetto chiamato Frameworks, ma nessuna cartella. L'ho rimosso, ri-archiviato e ho ancora lo stesso errore.
Mike,

Risposte:


309

Si scopre che l'errore è legato all'uso di Swift (sia l'app che l'estensione utilizzano Swift).

Per l'app, ho dovuto impostare:

Embedded Content Contains Swift Code: YES

e per l'estensione:

Embedded Content Contains Swift Code: NO

Xcode 8 e 9

Sembra che questo sia stato rinominato Always Embed Swift Standard Librariesin Xcode 8 e 9. Quindi, per l'app:

Always Embed Swift Standard Libraries: YES

e per l'estensione:

Always Embed Swift Standard Libraries: NO

7
Sei il mio salvatore. "Incorporato" significa estensione in bundle e poiché un'estensione non contiene più estensioni, non contiene codice rapido.
Chris Truman,

2
Questo non ha risolto il problema per me. Sto anche usando CocoaPods. Qualcuno ha visto problemi relativi a questo? Altre idee?
timschmitz,

8
Non dimenticare le estensioni di WatchKit per assicurarti che il percorso di ricerca del percorso di esecuzione abbia@executable_path/../../Frameworks
Mr Rogers,

1
@MrRogers Questo è ciò che ha risolto il mio problema dopo aver seguito la risposta. Ho un'app objC con orologio rapido. Funzionerebbe bene senza impostare il contenuto incorporato, tuttavia ha ottenuto un rifiuto da Apple. Impostando correttamente il contenuto incorporato, hai rotto l'app. Questo percorso di ricerca è ciò che l'ha risolto.
Beau Nouvelle,

1
Questo non ha funzionato per me, dovevo fare qualcos'altro ed era sull'estensione Target che ha il problema, ho cancellato lo script su "[CP * Incorpora Pods Frameworks" dopo che funziona correttamente !!
A. Trejo,

122

L'unica soluzione che ha funzionato per me è stata aggiungere questo Run Script alla destinazione dell'estensione app:

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

inserisci qui la descrizione dell'immagine Fonte: https://github.com/CocoaPods/CocoaPods/issues/4203


7
La mia app non usa Swift, quindi questa è stata l'unica soluzione che ha funzionato anche per me.
Dan Loughney,

6
Vale la pena ricordare che questo deve solo essere aggiunto all'estensione, non all'obiettivo principale.
theDuncs

3
Questo risolve davvero il problema, ma dà un altro problema che è che non posso eseguire la mia app sul simulatore né sul mio dispositivo. Dà un errore: dyld: Library not loaded: ... Image not foundqualcuno mi può aiutare?
Subkhan Sarif

4
Sono solo io o questo tipo di pazzo?
bkbeachlabs,

1
Risolto durante la convalida .ipa ma si bloccava durante l'installazione con messaggio di errore: dyld: libreria non caricata: @ rpath / AFNetworking.framework / AFNetworking Riferimenti da: / var / containers / Bundle / Application / .... Motivo: immagine non trovata
Aleem

45

Quindi 3 passaggi per risolvere questo problema dalle impostazioni di compilazione

  1. App contenitore: Embedded Content Contains Swift Code: YES
  2. Estensione: Embedded Content Contains Swift Code: NO
  3. Estensione: percorso di ricerca del percorso = @executable_path/../../Frameworks

2
Container vs Extension, sono nuovo di Xcode. dov'è, sono i baccelli di estensione cacao? o dove si trovano queste due cose?
Serge Pedroza,

16

Nel mio caso, ho appena aggiornato a CocoaPods 1.0.1 e questo sembra essere un nuovo bug.

L'aggiornamento Pod aggiunge uno script di esecuzione alla destinazione della mia estensione che crea la cartella Frameworks. L'ho trovato mentre stavo per aggiungere lo script di esecuzione di @ Roman per rimuoverlo.

La soluzione era eliminare questo script dalla fase di compilazione della mia estensione. Ecco quello che doveva andare ...

inserisci qui la descrizione dell'immagine


7
Risolto per me! Ancora una volta è CocoaPods che mi costa oltre un'ora a cercare di capire cosa c'è che non va. Ho una relazione seria di amore e odio con quel prodotto.
fguchelaar,

2
Aggiornamento di Cocoapods per 1.1.0.rc.2risolvere il problema per me.
Otávio,

1
L'eliminazione di Embed Pods Frameworks sotto Build Phases dell'estensione della tastiera ha funzionato per me! Sto usando Xcode 8 e CocoaPods v1.0.1. Grazie!
Storm Factory,

13

Rimuovi ogni fase di costruzione per l'estensione che haembed parola nel titolo.

Inoltre:

  • Il contenuto incorporato contiene il codice Swift che deve essere impostato Yesper la destinazione dell'estensione.

11

Nessuna delle risposte sopra ha funzionato per me. Questo perché l'errore non era causato dall'app padre o dalla sua estensione. Piuttosto una delle librerie collegate era in errore.

Per confermare, archiviare prima con Xcode e poi con Organizer selezionare la voce e individuare usando Show in Finder. Questo mostrerà il.xcarchive file.

Seleziona quel file e scegli "Mostra contenuto pacchetto".

Seleziona .app nella cartella Prodotti / Applicazioni e di nuovo scegli "Mostra contenuto pacchetto".

Individua il modulo offensivo nella cartella Frameworks. Ad esempio se l'errore è:

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

Quindi Frameworks/MyLib.frameworksarà probabilmente visibile quanto segue:

../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

Questi sono presenti perché la libreria collegata - o il modulo - che include l'app padre ha il EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Individua il modulo dipendente in Xcode e aggiorna il flag:

inserisci qui la descrizione dell'immagine

Tieni presente che, superato questo problema, l'app potrebbe essere comunque rifiutata con un'e-mail esplicativa da iTunes Store:

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

Ancora una volta questo torna alla EMBEDDED_CONTENT_CONTAINS_SWIFTbandiera. Assicurati che solo l'app principale sia impostata su YES. Sia l'app che l'estensione WatchKit devono avere questo flag impostato su NO. Questo è dettagliato nella risposta di @ Mike sopra.


10

Nel mio caso, c'era una libreria CocoaPod "Blockly" che specificava Sì per "Librerie standard Swift sempre incorporate". Dopo aver fatto NO per l'opzione, ha funzionato.inserisci qui la descrizione dell'immagine


9

Nel mio caso la soluzione era rimuovere il mio framework dai file binari incorporati della mia estensione e aggiungerlo ai frame e alle librerie collegate della mia estensione. (Entrambi sono disponibili nella scheda Generale dell'estensione.)


7

Se lo script Embed Pods Frameworks e lo script di Roman esistono entrambi nella stessa destinazione.

Controlla se Embed Pods Frameworks si trova prima dell'altro. Altrimenti, sposta la sceneggiatura di Roman sull'ultima.


sei incredibile @Reeonce Zeng, salva la mia giornata!
mgyky

Dovrei tenere entrambi gli script lì o solo l'ultima parte? "$ {SRCROOT} / Pods / Target Support Files / Pods-Orsys WatchKit Extension / Pods-Orsys WatchKit Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[] " ]; quindi rm -fr Frameworks fi

@stack, dovresti aggiungere una nuova fase dello script di esecuzione e riempire con: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; poi rm -fr Frameworks fi `
Reeonce Zeng

cosa intendi per eseguire un nuovo script? abbiamo già una sceneggiatura lì. ok ? in sostituzione del vecchio script, dovrei eseguire una volta il progetto con la sostituzione del testo. Devo selezionare l'opzione "esegui script durante l'installazione del programma" lì?

per favore, aiutami un po 'di più. Ho ricevuto l'errore per l'estensione wathckit. Nel mio progetto di estensione del watchkit, nei miei progetti non esiste alcuna opzione / correzione / menu "Appex contiene non consentito ...". dove posso trovarlo? Ho solo "Embed pods framework" e "copy pods framework". Per favore aiuto.

6

Non sono riuscito a trovare alcuna impostazione per Embedded Content Contains Swift Codema sono stato in grado di trovare un'impostazione Always Embed Swift Standard Librariese l'impostazione su NO per il mio framework ha risolto questo problema.


4
  1. App contenitore: Impostazioni build -> Contenuto incorporato Contiene codice Swift:
  2. Estensione: impostazione build -> contenuto incorporato contiene codice Swift: NO
  3. Estensione: Build Phase -> aggiunto il seguente Run Script in

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

  1. (importante) Estensione: Fase di Costruzione -> spostare lo Script Esegui per l'ultimo (dopo che lo script Embed Pods Frameworks)

"to the Last" è stato il pezzo importante per me, grazie.
Andy Obusek,

3

Se stai usando CocoaPods, prenderei in considerazione l'eliminazione della fase di costruzione dei framework Embed sul target problematico (l'estensione), questo ha risolto il problema per me.


2

Stavo ottenendo lo stesso errore, ed è perché stavo copiando il framework nel bundle di estensioni. A quanto pare, i framework utilizzati dall'estensione devono essere copiati nel bundle dell'app principale e collegati solo nelle impostazioni di build dell'estensione (non copiate). Assicurati di avere il percorso di ricerca '@executable_path /../../ Frameworks' nella build dell'estensione. Penso che quel percorso sia stato aggiunto automaticamente da XCode 10.


1

Ho trovato molte domande come questa e nessuna mi ha aiutato a risolvere il mio problema, quindi spero che questo possa aiutare qualcuno.

Sto creando un'app con estensione Intent (per scorciatoie Siri) e sto usando un framework per il codice condiviso tra l'estensione e la mia app, come raccomandato da Apple.

Avevo aggiunto il mio framework alla mia estensione nella sezione "Frameworks and Libraries" delle impostazioni "Generale" per la destinazione. Quando aggiungi un framework qui, ci sono due colonne. Uno dice il nome del framework e l'altro si intitola "Incorpora". Non avevo nulla da mostrare nella colonna "Incorpora", quindi ho pensato che andasse bene, ma ho dovuto scegliere esplicitamente un'opzione "Non incorporare" per quella colonna per il mio framework. Quando l'ho fatto e archiviato in Xcode, ho potuto vedere durante la convalida che il framework non era più elencato nel mio contenuto ipa sotto ciascun target, ma solo una volta e la convalida alla fine è riuscita.


0

Ho avuto questo problema la prima volta con XCode 7.1.1 per la mia app che ha un'estensione Today (non c'è Swift nel mio progetto). Lo script ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) non ha funzionato per me.

Il downgrade di cocoapods alla versione 0.39.0.beta.3, l'esecuzione pod installe quindi la nuova archiviazione ha risolto il problema.


0

Stavo ottenendo questo stesso errore, insieme a

Errore di bundle nidificati non consentito

Il mio problema era nello SquareReaderSDK.frameworkspecifico, ma ho dovuto aggiungere un nuovo script di esecuzione secondo le loro istruzioni:

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

0

Nessuna delle impostazioni di costruzione elencate qui ha risolto questo problema per me. Tuttavia, sono riuscito a farlo funzionare dopo aver spostato alcuni framework da "Embedded Binaries" a "Linked Frameworks and Libraries".

Sembra che la mia app principale e uno dei miei framework personalizzati abbiano avuto la stessa dipendenza del framework in entrambi e che sembra essere un No No, ma spostarlo nella mia app principale dall'area Incorporata all'area Collegata mi ha permesso di caricare correttamente l'app con nessun errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.