No se puede generar el archivo de la aplicación iOS en xcode

175

Tengo un problema al generar un archivo de aplicación de iOS desde una aplicación. La aplicación se compila muy bien e incluso funciona en el simulador. Ahora quería hacer algunas pruebas ad hoc y no puedo generar el archivo de aplicaciones de iOS. Cuando hago clic en Producto -> Archivo, se genera un archivo genérico de xcode. Alguien puede ayudarme. Debo mencionar que ya he generado un archivo de aplicaciones iOS de esta aplicación. Se detuvo para generar iOS Archive por alguna razón. Muchas gracias.

Filip Majernik
fuente
77
Aunque la pregunta es sobre la generación de archivos desde xcode, me enfrenté a este problema usando xcodebuild. La solución es especificar el destino:xcodebuild -destination generic/platform=iOS
db42
Gracias @ db42, ¡eso fue todo!
fabb
1
¿Puedes dar más detalles sobre la resolución? ¿Dónde haces el cambio?
jlo-gmail
Si tiene archivos .xcodeproj en Proyecto> Objetivos> Fases de compilación> dependencias de destino, retírelo de allí y luego cree su ipa. Esto funciona para mi. Saludos
Kalpesh Panchasara

Respuestas:

316

Verifique la configuración de compilación:

  1. Saltar instalación es NO para el objetivo principal del proyecto
  2. La instalación de omisión es SÍ para los objetivos del marco (subproyectos)
  3. En Fases de compilación para subproyectos, Copiar encabezados debe estar en Proyecto, no en Público (no se aplica si se construye una biblioteca estática)
  4. El directorio de instalación bajo Implementación es válido (/ Aplicaciones, por ejemplo)
Alex L
fuente
2
Esta es la respuesta más completa que incorpora las respuestas parciales anteriores. Gracias Alex L! Creo que esta debería ser la respuesta elegida para esta pregunta.
Brandon
3
Como meta pregunta, ¿cómo resolviste esto? Parece que confío en Stackoverflow para todas mis preguntas relacionadas con la compilación.
philipkd
44
¡Hermoso! Pensé que esto era un problema con los perfiles de aprovisionamiento, pero funcionó muy bien. El subproyecto era la rama mapbox de route-me / MapView. Copiar encabezados fue clave, como se indica en la publicación a continuación, se puede encontrar en las Fases de compilación del subproyecto.
rcarver
77
# 3 solucionó mi problema, pero también necesitaba mover archivos de privado a proyecto antes de que mi archivo se creara como un archivo de aplicaciones iOS.
Thomas Hajcak
44
Técnicamente, el problema no es que los encabezados sean públicos en Copiar encabezados, es que la Configuración de compilación> Ruta de la carpeta de encabezados públicos está configurada como predeterminada /usr/local/include. Si está creando una biblioteca estática, los encabezados deben ser públicos, por lo que es más correcto si el n. ° 3 es cambiar la ruta de la carpeta de encabezados públicos a algo más sensato include/$(TARGET_NAME). @CopperCash toma nota de esto en una respuesta a continuación.
bcattle
75

Esto puede suceder si ha agregado un marco / biblioteca ... necesita editar el Destino-> Configuración de compilación de esa biblioteca y establecer la configuración 'Omitir instalación' en 'Sí'. Cuando vuelva a archivar, XCode debería comenzar a producir un 'Archivo de aplicaciones iOS' nuevamente en lugar de un 'archivo genérico de xcode'.

delany
fuente
pero "Omitir instalación" no está disponible en xcode 4.4.1, al menos no puedo encontrar el salto intacto en mi xcode
Mashhadi
2
Lo mismo se aplica a los paquetes agregados.
Mark Horgan
62

Además de Saltar instalación a y en caso de que haya abierto otro proyecto lib / framwork dentro de su proyecto de aplicación, debe mover los encabezados (si corresponde) de público a proyecto en la fase de compilación / Copiar encabezados .

fase de construcción de su objetivo lib / framwork

