web-dev-qa-db-fra.com

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

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

Je n'ai pas de fichier appelé «Frameworks» dans le projet, donc je ne suis vraiment pas sûr de ce que cela signifie. Quelqu'un at-il eu ce problème ou eu des idées?here's what the error looks like

135
Mike

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

Pour l'application, je devais 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é en Always Embed Swift Standard Libraries dans Xcode 8 et 9. Donc, pour l'application:

Always Embed Swift Standard Libraries: YES

et pour l'extension:

Always Embed Swift Standard Libraries: NO
264
Mike

La seule solution qui a fonctionné pour moi a été d'ajouter ce script d'exécution à la cible de l'extension d'application:

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

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

112
Roman

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

  1. Application conteneur: Embedded Content Contains Swift Code: YES
  2. Extension: Embedded Content Contains Swift Code: NO
  3. Extension: chemin de recherche Runpath = @executable_path/../../Frameworks
40
Vincent Song

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

La mise à jour 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 consistait à supprimer ce script de la phase de construction de mon extension. Voici celui qui devait aller ...

 enter image description here

16
Dan Loughney

Remove Every Build Phase pour votre extension dont le titre est embed Word.

Aditionellement:

  • Le contenu incorporé contient le code Swift doit être défini sur Yes pour la cible de l'extension.
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 parent ni par son extension. Une des bibliothèques liées était plutôt en faute.

Pour confirmer, archivez d'abord avec Xcode, puis avec Organizer, sélectionnez l'entrée et localisez-la en utilisant Afficher dans le Finder. Cela montrera le fichier .xcarchive.

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

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

Localisez 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 le Frameworks/MyLib.framework, ce qui suit 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 parce que la bibliothèque liée - ou le module - inclus dans l'application parente possède le EMBEDDED_CONTENT_CONTAINS_Swift = YES;

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

 enter image description here

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

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

Encore une fois, cela revient au drapeau EMBEDDED_CONTENT_CONTAINS_Swift. Assurez-vous que seule l'application parent a la valeur YES. L’application WatchKit et son extension doivent avoir cet indicateur défini sur NO. Ceci est détaillé dans la réponse de @ Mike ci-dessus.

11
Max MacLeod

Dans mon cas, il y avait une bibliothèque CocoaPod "Blockly" qui spécifiait Oui pour "Toujours intégrer les bibliothèques standard Swift". Après avoir fait NON pour l'option, cela a fonctionné.  enter image description here

8
gonbe

Si les scripts Embed Pods et le script de Roman existent dans la même cible. 

Veuillez vérifier si les cadres d'intégration de pods localisent avant l'autre. Sinon, déplacez le script de Roman au dernier.

7
Reeonce Zeng

Dans mon cas, la solution consistait à supprimer mon framework des binaires incorporés de mon extension et à l'ajouter aux frameworks et bibliothèques liés de mon extension. (Les deux se trouvent dans l'onglet Général de l'extension.)

7
Pim

Je n'ai pas pu trouver de paramètre pour Embedded Content Contains Swift Code, mais j'ai pu trouver un paramètre Always Embed Swift Standard Libraries et le régler sur NO pour mon framework a résolu ce problème.

6
Gujamin
  1. Application conteneur: Paramètre de construction -> Le contenu intégré contient le code Swift:YES
  2. Extension: Build Setting -> Embedded Content contient le code Swift:NO
  3. Extension: Build Phase -> a ajouté le suivant Run Script in 

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

  1. (important) Extension: Phase de construction -> déplacez le Script d'exécution vers le dernier (après le script Frameworks de Embed Pods) 
4
Yongxiang Ruan

Si vous utilisez CocoaPods, je souhaiterais supprimer la phase de construction des cadres incorporés sur la cible problématique (l'extension), cela a résolu le problème pour moi.

1
Kurt J

Aucun des paramètres de construction répertoriés ici n'a résolu ce problème pour moi. Cependant, cela a fonctionné après le déplacement de certains cadres de "binaires incorporés" vers "cadres et bibliothèques liés".

Il semble que mon application principale et l'un de mes cadres personnalisés aient la même dépendance dans les deux cas, ce qui semble être un non, mais le déplacer dans mon application principale de la zone Embedded vers la zone Liée m'a permis de télécharger l'application avec succès. pas d'erreurs.

0
Travis M.

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

0
Zatman

Je recevais cette même erreur, avec un

Erreur d'ensembles imbriqués non autorisés

Mon problème était avec le SquareReaderSDK.framework spécifiquement mais je devais ajouter un nouveau script d'exécution selon leurs instructions: 

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

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.

Le déclassement des cocoapodes vers la version 0.39.0.beta.3, l'exécution de pod install, puis le ré-archivage ont résolu le problème.

0
andreacipriani