Problemas de dependencies de extensión iOS 8. Importar un file de proyecto al controller de vista de extensión

Estoy trabajando en la extensión de iOS 8. Leí muchos manuales y todos muestran simplemente qué tan simple añadir extensión a su aplicación, y parece que eso es suficiente.

Pero aquí hay muchas trampas:

  1. Después de agregar su extensión necesitará importar algunas de sus classs para ver el controller que se crearon cuando agregó un nuevo objective de extensión. El gran uso aquí que necesitarás agregarlos a todos y si tienes un proyecto enorme no es una tarea simple. La solución puede ser seleccionar un objective de extensión, luego en Fases de compilation -> Orígenes de compilation, presione el button más y agregue todos los files .m a su destino usando la tecla directa CMD + A.

  2. Después de agregar todos los files, puede ver que algunos de los methods no funcionan, y puede ver este error: 'shanetworkingApplication' is unavailable: not available on iOS (App Extension) por lo que la solución puede ser una macros que comtestingn ifndef Extension luego podemos invocar código shanetworkingApplication

  3. #import <Foundation/Foundation.h> vs #import <UIKit/UIKit.h> . Así que no me he dado count con este problema, pero cuando reemplacé la Foundation con UIKit me funciona y todos los problemas relacionados desaparecen.

  4. CocoaPods. Todos nosotros estamos usando CocoaPods así que si tu extensión necesita usar alguna parte del código de tu proyecto y ese código usa la biblioteca CocoaPods, entonces necesitas agregar link_with 'ProjectTarged', 'ExtensionTarget' al file Pod y hacer que la pod install vuelva a pod install para vincular tus bibliotecas con nuevo objective de extensión.

Entonces, este es un punto principal con el que me enfrenté. Tal vez alguien pueda sugerir cómo resolver ese problema, como dije, acabo de importar un file necesario al controller de vista de extensión. El file importado contiene algunas bibliotecas como AFNetworking , RestKit y otras classs anidadas del proyecto principal. Necesito esta class para invocar algunos methods con pasar datos de la extensión a mi server de respaldo. Entonces, un file, pero muchos problemas.

puede usar esto en su Podfile para evitar "Requerir solo la API de Extensión-Apertura de aplicaciones". Solo póngalo al final de su Podfile.

 post_install do |installer_representation| installer_representation.project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'NO' end end end 

1) Solo necesita agregar files al objective de extensión que realmente quiere usar. Recomendaría solo tirar de lo que necesita al encontrar los files y en el Inspector de files, agregándolos a ambos objectives.

2) Sí, eso es correcto. Deberá actualizar las bibliotecas que comtestingn eso por usted o bifurcarlas y corregirlas usted mismo.

3) Creo que te estás refiriendo a las templates pnetworkingeterminadas al crear una de las extensiones de la aplicación. Sí, necesitas usar UIKit no Foundation. Foundation funcionará para iOS o OS X, pero claramente no es suficiente si estás haciendo una aplicación UIKit.

4) El command link_with hará que todos los pods en su enlace Podfile a todos los objectives enumerados. Si eso es lo que necesitas, entonces, bien, haz eso. Si solo necesita un pequeño subset de pods para su extensión, use lo siguiente:

 target 'whateverTarget', :exclusive => true do pod 'SomePod' end 

Para eliminar el problema de la aplicación compartida de las Bibliotecas CocoaPods, solo necesita cambiar las Opciones de compilation dentro de la Configuración de compilation para su pod.

Simplemente escriba para search Require Only App-Extension-Safe API y luego cambie el valor a NO ya que está en la image a continuación:

introduzca la descripción de la imagen aquí

Posiblemente deba hacer esto para cada uno de sus pods.