iOS 8 扩展依赖问题。将一个项目文件导入扩展视图控制器
Posted
技术标签:
【中文标题】iOS 8 扩展依赖问题。将一个项目文件导入扩展视图控制器【英文标题】:iOS 8 extension dependencies issues. Importing one project file to extension view controller 【发布时间】:2015-04-10 01:04:03 【问题描述】:我正在开发 ios 8 扩展。我阅读了许多手册,所有这些都只是展示了如何简单地为您的应用添加扩展,并且似乎已经足够了。
但这里有很多陷阱:
添加扩展后,您需要将一些类导入到添加新扩展目标时创建的视图控制器。您需要将所有这些都添加到这里的大用途,如果您有大型项目,这不是一项简单的任务。解决方案可以选择扩展目标,然后在 Build Phases -> Compile Sources 按加号按钮并使用热键 CMD+A 将所有 .m 文件添加到目标。
添加所有文件后,您可以看到某些方法不起作用,并且您会看到此错误:'sharedApplication' is unavailable: not available on iOS (App Extension)
所以解决方案可以是检查ifndef Extension
的宏,然后我们可以调用sharedApplication
代码.
#import <Foundation/Foundation.h>
与 #import <UIKit/UIKit.h>
。所以我还没有弄清楚这个问题,但是当我用 UIKit
替换 Foundation
时,它对我有用,所有相关问题都消失了。
link_with 'ProjectTarged', 'ExtensionTarget'
添加到 Pod 文件并再次创建 pod install
以将您的库与新的扩展目标绑定.
所以这是我面临的一个要点。也许有人可以建议如何解决这个问题,正如我所说,我只是将一个需要的文件导入到扩展视图控制器。导入的文件包含一些库,如 AFNetworking
、RestKit
和主项目中的其他嵌套类。我需要这个类来调用一些方法,将数据从扩展传递到我的后端服务器。所以一个文件,但有很多问题。
【问题讨论】:
您要解决的问题是什么?你列出了一堆陷阱,但听起来你已经知道如何处理它们了。 @TomHarrington 我预计应用程序和扩展程序之间可能存在一些提供程序,并且您根本不需要导入标头,所以就像您的应用程序目标中有一个可以跟踪某些事件的类扩展名,例如执行一些操作,而不是导入和添加所有文件,您只需在两个目标之间使用类似适配器的 smth 【参考方案1】:您可以在 Podfile 中使用它来防止“仅需要应用程序扩展安全 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
【讨论】:
注意:对于较新的 Cocoapods 版本,您需要将“project”更改为“pods_project”。【参考方案2】:1) 您只需将文件添加到您实际打算使用的扩展目标。我建议仅通过查找文件并在文件检查器中提取您需要的内容,将它们添加到两个目标中。
2) 是的,没错。您需要更新为您检查的库或 fork 并自行修复它们。
3) 我认为您在创建其中一个应用程序扩展时指的是默认模板。是的,你需要使用 UIKit 而不是 Foundation。 Foundation 适用于 iOS 或 OS X,但如果您正在制作 UIKit 应用程序,显然是不够的。
4) link_with 命令将使 Podfile 中的所有 pod 链接到列出的所有目标。如果这就是你所需要的,那么,好吧,那就去做吧。如果您的扩展只需要一小部分 pod,请使用以下内容:
target 'whateverTarget', :exclusive => true do
pod 'SomePod'
end
【讨论】:
【参考方案3】:要从 CocoaPods 库中删除 sharedApplication
问题,您只需在 Build Settings 中为您的 pod 更改 Build Options。
只需键入搜索Require Only App-Extension-Safe API
,然后将值更改为NO
,如下图所示:
您可能需要为每个 pod 执行此操作。
【讨论】:
以上是关于iOS 8 扩展依赖问题。将一个项目文件导入扩展视图控制器的主要内容,如果未能解决你的问题,请参考以下文章