Error de validación: paquete no válido. El paquete en ... contiene el archivo no permitido 'Frameworks'

165

Estoy tratando de enviar una aplicación con el Xcode6 GM, y aparece este error en la validación. La aplicación tiene una extensión de acción y un marco dinámico que se comparte entre la extensión y la aplicación misma.

No tengo un archivo llamado 'Frameworks' en ninguna parte del proyecto, por lo que realmente no estoy seguro de lo que se supone que significa. ¿Alguien ha tenido este problema o tiene alguna idea?así es como se ve el error

Miguel
fuente
¿Qué tal una carpeta llamada Frameworks?
Borrrden
Hay un 'grupo' en el proyecto llamado Frameworks, pero no hay carpeta. Lo eliminé, volví a archivarlo y sigo teniendo el mismo error.
Mike

Respuestas:

308

Resulta que el error está relacionado con el uso de Swift (tanto la aplicación como la extensión hacen uso de Swift).

Para la aplicación, tuve que configurar:

Embedded Content Contains Swift Code: YES

y para la extensión:

Embedded Content Contains Swift Code: NO

Xcode 8 y 9

Parece que esto ha cambiado de nombre Always Embed Swift Standard Librariesen Xcode 8 y 9. Entonces, para la aplicación:

Always Embed Swift Standard Libraries: YES

y para la extensión:

Always Embed Swift Standard Libraries: NO
Miguel
fuente
77
Tu eres mi salvador. "Embebido" significa extensión en paquete, y dado que una extensión no contiene más extensiones, no contiene código rápido.
Chris Truman
2
Esto no resolvió el problema para mí. También estoy usando CocoaPods. ¿Alguien ha visto problemas relacionados con eso? ¿Alguna otra idea?
timschmitz
8
No se olvide con extensiones WatchKit para asegurarse de que el Camino RUNPATH Search tiene@executable_path/../../Frameworks
Sr. Rogers
1
@ MrRogers Esto es lo que resolvió mi problema después de seguir la respuesta. Tengo una aplicación objC con reloj rápido. Funcionaría bien sin configurar el contenido incrustado, sin embargo, recibió un rechazo de Apple. Establecer el contenido incrustado correctamente, rompió la aplicación. Esta ruta de búsqueda es lo que lo solucionó.
Beau Nouvelle
1
Esto no funcionó para mí, necesitaba hacer algo más y estaba en la extensión de Target que tiene el problema, borré el script en "[CP * Embed Pods Frameworks" después de esto ¡Funciona correctamente!
A. Trejo
122

La única solución que me funcionó fue agregar este script de ejecución al objetivo de la extensión de la aplicación:

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

ingrese la descripción de la imagen aquí Fuente: https://github.com/CocoaPods/CocoaPods/issues/4203

romano
fuente
77
Mi aplicación no usa Swift, así que esta fue la única solución que también funcionó para mí.
Dan Loughney
66
Vale la pena mencionar que esto solo necesita agregarse a la extensión, no el objetivo principal.
theDuncs
3
De hecho, esto resuelve el problema, pero da otro problema que es que no puedo ejecutar mi aplicación en el simulador ni en mi dispositivo. Da un error: ¿ dyld: Library not loaded: ... Image not foundAlguien puede ayudarme?
Subkhan Sarif
44
¿Soy solo yo o es este tipo de locura?
bkbeachlabs
1
Se corrigió al validar .ipa pero se bloqueaba al instalar con mensaje de error: dyld: Biblioteca no cargada: @ rpath / AFNetworking.framework / AFNetworking Referenciada desde: / var / container / Bundle / Application / .... Motivo: imagen no encontrada
Aleem
45

Entonces, 3 pasos para arreglar esto desde la configuración de compilación

  1. Aplicación de contenedor: Embedded Content Contains Swift Code: YES
  2. Extensión: Embedded Content Contains Swift Code: NO
  3. Extensión: ruta de búsqueda Runpath = @executable_path/../../Frameworks
Vincent Song
fuente
2
Contenedor vs Extensión, soy nuevo en Xcode. donde es eso, son vainas de cacao de extensión? o donde se encuentran estas dos cosas?
Serge Pedroza
16

