Erreur de validation: lot non valide. Le bundle à… contient le fichier non autorisé 'Frameworks'

165

J'essaie de soumettre une application avec le Xcode6 GM, et j'obtiens cette erreur lors de la validation. L'application a une extension d'action et un cadre dynamique qui sont partagés entre l'extension et l'application elle-même.

Je n'ai pas de fichier appelé «Frameworks» n'importe où dans le projet, donc je ne sais vraiment pas ce que cela signifie. Quelqu'un at-il eu ce problème ou a-t-il des idées?voici à quoi ressemble l'erreur

Mike
la source
Que diriez-vous d'un dossier nommé Frameworks?
borrrden
Il y a un «groupe» dans le projet appelé Frameworks, mais pas de dossier. Je l'ai supprimé, réarchivé et j'obtiens toujours la même erreur.
Mike du

Réponses:

309

Il s'avère que l'erreur est liée à l'utilisation de Swift (l'application et l'extension utilisent Swift).

Pour l'application, j'ai dû définir:

Embedded Content Contains Swift Code: YES

et pour l'extension:

Embedded Content Contains Swift Code: NO

Xcode 8 et 9

On dirait que cela a été renommé Always Embed Swift Standard Librariesdans Xcode 8 et 9. Donc, pour l'application:

Always Embed Swift Standard Libraries: YES

et pour l'extension:

Always Embed Swift Standard Libraries: NO
Mike
la source
7
Tu es mon Sauveur. «Embedded» signifie extension dans le bundle, et comme une extension ne contient pas plus d'extensions, elle ne contient pas de code SWIFT.
Chris Truman du
2
Cela n'a pas résolu le problème pour moi. J'utilise également CocoaPods. Quelqu'un a-t-il vu des problèmes à ce sujet? D'autres idées?
timschmitz
8
N'oubliez pas avec les extensions WatchKit pour vous assurer que le chemin de recherche Runpath a@executable_path/../../Frameworks
M. Rogers
1
@MrRogers C'est ce qui a résolu mon problème après avoir suivi la réponse. J'ai une application objC avec une montre Swift. Cela fonctionnerait bien sans définir le contenu intégré, mais il a été rejeté par Apple. La définition correcte du contenu intégré a cassé l'application. Ce chemin de recherche est ce qui l'a résolu.
Beau Nouvelle
1
Cela n'a pas fonctionné pour moi, j'avais besoin de faire autre chose et j'étais sur l'extension Target qui a le problème, j'ai effacé le script sur "[CP * Embed Pods Frameworks" après cela Cela fonctionne correctement !!
A. Trejo
122

La seule solution qui a fonctionné pour moi a été d'ajouter ce Run Script à la cible App Extension:

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

entrez la description de l'image ici Source: https://github.com/CocoaPods/CocoaPods/issues/4203

romain
la source
7
Mon application n'utilise pas Swift, c'est donc la seule solution qui a fonctionné pour moi aussi.
Dan Loughney
6
Il convient de mentionner que cela ne doit être ajouté qu'à l'extension, pas à la cible principale.
theDuncs
3
Cela résout en effet le problème, mais cela pose un autre problème qui est que je ne peux pas exécuter mon application sur le simulateur ni sur mon appareil. Cela donne une erreur: dyld: Library not loaded: ... Image not foundn'importe qui peut m'aider?
Subkhan Sarif
4
Est-ce juste moi ou est-ce un peu fou?
bkbeachlabs
1
Correction de la validation de .ipa mais plantage lors de l'installation avec le message d'erreur: dyld: Bibliothèque non chargée: @ rpath / AFNetworking.framework / AFNetworking Référencé à partir de: / var / containers / Bundle / Application / .... Raison: image non trouvée
Aleem
45

Donc, 3 étapes pour résoudre ce problème à partir des paramètres de construction

  1. Application de conteneur: Embedded Content Contains Swift Code: YES
  2. Extension: Embedded Content Contains Swift Code: NO
  3. Extension: Chemin de recherche du chemin d'exécution = @executable_path/../../Frameworks
Vincent Chanson
la source
2
Container vs Extension, je suis nouveau sur Xcode. où est-ce, sont les cabosses de cacao d'extension? ou où se trouvent ces deux choses?
Serge Pedroza
16

