iOS 8扩展依赖项问题。将一个项目文件导入扩展名视图控制器

iOS 8扩展依赖项问题。将一个项目文件导入扩展名视图控制器,ios,ios8,cocoapods,ios8-extension,ios8-share-extension,Ios,Ios8,Cocoapods,Ios8 Extension,Ios8 Share Extension,我正在进行iOS 8扩展。我读了很多手册,它们都只是向你展示了在你的应用程序中添加扩展是多么简单,似乎这就足够了 但这里有许多陷阱: 添加扩展后,需要将一些类导入到视图控制器中,这些类是在添加新扩展目标时创建的。这里的主要用途是,你需要添加所有它们,如果你有一个庞大的项目,这不是一个简单的任务。解决方案可以选择扩展目标,然后在构建阶段->编译源代码,按加号按钮,使用热键CMD+A将所有.m文件添加到目标中 添加所有文件后,您可以看到某些方法无法工作,并且您可以看到此错误:“sharedAppli

我正在进行iOS 8扩展。我读了很多手册,它们都只是向你展示了在你的应用程序中添加扩展是多么简单,似乎这就足够了

但这里有许多陷阱:

添加扩展后,需要将一些类导入到视图控制器中,这些类是在添加新扩展目标时创建的。这里的主要用途是,你需要添加所有它们,如果你有一个庞大的项目,这不是一个简单的任务。解决方案可以选择扩展目标,然后在构建阶段->编译源代码,按加号按钮,使用热键CMD+A将所有.m文件添加到目标中

添加所有文件后,您可以看到某些方法无法工作,并且您可以看到此错误:“sharedApplication”不可用:在iOS应用程序扩展上不可用,因此解决方案可以是检查ifndef扩展的宏,然后我们可以调用sharedApplication代码

导入vs导入。所以我还没有解决这个问题,但是当我用UIKIT替换基金会时,它对我起作用,所有相关的问题都消失了。 椰子荚。我们所有人都在使用CocoaPods,因此如果您的扩展需要使用项目代码的某些部分,并且该代码使用CocoaPods库,那么您需要向Pod文件添加带有“ProjectTargeted”、“ExtensionTarget”的链接,并再次安装Pod,以将库与新的扩展目标绑定。
这是我面临的一个主要问题。也许有人可以建议如何解决这个问题,正如我所说的,我只需要将一个所需的文件导入到extension view controller。导入的文件包含一些库,如AFNetworking、RestKit和主项目中的其他嵌套类。我需要这个类调用几个方法,将数据从扩展传递到后端服务器。因此,一个文件有很多问题。

1您只需要将文件添加到实际要使用的扩展目标中。我建议只通过在文件检查器中查找文件并将它们添加到两个目标中来完成所需的工作

2是的,没错。您需要更新那些为您检查的库,或者亲自修复它们

3我认为您在创建一个应用程序扩展时引用的是默认模板。是的,你需要使用UIKIT而不是基金会。基金会将为iOS或OS X工作,但如果你正在制作一个UIKIT应用程序,显然是不够的。 4 link_with命令将使Podfile中的所有pod链接到列出的所有目标。如果这是你需要的,那么,好吧,就这么做。如果您的扩展只需要一小部分POD,请使用以下方法:

target 'whateverTarget', :exclusive => true do
    pod 'SomePod'
end
要从CocoaPods库中删除sharedApplication问题,您只需在您的pod的构建设置中更改构建选项

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


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

您可以在pod文件中使用此操作,以防止只需要应用程序扩展安全API。把它放在播客文件的末尾

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

你想解决的问题是什么?你列出了一大堆陷阱,但听起来你已经知道该怎么办了。@TomHarrington我想可能在应用程序和扩展程序之间有一些提供者,你根本不需要导入标题,所以如果你的应用程序目标中有一个类可以跟踪扩展程序中的某个事件,例如执行某个操作,除了导入和添加所有文件之外,您只需在两个targetsNote之间使用类似smth的适配器:从更新的Cocoapods版本开始,您需要将项目更改为pods_项目。