iOS 8扩展相关性问题。 将一个项目文件导入到扩展视图控制器

我正在开发iOS 8扩展。 我阅读了许多手册,所有这些手册都只是展示了如何简单地为您的应用程序添加扩展,似乎就够了。

但是这里有很多陷阱:

  1. 添加扩展名后,您将需要导入一些类,以添加新的扩展名目标时创build的视图控制器。 在这里你需要大量使用它们,如果你有巨大的项目,这不是一个简单的任务。 解决scheme可以select扩展目标,然后在构build阶段 – >编译源按加号button,并使用热键CMD + A将所有.m文件添加到您的目标。

  2. 添加所有文件后,你可以看到一些方法不会工作,你可以看到这个错误: 'sharedApplication' is unavailable: not available on iOS (App Extension)所以解决scheme可以是一个macros,检查ifndef Extension然后我们可以调用sharedApplication程序代码。

  3. #import <Foundation/Foundation.h> vs #import <UIKit/UIKit.h> 。 所以我还没有解决这个问题,但是当我用UIKitreplaceFoundation它适用于我和所有相关的问题消失。

  4. 的CocoaPods。 我们所有人都使用CocoaPods,所以如果你的扩展需要使用你的项目代码的一部分,并且代码使用CocoaPods库,那么你需要添加link_with 'ProjectTarged', 'ExtensionTarget'到Pod文件并再次进行pod install来绑定你的库与新的扩展目标。

所以这是我所面对的一个要点。 也许有人可以build议如何解决这个问题,正如我所说,我只是将一个需要的文件导入到扩展视图控制器。 导入的文件包含一些库,如AFNetworkingRestKit和其他来自主项目的嵌套类。 我需要这个类来调用几个方法,将数据从扩展传递到我的后端服务器。 所以一个文件,但很多问题。

你可以在你的Podfile中使用它来防止“仅需要App-Extension-Safe API”。 把它放到你的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)您只需要将文件添加到您实际打算使用的扩展目标。 我build议只通过查找文件并在File Inspector中将其添加到两个目标。

2)是的,这是正确的。 你需要更新库来检查,或者自己修改它们。

3)我想你在创build一个应用程序扩展时指的是默认模板。 是的,你需要使用UIKit而不是基金会。 基金会将为iOS或OS X工作,但如果你正在制作一个UIKit应用程序显然是不够的。

4)link_with命令将使您的Podfile中的所有窗格链接到列出的所有目标。 如果这就是你所需要的,那么很好,那就做吧。 如果您只需要扩展的一小部分,请使用以下命令:

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

要从CocoaPods库中删除sharedApplication问题,您只需在生成设置中为您的窗格更改生成选项即可

只需input以searchRequire Only App-Extension-Safe API ,然后将值更改为NO ,如下图所示:

在这里输入图像说明

显然你需要为你的每个豆荚做这个。