Dans mon cas, je viens de passer à CocoaPods 1.0.1 et cela semble être un nouveau bogue.

La mise à jour du pod ajoute un script d'exécution à la cible de mon extension qui crée le dossier Frameworks. Je l'ai trouvé alors que j'allais ajouter le script d'exécution de @ Roman pour le supprimer.

La solution était de supprimer ce script de la phase de construction de mon extension. Voici celle qu'il fallait partir ...

entrez la description de l'image ici

Dan Loughney
la source
7
Résolu pour moi! Encore une fois, CocoaPods me coûte plus d'une heure à essayer de comprendre ce qui ne va pas. J'ai une relation sérieuse d'amour et de haine avec ce produit.
fguchelaar le
2
Mettre à jour Cocoapods pour 1.1.0.rc.2résoudre le problème pour moi.
Otávio
1
La suppression des cadres Embed Pods sous les phases de construction de l'extension Keyboard a fonctionné pour moi! J'utilise Xcode 8 et CocoaPods v1.0.1. Merci!
Storm Factory
13

Supprimez chaque phase de construction pour votre extension qui a un embedmot dans son titre.

Aditionellement:

  • Le contenu intégré contient le code Swift doit être défini sur Yespour la cible d'extension.
Bartłomiej Semańczyk
la source
11

Aucune des réponses ci-dessus n'a fonctionné pour moi. En effet, l'erreur n'a pas été causée par l'application parente ou son extension. Au contraire, une des bibliothèques liées était en faute.

Pour confirmer, archivez d'abord à l'aide de Xcode, puis à l'aide de l'Organiseur, sélectionnez l'entrée et recherchez à l'aide de Afficher dans le Finder. Cela affichera le .xcarchivefichier.

Sélectionnez ce fichier et choisissez "Afficher le contenu du paquet".

Sélectionnez le .app dans le dossier Produits / Applications et choisissez à nouveau "Afficher le contenu du package".

Recherchez le module incriminé dans le dossier Frameworks. Par exemple si l'erreur est:

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

Ensuite, dans ce qui Frameworks/MyLib.frameworksuit sera probablement visible:

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

Ceux-ci sont présents car la bibliothèque liée - ou le module - que l'application parent inclut a le EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Localisez le module dépendant dans Xcode et mettez à jour l'indicateur:

entrez la description de l'image ici

Notez qu'après avoir résolu ce problème, l'application peut toujours être rejetée avec un e-mail explicatif de l'iTunes Store:

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

Encore une fois, cela revient au EMBEDDED_CONTENT_CONTAINS_SWIFTdrapeau. Assurez-vous que seule l'application parente a cette valeur YES. Cet indicateur doit être défini sur l'application et l'extension WatchKit NO. C'est comme détaillé dans la réponse de @ Mike ci-dessus.

Max MacLeod
la source
10

Dans mon cas, il y avait une bibliothèque CocoaPod "Blockly" qui spécifiait Oui pour "Always Embed Swift Standard Libraries". Après avoir fait NON pour l'option, cela a fonctionné.entrez la description de l'image ici

Suztomo
la source
9

Dans mon cas, la solution était de supprimer mon framework des binaires incorporés de mon extension et de l'ajouter aux frameworks et bibliothèques liés de mon extension. (Les deux peuvent être trouvés dans l'onglet Général de l'extension.)

Pim
la source
7

Si le script Embed Pods Frameworks et le script Roman existent tous deux dans la même cible.

Veuillez vérifier si les cadres d'intégration des pods se situent avant l'autre. Sinon, déplacez simplement le script de Roman vers le dernier.

Reeonce Zeng
la source
tu es incroyable @Reeonce Zeng, sauve ma journée!
mgyky
Dois-je y conserver les deux scripts ou seulement la dernière partie? "$ {SRCROOT} / Pods / Target Support Files / Pods-Orsys WatchKit Extension / Pods-Orsys WatchKit Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [-d "Frameworks"] ]; then rm -fr Frameworks fi
@stack, vous devez ajouter une nouvelle phase d'exécution de script, et remplir avec: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; puis rm -fr Frameworks fi `
Reeonce Zeng
qu'entendez-vous par exécuter un nouveau script? nous avons déjà un script là-bas. D'accord ? en remplaçant l'ancien script, dois-je exécuter une fois le projet en remplaçant votre texte. Dois-je sélectionner l'option «exécuter le script lors de l'installation du programme»?
s'il vous plaît, aidez-moi un peu plus. J'ai eu l'erreur pour l'extension wathckit. Dans mon projet d'extension watchkit, il n'y a pas d'option / menu / onglet "réparer l'appex contient des interdits ..." dans mes projets. où puis-je le trouver? Je n'ai que "Embed pods framework" et "copy pods framework". S'il vous plaît, aidez.
6