ebtokyo
fuente
3
Estaba a punto de perder la esperanza, ya que Skip Install to Yes no funcionó para mí. Copiar encabezados a Project me sirvió. ¡Gracias!
ksm
10
Para ayudarlo a localizar el subproyecto Xcode defectuoso, puede mostrar el Archivo Xcode genérico en el Finder y explorar el paquete. Dentro del archivo .xcarchive, verá los encabezados defectuosos en Productos / usr / local / include.
MonsieurDart
1
¿Por qué poner algunos archivos para copiar encabezados al público arruinaría esto?
mskw
mskw, supongo que si el artefacto construido contiene uno o más encabezados públicos, no puede convertirse en un archivo de "dispositivo desplegable" (iOS App Archive desde donde se genera un IPA). Sigue siendo un archivo de proyecto Xcode. Gracias
ebtokyo
1
maldita sea, gracias, esto funcionó para mí ... Me pregunto cómo diablos logras encontrar este tipo de soluciones :)
Fabio Napodano
45

Hice lo siguiente para que funcione para mí:

  1. Tenía una biblioteca estática 3,20, usaba cocoapods para incluir los archivos dentro del proyecto principal
  2. siguió la instalación de omisión para todos los demás subproyectos / bibliotecas estáticas y cambió los encabezados de copia de público a proyecto como se indicó anteriormente
  3. Lo más importante: en cada biblioteca que use su proyecto, vaya a las fases de construcción -> Copiar archivos y se aseguró de que el destino cambie de Absolute patha products directory. Nota: vea la sugerencia a continuación para limitar su búsqueda para encontrar la biblioteca que causa este error.

¡y eso fue todo!

pista: para tener una idea de los archivos ofensivos que están causando que su archivo cree un archivo en lugar de una ipa, haga esto:

  1. Seleccione el archivo y haga clic en el botón Distribuir.
  2. Seleccione la opción 'Guardar productos construidos'.
  3. Presiona Siguiente y Guardar.
  4. Explore el directorio creado en Finder.
  5. El subdirectorio 'bibliotecas' identificará las bibliotecas que necesita para configurar Saltar instalación en Sí.
  6. en algunos casos usr/local/includeidentificará los archivos de encabezado culpables que necesita para pasar de Público a Proyecto o los archivos que tiene que cambiar de la ruta absoluta al directorio de productos (o incluso los archivos que olvidó configurar la instalación de omisión para marcar sí). pero ese directorio (es decir, usr / local / include) varía según la estructura de directorios de su sublibrary. En muchos casos ... verá todos los archivos enumerados en Copiar archivos en el paso 3 mencionado anteriormente. Si los encuentra aquí, entonces tiene una respuesta definitiva para la causa de su problema.

actualizar a pista: para hacer la vida aún más simple ... cualquier archivo que aparezca en el paso 4 en la pista anterior ... simplemente búsquelo en la búsqueda global de xcode ... y debería obtener resultados inmediatos para lo que desea ... por ejemplo, este era el contenido de mi carpeta (siguiendo los pasos en la pista anterior):

ingrese la descripción de la imagen aquí

Entonces podría decir que tiene algo que ver con las bibliotecas crypto y ssl ... buscándolas:

ingrese la descripción de la imagen aquí

me hizo darme cuenta de que olvidé configurar skip install en yes.

abbood
fuente
Gran sugerencia! Había cambiado algunos encabezados de marco a 'Privado'; por alguna razón, esto estaba causando que se copiaran ./usr/local/include.
Ben Mosher
1
siempre es un placer poder ayudar a @BenMosher :)
abbood
1
La mejor respuesta que obtuve. Gracias por el consejo, me salvó el día. !
neywen
Definitivamente la respuesta que estaba buscando: guardar productos de compilación me indicó la causa exacta del problema.
Dennis L
Esta respuesta extensa con "Guardar productos construidos" es muy útil : @abbood, muchas gracias a usted. Espero poder devolver el favor algún día.
Scott Corscadden
21

Si exporta el archivo, ábralo y vea /urs/local/includeen Productos, pruebe esta sugerencia :

En cada vaina, bajo Packaging, Private Headers Folder Pathy Public Headers Folder Pathestá ajustado a /usr/local/include. Si los borro, obtengo un archivo válido.

ingrese la descripción de la imagen aquí

