【问题标题】:iOS 8 extension dependencies issues. Importing one project file to extension view controlleriOS 8 扩展依赖问题。将一个项目文件导入扩展视图控制器
【发布时间】:2015-04-10 01:04:03
【问题描述】:

我正在开发 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>。所以我还没有弄清楚这个问题,但是当我用 UIKit 替换 Foundation 时,它对我有用,所有相关问题都消失了。

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

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

【问题讨论】:

  • 您要解决的问题是什么?你列出了一堆陷阱,但听起来你已经知道如何处理它们了。
  • @TomHarrington 我预计应用程序和扩展程序之间可能存在一些提供程序,并且您根本不需要导入标头,所以就像您的应用程序目标中有一个可以跟踪某些事件的类扩展名,例如执行一些操作,而不是导入和添加所有文件,您只需在两个目标之间使用类似适配器的 smth

标签: ios ios8 cocoapods ios8-extension ios8-share-extension


【解决方案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 执行此操作。

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2018-12-18
      • 2016-12-07
      • 2023-04-06
      相关资源
      最近更新 更多