En mi caso, acabo de actualizar a CocoaPods 1.0.1 y esto parece ser un nuevo error.

La actualización de Pod agrega un script de ejecución al objetivo de mi Extensión que crea la carpeta Frameworks. Lo encontré cuando estaba a punto de agregar el script de ejecución de @ Roman para eliminarlo.

La solución fue eliminar este script de la fase de compilación de mi extensión. Aquí está el que tenía que ir ...

ingrese la descripción de la imagen aquí

Dan Loughney
fuente
77
¡Lo resolvió por mí! Una vez más, es CocoaPods que me cuesta más de una hora tratar de descubrir qué está mal. Tengo una relación seria de amor y odio con ese producto.
fguchelaar
2
Actualizar Cocoapods para 1.1.0.rc.2resolver el problema para mí.
Otávio
1
¡Eliminar los marcos de incrustación de pods en las fases de compilación de la extensión del teclado funcionó para mí! Estoy usando Xcode 8 y CocoaPods v1.0.1. ¡Gracias!
Storm Factory
13

Elimine cada fase de construcción de su extensión que tenga una embedpalabra en su título.

Adicionalmente:

  • El contenido incrustado que contiene el código Swift debe configurarse Yespara el objetivo de extensión.
Bartłomiej Semańczyk
fuente
11

Ninguna de las respuestas anteriores funcionó para mí. Esto se debió a que el error no fue causado por la aplicación principal o su extensión. Más bien una de las bibliotecas vinculadas tenía la culpa.

Para confirmar, primero archiva con Xcode y luego con Organizer, selecciona la entrada y localiza usando Show in Finder. Esto mostrará el .xcarchivearchivo.

Seleccione ese archivo y elija "Mostrar contenido del paquete".

Seleccione el archivo .app en la carpeta Productos / Aplicaciones y vuelva a elegir "Mostrar contenido del paquete".

Localice el módulo infractor en la carpeta Frameworks. Por ejemplo si el error es:

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

Luego, en lo Frameworks/MyLib.frameworksiguiente, probablemente será 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

Estos están presentes porque la biblioteca vinculada - o módulo - que incluye la aplicación principal tiene el EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Localice el módulo dependiente en Xcode y actualice la bandera:

ingrese la descripción de la imagen aquí

Tenga en cuenta que una vez superado este problema, la aplicación aún puede ser rechazada con un correo electrónico explicativo de la tienda iTunes Store:

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

De nuevo, esto vuelve a la EMBEDDED_CONTENT_CONTAINS_SWIFTbandera. Asegúrese de que solo la aplicación principal tenga esto configurado en YES. Tanto la aplicación como la extensión WatchKit deben tener este indicador configurado en NO. Esto es como se detalla en la respuesta de @ Mike arriba.

Max MacLeod
fuente
10

En mi caso, había una biblioteca CocoaPod "Blockly" que especificaba Sí para "Bibliotecas estándar Swift siempre integradas". Después de hacer NO para la opción, funcionó.ingrese la descripción de la imagen aquí

suztomo
fuente
9

En mi caso, la solución fue eliminar mi marco de trabajo de los binarios integrados de mi extensión y agregarlo a las bibliotecas y los marcos vinculados de mi extensión. (Ambos se pueden encontrar en la pestaña General de la extensión).

Pim
fuente
7

Si el script Embed Pods Frameworks y el script de Roman existen en el mismo objetivo

Compruebe si el marco de incrustación de pods se ubica antes que el otro. Si no, simplemente mueve el guión de Roman al último.