Trabajó para mí después de actualizar mi aplicación React Native a 0.11.0, Xcode 7y CocoaPods 0.39.0.beta.4.

Josh Habdas
fuente
1
¡Puedo confirmar que esto funciona! Siempre que recuerde borrar las rutas de encabezado privadas y públicas. También es bastante fácil, si solo selecciona todos los pods, busca la ruta del encabezado y luego los borra todos al mismo tiempo.
Hace el
1
También puedo confirmar que esto funciona, me ahorró mucho tiempo, esto sucedió cuando actualicé mis pods a la versión 0.39.0.beta
Bryan P
Increíble. Trabajó para mí :) Estaba luchando desde 1 día y medio. Gracias, gracias, gracias :) :) :)
Srikanth
Creo que este es el que me funcionó Xcode 7.0 iOS9. No tengo cocoapods, pero esto solucionó el problema. Gracias hombre
Geoff H
Además de esto, tuve que configurar SKIP_INSTALL en Sí en mi extensión y aplicación de WatchKit para que esto funcione.
Snowman
12

Si está utilizando CocoaPods, así como WatchKit o Today Extension, hay un problema abierto en el repositorio de CocoaPods que explica cuál podría ser su problema.

La solución para mí fue eliminar la Copy Pod Resourcesfase de los objetivos de la extensión WatchKit y Today Extension enBuild Phases . El proyecto se compiló y archivó como se esperaba una vez que hice esto.

Espero que esto ayude a alguien, ¡esto me dejó perplejo durante todo un día!

rebello95
fuente
1
@ Lewis42 siempre podría agregar una recompensa;)
rebello95
No veo una opción para, un voto positivo en su comentario tendrá que hacer;)
Lewis
@ Lewis42 tendrías que agregar la recompensa a la pregunta y otorgarla a una respuesta jajaja
rebello95
@ rebello95, eres un tipo genial!
Matt
10

Si alguna de las respuestas anteriores no funciona, su problema probablemente sea con cocoaPods. La última actualización me 0.38.1estropeó las cosas, pero luego bajé 0.37.1y las cosas volvieron a la normalidad. UtilizandoXcode 6.3.1

Edición posterior: actualizar a 0.38.2también solucionará esto. Más información sobre la causa de este problema aquí: Cocoapods 0.38.1 no pudo crear un archivo válido

Ehmad Zubair
fuente
3
Actualicé 0.38.2y aún tengo problemas. ¿Estás en Xcode 7?
Porter Hoskins
@PorterHoskins Acabo de escribir este problema, ya que Xcode 7 NO construirá un archivo válido a partir del mismo proyecto que crea un archivo válido en Xcode 6 . Estoy usando Cocoa Pods 0.38.2, cuando uso Xcode 6 todo está bien, pero con Xcode 7 el archivo no se creó correctamente. ¿Ha verificado la estructura de su carpeta para ver si tiene un archivo .appex fuera de su .app en el paquete?
Oso polar
Tengo un marco en /Library/Frameworks. Creo que puede tener algo que ver con que las vainas de cacao de Google no se construyan como un marco dinámico. Suena similar a github.com/CocoaPods/CocoaPods/issues/3889
Porter Hoskins
3
Me mudé para cada encabezado de pod en Build Phases / Headers a la sección del proyecto desde public y funcionó. De hecho, el problema podría estar en CocoaPods.
Denis Kutlubaev
7

Aunque estoy usando Xcode5 y lo que lo resolvió para mí fue editar el Esquema de compilación, probar todas las sugerencias anteriores que eran aplicables no ayudó en mi caso.

Tenía dos objetivos, por ejemplo, "Aplicación" y "Aplicación GRATUITA". Mis problemas con el archivo genérico ocurrieron cuando intentaba archivar la versión GRATUITA, que agregué después de la versión 'normal' de la aplicación. En mi caso, cuando seleccioné su Esquema en la barra de herramientas y elegí Editar esquema ... Vi que la sección Construir tenía dos objetivos, a saber, Aplicación y Aplicación GRATUITA.

