6

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

但是这里有很多陷阱:

  1. 添加扩展后,您需要将一些类导入到添加新扩展目标时创建的视图控制器。您需要将所有这些都添加到这里的大用途,如果您有大型项目,这不是一项简单的任务。解决方案可以选择扩展目标,然后在 Build Phases -> Compile Sources 按加号按钮并使用热键 CMD+A 将所有 .m 文件添加到您的目标。

  2. 添加所有文件后,您会看到某些方法不起作用,并且您会看到此错误: 'sharedApplication' is unavailable: not available on iOS (App Extension)因此解决方案可以是检查的宏,ifndef Extension然后我们可以调用sharedApplication代码。

  3. #import <Foundation/Foundation.h>#import <UIKit/UIKit.h>。所以我还没有弄清楚这个问题,但是当我用它替换Foundation它时,它对我UIKit有用,所有相关问题都消失了。

  4. 可可豆荚。我们所有人都在使用 CocoaPods,所以如果您的扩展需要使用项目代码的某些部分并且该代码使用 CocoaPods 库,那么您需要添加link_with 'ProjectTarged', 'ExtensionTarget'到 Pod 文件并pod install再次 make 以将您的库与新的扩展目标绑定。

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

4

3 回答 3

5

您可以在 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
于 2015-05-19T11:33:55.640 回答
2

1)您只需将文件添加到您实际打算使用的扩展目标。我建议仅通过查找文件并在文件检查器中提取您需要的内容,将它们添加到两个目标中。

2) 是的,没错。您需要更新为您检查的库或分叉它们并自己修复它们。

3) 我认为您在创建其中一个应用程序扩展时指的是默认模板。是的,你需要使用 UIKit 而不是 Foundation。Foundation 适用于 iOS 或 OS X,但如果您正在制作 UIKit 应用程序,显然还不够。

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

target 'whateverTarget', :exclusive => true do
    pod 'SomePod'
end
于 2015-04-27T20:09:17.293 回答
2

要从 CocoaPods 库中删除sharedApplication问题,您只需在构建设置中为您的 pod更改构建选项。

只需键入进行搜索Require Only App-Extension-Safe API,然后将值更改NO为如下图所示:

在此处输入图像描述

可能您需要为每个 pod 执行此操作。

于 2015-05-02T08:46:35.340 回答