Reeonce Zeng
fuente
eres increíble @Reeonce Zeng, ¡salva mi día!
mgyky
¿Debo mantener los dos guiones allí o solo la última 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 [[-d "Frameworks"] [ ]; entonces rm -fr Frameworks fi
@stack, debe agregar una nueva fase de secuencia de comandos de ejecución y completarla con: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; entonces rm -fr Frameworks fi `
Reeonce Zeng
¿Qué quieres decir con ejecutar nuevo script? Ya tenemos un guión allí. De acuerdo ? reemplazando el script anterior, ¿debería ejecutar una vez que el proyecto reemplazara su texto? ¿Necesito seleccionar la opción "ejecutar script al instalar el programa" allí?
por favor, ayúdame un poco más. Recibí el error de la extensión wathckit. En mi proyecto de extensión de watchkit, no hay una opción / menú / pestaña "arreglar que el apéndice contiene no permitido ..." en mis proyectos. Donde puedo encontrarlo ? Solo tengo "Incrustar marco de pods" y "Copiar marco de pods". Por favor ayuda.
6

No pude encontrar ninguna configuración para Embedded Content Contains Swift Codepero pude encontrar una configuración Always Embed Swift Standard Librariesy establecer esto en NO para mi marco solucionó este problema.

Gujamin
fuente
4
  1. Aplicación de contenedor: Configuración de compilación -> Contenido incrustado contiene código Swift:
  2. Extensión: Configuración de compilación -> El contenido incrustado contiene un código rápido: NO
  3. Extensión: Fase de compilación -> agregó el siguiente script de ejecución en

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

  1. (importante) Extensión: Fase de construcción -> mover el script de ejecución al último (después del script de incrustar marcos de pods)
Yongxiang Ruan
fuente
"Hasta el último" fue la pieza importante para mí, gracias.
Andy Obusek
3

Si está utilizando CocoaPods, consideraría eliminar la fase de compilación de marcos de incrustación en el objetivo problemático (la extensión), esto solucionó el problema para mí.

Kurt J
fuente
2

Recibía el mismo error, y es porque estaba copiando el marco en el paquete de extensión. Como resultado, los marcos que utiliza la extensión deben copiarse en el paquete de la aplicación principal y solo vincularse en la configuración de compilación de la extensión (no copiada). Asegúrese de tener la ruta de búsqueda '@executable_path /../../ Frameworks' en la compilación de la extensión. Creo que esa ruta fue agregada automáticamente por XCode 10.

Zatman
fuente
1

Encontré muchas preguntas como esta y ninguna me ayudó a solucionar mi problema, así que espero que esto pueda ayudar a alguien.

Estoy creando una aplicación que tiene una extensión Intent (para los accesos directos de Siri) y estoy usando un marco para el código compartido entre la extensión y mi aplicación, según lo recomendado por Apple.

Había agregado mi marco a mi extensión en la sección "Marcos y bibliotecas" de la configuración "General" para el objetivo. Cuando agrega un marco aquí, hay dos columnas. Uno dice el nombre del marco y el otro se titula "Incrustar". No aparecía nada en la columna "Insertar", así que pensé que estaba bien, pero tuve que elegir explícitamente una opción "No insertar" para esa columna para mi marco. Cuando hice eso y archivé en Xcode, pude ver durante la validación que el marco ya no figuraba en mi contenido de ipa debajo de cada objetivo, sino solo una vez, y la validación tuvo éxito finalmente.

Belle B. Cooper
fuente
0

Tuve este problema la primera vez con XCode 7.1.1 para mi aplicación que tiene una extensión Today (no hay Swift en mi proyecto). El script ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) no funcionó para mí.

La degradación de cocoapods a la versión 0.39.0.beta.3, la ejecución pod instally el re-archivo resolvieron el problema.

andreacipriani
fuente
0

Estaba recibiendo este mismo error, junto con un

Error de paquetes anidados no permitidos

Mi problema fue SquareReaderSDK.frameworkespecíficamente, pero tuve que agregar un nuevo script de ejecución según sus instrucciones:

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

Ninguna de las configuraciones de compilación enumeradas aquí resolvió este problema por mí. Sin embargo, conseguí que esto funcionara después de mover algunos marcos de "Binarios incrustados" a "Marcos y bibliotecas vinculadas".

Parece que mi aplicación principal y uno de mis marcos personalizados tenían la misma dependencia de marco en ambos y eso parece ser un No No, pero moverlo en mi aplicación principal desde el área Incrustada al área Vinculada me permitió cargar la aplicación con éxito con sin errores.

Travis M.
fuente