在iOS应用和扩展应用之间共享类我想在我的应用程序和扩展应用程序中使用自定义类。如果我只是在主应用程序文件夹中拥有该类,扩展程序无法识别它。我尝试复制它并将其放入扩展程序文件夹,但我当然会得到invalid redeclaration of [my class]错误。对此最好的解决方案是什么?它只是一个类,而不是多个资源。
invalid redeclaration of [my class]
72qzrwbm1#
不应该复制任何内容。只需添加所需的文件来编译扩展的源代码:
的数据
eufgjt7s2#
只需确保您想要共享的文件在目标成员资格部分打勾。选择您的文件,打开右侧的工具面板,在目标成员资格下勾选相应的目标。
whhtz7ly3#
嵌入式框架是在应用程序和扩展之间重用代码的好方法。将一些代码迁移到嵌入式框架将为我们提供一个很好的机会来编写一些单元测试。请参阅 * 使用嵌入式框架共享代码 * 一节https:developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1
6jygbczu4#
应用程序扩展(例如Widget又名今天,照片编辑...)
Containing App
Host App
App Extension
例如,系统照片应用程序可以是Host App的照片Editing Extension像Photoshop扩展,这是Photoshop应用程序的一部分(Containing App)App Extension-可从iOS v8 -它是一个packaged bundle,使用不同的进程比Containing App,可以通过应用程序组与Containing App和Host App通过IPC通信。它具有.appex文件扩展名,位于PlugIns文件夹。类似于CXTests About(https://stackoverflow.com/a/65278474/4770877)应用程序打包包x1c 0d1x的数据SpeedWidgetExtension.appex -应用程序扩展打包包
Editing Extension
packaged bundle
.appex
PlugIns
的App Extension和Containing App的通信
App Group
Target Membership
Framework
Embedded framework
Dynamic framework
APPLICATION_EXTENSION_API_ONLY
@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 Extension Widget(Today) gray background(https://stackoverflow.com/a/77468566/4770877)的iOS extensions(https://stackoverflow.com/a/66554074/4770877)的iOS App Group(https://stackoverflow.com/a/66457382/4770877)Vocabulary(https://stackoverflow.com/a/59216151/4770877)
4条答案
按热度按时间72qzrwbm1#
不应该复制任何内容。只需添加所需的文件来编译扩展的源代码:
的数据
eufgjt7s2#
只需确保您想要共享的文件在目标成员资格部分打勾。
选择您的文件,打开右侧的工具面板,在目标成员资格下勾选相应的目标。
的数据
whhtz7ly3#
嵌入式框架是在应用程序和扩展之间重用代码的好方法。将一些代码迁移到嵌入式框架将为我们提供一个很好的机会来编写一些单元测试。
请参阅 * 使用嵌入式框架共享代码 * 一节https:developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1
6jygbczu4#
应用程序扩展(例如Widget又名今天,照片编辑...)
Containing App
-包含扩展或超级应用的应用Host App
-调用App Extension
并启动扩展生命周期的应用程序例如,系统照片应用程序可以是
Host App
的照片Editing Extension
像Photoshop扩展,这是Photoshop应用程序的一部分(Containing App
)App Extension
-可从iOS v8 -它是一个packaged bundle
,使用不同的进程比Containing App
,可以通过应用程序组与Containing App
和Host App
通过IPC通信。它具有.appex
文件扩展名,位于PlugIns
文件夹。类似于CXTests About(https://stackoverflow.com/a/65278474/4770877)应用程序打包包
x1c 0d1x的数据
SpeedWidgetExtension.appex -应用程序扩展打包包
的
App Extension
和Containing App
的通信App Group
About(https://stackoverflow.com/a/66457382/4770877)Target Membership
-最简单的方法或用于iOS v8之前的版本,允许您将文件添加到每个目标中。它增加了包的占用空间,因为此文件将为每个目标复制Framework
-用于分组/重用代码的模块Embedded framework
又名Dynamic framework
-共享公共代码库的最合适的方式。请为框架打开APPLICATION_EXTENSION_API_ONLY
About(https://stackoverflow.com/a/66510113/4770877)。请注意,要使用Embedded framework
,您应该仅将其嵌入Containing App
中(并且不要在App Extension
中添加此框架。如果您将此框架附加到App Extension
中,则App Extension
捆绑包中将具有相同的框架(除了Containing App
)-由于@prath
About(https://stackoverflow.com/a/59216681/4770877)的存在,可以对Containing App
和App Extension
使用单个框架字符串
Static Framework
-将代码链接到可执行的二进制文件。您只能链接Containing App
的库局限性:
iOS Extension Widget(Today) gray background(https://stackoverflow.com/a/77468566/4770877)的
iOS extensions(https://stackoverflow.com/a/66554074/4770877)的
iOS App Group(https://stackoverflow.com/a/66457382/4770877)
Vocabulary(https://stackoverflow.com/a/59216151/4770877)