在原始iOS App和App Extension之间共享代码

时间:2015-03-01 18:19:59

标签: ios xcode ios-app-extension ios8-extension

在iOS应用和扩展应用之间共享课程

我想在我的应用和扩展应用中使用自定义类。如果我只是在主应用程序文件夹中有该类,则扩展程序不会接收它。我尝试制作它的副本并将其放入扩展文件夹,但我当然得到invalid redeclaration of [my class]错误。对此最好的解决方案是什么?它只是一个类,而不是多个资源。

4 个答案:

答案 0 :(得分:41)

不应复制任何内容。只需添加所需文件即可编译扩展程序的源代码:

enter image description here

答案 1 :(得分:20)

只需确保您要分享的文件在目标会员部分中打勾。

选择您的文件,打开右侧的实用工具面板,勾选目标会员下的相应目标。

enter image description here

答案 2 :(得分:3)

嵌入式框架是在应用程序和扩展程序之间重用代码的好方法。将一些代码移动到嵌入式框架将为我们提供一个很好的机会来编写一些单元测试。

请参阅使用嵌入式框架共享代码部分 https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1

答案 3 :(得分:0)

应用扩展(小工具,今日)

App Extension - 来自 iOS v8 - 是一个 packaged bundle,它使用与 Containing App 不同的进程并且可以与 Host App 通信。它具有 .appex 文件扩展名,位于 PlugIns 文件夹中。类似于 CXTests[About]

应用打包包

SpeedWidgetExtension.appex - 应用扩展打包包

  • 共享数据 - 使用 App Group[About]
  • 分享代码
    • Target Membership - 最简单的方法或适用于 iOS v8 之前的方法,它允许您将文件添加到每个目标中。它增加了包的占用空间,因为每个目标都会复制此文件

    • Framework - 用于分组/重用代码的模块

      • Embedded framework 又名 Dynamic framework - 共享公共代码库的最合适方式。请注意,要使用 Embedded framework,您应该只将其嵌入到 Containing App 中(并且不要将此框架添加到 App Extension 中。如果您包括框架和 { {1}} 它将在 App Extension 包中具有相同的框架 - 框架将被复制)。这是可能的,因为App Extension[About]
      @prath
      • //App Extension LD_RUNPATH_SEARCH_PATHS = @executable_path/../../Frameworks //It means that App Extension can uses Dynamic framework from Containing app - 将代码链接到可执行二进制文件。您只能为 Static Framework
      • 链接库

[iOS extensions]
[Vocabulary]