Desmarqué todas las columnas para la aplicación, dejando solo las columnas de la aplicación GRATUITA marcadas, e hice clic en Aceptar. La próxima vez que elegí Producto> Archivo, obtuve mi aplicación GRATIS en lugar de un archivo genérico. :)

Stephen Watson
fuente
7

Si tiene un solo proyecto, tal vez esta solución sería útil. Este problema había ocurrido cuando dupliqué el objetivo. Como resultado, tuve dos objetivos construidos en paralelo. Esto estaba causando el problema. Se creó el archivo genérico IOS.

Para desactivar el paralelo construido, vaya a

  • Administrar esquemas,
  • Editar esquema,
  • Construir,
  • Elimina el otro objetivo.
roman777
fuente
5

Tuve este problema después de actualizar a iOS 9 y Xcode 7. La solución de Josh H funcionó para mí:

En cada pod, en Empaquetado, la Ruta de la carpeta de encabezados privados y la Ruta de la carpeta de encabezados públicos se establece en / usr / local / include. Si los borro, obtengo un archivo válido.

¡También hice un script de instalación posterior para mi Podfile para hacer esto automáticamente!

    post_install do |installer_representation|
        installer_representation.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['PUBLIC_HEADERS_FOLDER_PATH'] = [""];
                config.build_settings['PRIVATE_HEADERS_FOLDER_PATH'] = [""];
            end
        end
    end

Solo agrégalo al final de tu Podfile y ejecuta pod install

julianwyz
fuente
5

Tengo varios proyectos en mi espacio de trabajo (GTL, Pods y mi proyecto principal) y esto es lo que funcionó para mí:

Seleccione el Proyecto, habrá 2 tipos allí, está el Proyecto y están los Objetivos .

Para proyectos que no son sus principales me gusta GTLo PODS:

Proyectos:

Skip Install = NO
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Objetivos:

Skip Install = YES
Installation Directory = /Applications
// For pods
Private Headers Folder Path = ""
Public Headers Folder Path = ""

Para el proyecto principal (que generalmente se denomina igual que el nombre de su producto):

Proyectos:

Skip Install = NO
Installation Directory = /Applications

Objetivos:

Skip Install = NO
Installation Directory = /Applications

Verifique el objetivo de implementación de ios en cada proyecto y objetivo para asegurarse de que todos sean iguales.

Bryan P
fuente
Gracias por explicarlo paso a paso. eso realmente me ayudó a resolver mi problema.
Arslan
4

Tuve este problema En mi caso, fue causado por mantener el objetivo de una aplicación Mac como una dependencia de la aplicación iOS.

La razón por la que se configuró de esta manera fue que la aplicación Mac era una herramienta utilizada para generar algunos datos para la aplicación iOS, que luego se incluyó en el paquete.

Tuve que eliminar esa dependencia y compilar la herramienta por separado antes de hacer una compilación de la aplicación iOS en sí.

Tomás Andrle
fuente
Las bibliotecas como lippd vienen con objetivos ios y osx, olvidé eliminar el objetivo osx ... doh
james_alvarez
4

En mi caso, recibí el "Archivo Genérico" erróneo solo después de que comencé a incluir el código Swift en mi proyecto predominantemente Objective-C. Después de un montón de solución de problemas y examen del archivo que Xcode estaba escupiendo, noté que elSwiftSupport carpeta (con las dylibs requeridas para el tiempo de ejecución de Swift) estaba en un lugar diferente en mi archivo que en un archivo de aplicación de proyecto Swift completamente nuevo. .

Encontré la Installation Directoryconfiguración de compilación y noté que estaba configurada en una ruta personalizada en mi proyecto. Simplemente lo eliminé (configurándolo en su valor genérico de/Applications ) y la siguiente compilación -> Archivo funcionó como se esperaba y me dio un archivo de aplicación de iOS adecuado.

TL; DR: asegúrese de que su Installation Directoryconfiguración de compilación esté establecida en su valor predeterminado /Applicationsal incluir el código Swift en su aplicación, especialmente si está comenzando con un archivo de proyecto anterior que puede tener algunas configuraciones de compilación heredadas inesperadas.

Ryan Dorshorst
fuente
3

Dejando esto aquí para salvar a otros del mismo viaje.