Je n'ai pas pu trouver de paramètres pour, Embedded Content Contains Swift Codemais j'ai pu trouver un paramètre Always Embed Swift Standard Librarieset le définir sur NON pour mon framework a résolu ce problème.

Gujamin
la source
4
  1. Application de conteneur: Paramètre de construction -> Le contenu intégré contient le code Swift: OUI
  2. Extension: Paramètre de construction -> Le contenu intégré contient le code Swift: NON
  3. Extension: Phase de construction -> a ajouté le script d'exécution suivant dans

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

  1. (important) Extension: Build Phase -> déplacer le script d' exécution vers le dernier (après le script Embed Pods Frameworks)
Yongxiang Ruan
la source
"to the Last" était la pièce importante pour moi, merci.
Andy Obusek
3

Si vous utilisez CocoaPods, j'envisagerais de supprimer la phase de construction des frameworks Embed sur la cible problématique (l'extension), cela a résolu le problème pour moi.

Kurt J
la source
2

J'obtenais la même erreur, et c'est parce que je copiais le framework dans le bundle d'extension. En fin de compte, les frameworks utilisés par l'extension doivent être copiés dans le bundle de l'application principale et uniquement liés dans les paramètres de construction de l'extension (non copiés). Assurez-vous d'avoir le chemin de recherche '@executable_path /../../ Frameworks' dans la construction de l'extension. Je pense que ce chemin a été ajouté automatiquement par XCode 10.

Zatman
la source
1

J'ai trouvé beaucoup de questions comme celle-ci et aucune ne m'a aidé à résoudre mon problème, alors j'espère que cela pourrait aider quelqu'un.

Je crée une application qui a une extension Intent (pour les raccourcis Siri) et j'utilise un cadre pour le code partagé entre l'extension et mon application, comme recommandé par Apple.

J'avais ajouté mon framework à mon extension dans la section "Frameworks and Libraries" des paramètres "General" de la cible. Lorsque vous ajoutez un cadre ici, il y a deux colonnes. L'un dit le nom du framework et l'autre est intitulé "Embed". Je n'avais rien qui apparaissait dans la colonne "Incorporer" donc j'ai pensé que c'était bien, mais j'ai dû choisir explicitement une option "Ne pas incorporer" pour cette colonne pour mon framework. Lorsque j'ai fait cela et archivé dans Xcode, j'ai pu voir lors de la validation que le framework n'était plus répertorié dans mon contenu ipa sous chaque cible, mais une seule fois, et la validation a finalement réussi.

Belle B. Cooper
la source
0

J'ai eu ce problème la première fois avec XCode 7.1.1 pour mon application qui a une extension Today (il n'y a pas de Swift dans mon projet). Le script ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) n'a pas fonctionné pour moi.

La rétrogradation des cocoapodes à la version 0.39.0.beta.3, l'exécution pod install, puis la réarchivage ont résolu le problème.

andreacipriani
la source
0

J'obtenais cette même erreur, avec un

Erreur relative aux ensembles imbriqués non autorisés

Mon problème était avec le SquareReaderSDK.frameworkspécifiquement, mais j'ai dû ajouter un nouveau script d'exécution selon leurs instructions:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Franc
la source
0

Aucun des paramètres de construction répertoriés ici n'a résolu ce problème pour moi. Cependant, j'ai réussi à faire fonctionner cela après avoir déplacé certains frameworks de "Embedded Binaries" vers "Linked Frameworks and Libraries".

Il semble que mon application principale et l'un de mes cadres personnalisés avaient la même dépendance de cadre dans les deux et cela semble être un Non Non, mais le déplacer dans mon application principale de la zone intégrée à la zone liée m'a permis de télécharger l'application avec succès avec aucune erreur.

Travis M.
la source