iOS 应用程序和扩展应用程序之间共享类
我想在我的应用程序和扩展应用程序中使用自定义类。如果我只在主应用程序文件夹中包含该类,则扩展程序不会识别它。我尝试制作它的副本并将其放入扩展文件夹中,但我当然得到了
invalid redeclaration of [my class]
错误。对此最好的解决方案是什么?这只是一个类,而不是多个资源。
不应复制任何内容。只需添加所需的文件来编译扩展的源代码:
只需确保您要共享的文件在目标会员资格部分中打勾即可。
选择您的文件,打开右侧的实用程序面板,然后在目标成员资格下勾选适当的目标。
嵌入式框架是在应用程序和扩展之间重用代码的好方法。将一些代码转移到嵌入式框架将为我们提供一个很好的机会来围绕它编写一些单元测试。
请参阅使用嵌入式框架共享代码部分 https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1
应用程序扩展(例如小部件又名“今日”、照片编辑...)
Containing App
- 包含扩展或超级应用程序的应用程序Host App
- 调用 App Extension
并启动扩展生命周期的应用程序例如,系统照片应用程序可以是
Host App
用于照片 Editing Extension
,就像 Photoshop Extension 一样,它是 Photoshop 应用程序的一部分(Containing App
)
App Extension
- 从 iOS v8 开始可用 - 它是一个 packaged bundle
,它使用与 Containing App
不同的进程,并且可以与 Host App
进行通信。它具有 .appex
文件扩展名,位于 PlugIns
文件夹中。类似于 CXTests[关于]
应用程序打包包
SpeedWidgetExtension.appex - 应用程序扩展打包包
App Group
[关于]Target Membership
- 最简单的方法或适用于 iOS v8 之前的版本,它允许您将文件添加到每个目标中。它增加了包的占用空间,因为该文件将为每个目标复制
Framework
- 用于分组/重用代码的模块
Embedded framework
又名 Dynamic framework
- 共享公共代码库的最合适方式。请注意,要使用 Embedded framework
,您应该仅将其嵌入到 Containing App
中(并且 不要 在 App Extension
中添加此框架。如果您包含框架,对于 App Extension
它将在 App Extension
中具有相同的框架
捆绑包 - 框架将被复制)。这是可能的,因为@prath
[关于]//App Extension
LD_RUNPATH_SEARCH_PATHS = @executable_path/../../Frameworks
//It means that App Extension can uses Dynamic framework from Containing app
Static Framework
- 将代码链接到可执行二进制文件。您只能链接库 Containing App