Descubrí que también necesitaba eliminar la misma fase de compilación de Recursos de pod de copia de un objetivo de biblioteca estática en mi espacio de trabajo.

Miguel
fuente
después de probar muchas de las cosas anteriores, esto funcionó para mí (Xcode 7)
humphriesj
2

Además de la respuesta de Alex L.

Punto 3. Cambiar 'Configuración de compilación' -> 'Ruta de carpeta de encabezado público' a 'incluir / xxx' también funciona.

CopperCash
fuente
Esto es más correcto que el # 3 anterior. Sus encabezados deben ser públicos si está creando una biblioteca estática
bcattle
2

Si nada de lo anterior te ayudó ... después de mucho tiempo .......

Eliminé el valor en Info.plist para Bundle Version porque estaba bastante contento con solo Bundle Version Short 1.0.Malo. No hagas esto.

* Tenga en cuenta que en realidad lo hice editándolo en la interfaz de usuario de la derecha sin darme cuenta de que pondría una clave vacía en el archivo Info.plist. Creo que eso lo hace inválido. Mi paquete apareció como otros elementos durante el archivo y no tenía icono, y no pude subirlo a ningún lado.

Esto se reduce a valores no válidos en la lista de información. Si no es un archivo válido, intente descomprimir un archivo antiguo y colocar / sobrescribir el actual y ver si lo arregla al reconstruir el archivo.

ohc192
fuente
1
  1. Vaya a Configuración de compilación y agregue

    yourAppName / Resources / dist.plist a los derechos de firma de código

  2. Presione cmd + B con un dispositivo iOS o un dispositivo real seleccionado como Build Target

  3. Cuando termine -> desplácese a la carpeta "Productos" y haga clic derecho en yourAppName.app

  4. Elija "Mostrar en el buscador"

  5. Cree una carpeta con Name Payload ( mayúscula "P" )

  6. Copie yourAppName en su carpeta de carga útil

  7. Crea un zip desde tu Carpeta de Carga

  8. Cambie el nombre del zip a yourAppName.ipa

HECHO

LoVo
fuente
1

Después de probar casi todo:

  • Limpio, Archivo
  • eliminar DerivedData, Archive
  • reiniciar Xcode (estaba usando XCode7), Archive
  • combinaciones de arriba ...

Entonces me di cuenta de que mi partición de arranque era 'baja en espacio libre en disco' ... aproximadamente 1 GB más o menos. Reinicié, luego obtuve alrededor de 18GB gratis.

Luego abrí Xcode y proyecté, realicé Archive ... y sorprendentemente (después de una hora de intentar construir un Archive) finalmente obtuve un Archive no genérico.

No tengo idea si es un problema de disco libre que lo solucionó o un reinicio de macOS que lo solucionó, pero funcionó para mí.

Peter Li
fuente
0

En mi caso, tuve que mover FMDB y BlocksKit a bibliotecas estáticas. Anteriormente se construyeron como subproyectos. Recuerde que puede usar lipo para crear bibliotecas universales. Al construir los productos finales, el código del simulador se eliminará automáticamente.

Maciej Swic
fuente
0

Otra posible razón para esto es tener referencias en "Dependencias de destino" a proyectos para una plataforma diferente. En mi caso particular, estaba trabajando en un proyecto que comparte código para OSX e iOS. En uno de los objetivos de iOS, accidentalmente agregué un objetivo OSX como dependencia.

miguelSantirso
fuente
0

Para ser minucioso, estoy publicando mi solución.

Experimenté exactamente el mismo problema al intentar construir un archivo de un proyecto iOS en Xcode 5.1.1 (5B1008). Ninguna de las sugerencias anteriores solucionó el problema, y ​​la mayoría de ellas eran irrelevantes (no había agregado ningún Marco, y no tenía ninguna entrada pública en la sección Copiar encabezados de mis fases de compilación).

En mi caso, solucionar el problema consistió en simplemente cerrar mi proyecto, eliminar los archivos que había hecho previamente, ir a Preferencias> Cuentas, eliminar mi cuenta de desarrollador, salir de Xcode, reiniciar, volver a agregar mi cuenta de desarrollador, iniciar el proceso de Archivo de nuevo. Esto solucionó mi problema de inmediato.

