swift ios8 cocoapods ios-app-extension xcode6-beta6

swift - Usa Cocoapods con una extensión de aplicación



ios8 ios-app-extension (4)

Intento crear una extensión de aplicación fotográfica en Xcode 6 Beta-6 que usa bibliotecas de cocoapods. El encabezado de puente que crea Xcode para la extensión de la foto no puede ver nada de cocoapods.

Por ejemplo: #import <GPUImage/GPUImage.h> da como resultado el "GPUImage/GPUImage.h" file not found error "GPUImage/GPUImage.h" file not found .

He intentado todos los caminos posibles para la importación (con corchetes y comillas) y casi no he tenido éxito. La excepción es que para los pods simples como SVProgressHUD , el siguiente feo y terrible truco funciona: #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h" .

Pero para GPUImage, entra en el encabezado GPUImage.h y decide que de repente no puede ver GPUImageContext.h pesar de no tener ningún problema cuando se importa con el encabezado puente para el código rápido normal que no es parte de la extensión de la aplicación.

¿Qué tiene de diferente la compilación de extensiones de aplicación que impide que el encabezado de puente se comporte correctamente?

Nota: He leído todas las permuciones posibles de este tutorial y no es inmediatamente aplicable, en caso de que alguien crea que encontró la respuesta allí.

Además, el problema descrito en esta pregunta SO puede estar relacionado, pero hice esta pregunta de todos modos en caso de que mi problema sea específico de las extensiones de la aplicación.


La forma correcta de hacerlo es actualizar su archivo pod para agregar solo 1 línea:

link_with ''yourApp'', ''yourAppExtension''

y una actualización de pods debería resolver el problema.


Las respuestas anteriores funcionarán, pero solo quería un par de pods en mi extensión, así que hice lo siguiente con mi Podfile:

target ''[Main App Target Name]'' do pod ... pod ... pod ... end target ''[Extension Target Name]'' do pod ... end

¡Y luego una pod install lo hará!


link_with, no lo usarás más.

Archivo Podfile inválido: [!] La especificación de link_with en el Podfile ahora no es compatible, por favor use bloques de destino en su lugar.

A continuación se muestra el answe perfecto, probado también.

source ''https://github.com/CocoaPods/Specs.git'' platform :ios, ‘9.0’ use_frameworks! inhibit_all_warnings! target ''DemoTodayWidget'' do pod ''Reachability'', ''~> 3.2'' end target ''My Widget'' do pod ''Reachability'', ''~> 3.2'' end


EDITAR (10/03/2015)

Ver nueva respuesta aceptada. Lo intenté en un nuevo proyecto y funcionó, aunque mis pods de prueba usaron sharedApplication, que no está permitido en las extensiones. El hecho de que mostraron esos errores significa que está vinculado correctamente. ¡Bien hecho @LeChatNoir!

Éxito.

La solución es la siguiente: una vez que tengas tu extensión de aplicación y esté puenteando un encabezado en un proyecto usando cocoapods y quieras usar una de esas librerías de cocoapods, tratar de incluir el pod como #import <GPUImage/GPUImage.h> fallará con file not found .

Primero, asegúrese de decirle a la extensión de la aplicación (haga clic en su archivo de proyecto, luego en el destino de la extensión) para vincularlo con libPods.a , al igual que el objetivo de su aplicación.

Luego, en su proyecto real (haga clic en su archivo de proyecto, luego en el archivo de proyecto nuevamente en la sección "Proyecto" de la barra lateral interior) debajo de la pestaña Información, configure la configuración de la extensión Debug, Release e Inhouse para usar la configuración "Pods" del menú desplegable. La instalación de la cápsula no hará esto por usted, por lo que deberá hacerlo usted mismo.

Por último, asegúrese de que tanto los objetivos del proyecto Pods como los objetivos de su proyecto tengan todas las arquitecturas que necesita construir en la variable Arquitecturas válidas o obtendrá el siempre divertido error de símbolos indefinidos.

Esto debería funcionar y te permitirá importar los pods de tu elección como es normal.

EDITAR (14/10/2014): Como un lado, dado que también puede incluir archivos Objective-C dentro de su propio código de proyecto en la extensión Swift, debe asegurarse de que cualquier archivo .m que ponga en el encabezado de puente sea también compilado por el objetivo de extensión. Puede hacer esto desde el menú de fuentes de compilación para el destino o en el archivo .m usando la sección "Membresía de destino" de la barra lateral derecha en Xcode.