Ade Ward
fuente
0

Una solución más, ya que todo lo anterior no funcionó para mí ...

Cambié el User Header Search Paths(supongo Header Search Pathsque funcionaría con la misma elegancia) a "$(BUILT_PRODUCTS_DIR)/BlocksKit".

Antecedentes :

En BlockKit, los desarrolladores han estructurado los encabezados en el proyecto principal de manera diferente a la estructura en la implementación. Por lo tanto, no puede hacer referencia a los encabezados en el proyecto y debe hacer referencia a los encabezados copiados en el directorio de compilación.

Mazyod
fuente
0

La forma en que esto funcionó para mí en (Xcode 5) tenía 2 objetivos y cuando edité el esquema, en el panel izquierdo del editor de esquemas, verá [CREAR, EJECUTAR, PRUEBA, PERFIL XXX.APP, ANALIZAR, ARCHIVAR ] desde el panel BUILD, verá los objetivos de su proyecto en una lista. En el extremo derecho verá las selecciones ARCHIVO, asegúrese de que solo se haya seleccionado un objetivo para archivar.

Tenía 2 de mis objetivos seleccionados en mi proyecto, verifiqué solo el objetivo que quería en el producto, ¡y funcionó!

dexyjones
fuente
0

Resolví este error abriendo únicamente el proyecto de la aplicación en XCode, es decir. no abrir un espacio de trabajo comprende la aplicación y otros proyectos / bibliotecas / marcos.

Teniendo 2 proyectos separados, un marco o biblioteca compartida y una aplicación para iOS, tuve que abrir 2 ventanas XCode diferentes, cada una abriendo directamente el archivo .xcodeproj en lugar del .xcworkspace común , para construir correctamente cada una.

Como un buen efecto secundario, XCode ya no reconstruye todos los objetivos de cada proyecto después de hacer una limpieza , lo que resulta en tiempos de construcción cortos.

Antecedentes: estoy creando un SDK de código abierto y una aplicación de demostración de iOS. Los había abierto en un solo espacio de trabajo. Establecer Skip install en YES en los objetivos del SDK evitaría que cualquiera creara un archivo, ya que estaría vacío, por lo que esta no era una opción. El uso de Project en lugar de encabezados públicos llevaría a un archivo que falta los archivos de encabezado que deberían distribuirse, por lo que tampoco era una opción.

ofavre
fuente
0

Porque era porque estaba trabajando en un espacio de trabajo. El proyecto se archivó pero no se mostrará en la ventana del organizador. Cerré el espacio de trabajo y abrí el proyecto solo. El archivo se ha abierto en el organizador ... espero que sea de ayuda.

Pierre-Yves Guillemet
fuente
0

En mi caso, tenía un script personalizado que copiaba algunos archivos temporales en:

${TARGET_BUILD_DIR}/myTempDir

Eso significaba que, después de investigar el archivo para inspeccionar su contenido, encontré justo al lado del archivo .app una carpeta myTempDir. Una vez que modifiqué el script para guardar en otro lugar, las cosas se ordenaron.

Eli
fuente
0

Intente configurar encabezados $ (PROJECT_NAME) en la ruta de la carpeta de encabezados públicos del proyecto Framework. Debe ir a la configuración de compilación del Destino de la biblioteca y luego editar la ruta de la carpeta de encabezados públicos como encabezados $ (PROJECT_NAME).

Mafia Inco
fuente
0

Si usa Xcode 7 con cocoapods v.0.38.2 . Intenta eliminarlo copy pod resourcesde tu objetivo de extensión actual.

ingrese la descripción de la imagen aquí

CodificadorPug
fuente
0

Encontré este problema después de agregar una herramienta de línea de comandos OS X al proyecto de mi aplicación iOS, y la opción Omitir instalación se configuró en NO de forma predeterminada para el objetivo de la herramienta de línea de comandos. Como obviamente no puede instalar un binario OS X en un dispositivo iOS, el archivo está predeterminado en un archivo Xcode genérico. Establecer Saltar instalación a SÍ para este objetivo solucionó el problema.

Brian Stewart
fuente