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

huwehgph  于 12个月前  发布在  iOS
关注(0)|答案(4)|浏览(140)

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

72qzrwbm

72qzrwbm1#

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


的数据

eufgjt7s

eufgjt7s2#

只需确保您想要共享的文件在目标成员资格部分打勾。
选择您的文件,打开右侧的工具面板,在目标成员资格下勾选相应的目标。


的数据

whhtz7ly

whhtz7ly3#

嵌入式框架是在应用程序和扩展之间重用代码的好方法。将一些代码迁移到嵌入式框架将为我们提供一个很好的机会来编写一些单元测试。
请参阅 * 使用嵌入式框架共享代码 * 一节https:developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1

6jygbczu

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 AppHost App通过IPC通信。它具有.appex文件扩展名,位于PlugIns文件夹。类似于CXTests About(https://stackoverflow.com/a/65278474/4770877)
应用程序打包包
x1c 0d1x的数据
SpeedWidgetExtension.appex -应用程序扩展打包包



App ExtensionContaining App的通信

  • 共享数据-使用App GroupAbout(https://stackoverflow.com/a/66457382/4770877)
  • 共享代码
  • Target Membership-最简单的方法或用于iOS v8之前的版本,允许您将文件添加到每个目标中。它增加了包的占用空间,因为此文件将为每个目标复制
  • Framework-用于分组/重用代码的模块
  • Embedded framework又名Dynamic framework-共享公共代码库的最合适的方式。请为框架打开APPLICATION_EXTENSION_API_ONLYAbout(https://stackoverflow.com/a/66510113/4770877)。请注意,要使用Embedded framework,您应该仅将其嵌入Containing App中(并且不要App Extension中添加此框架。如果您将此框架附加到App Extension中,则App Extension捆绑包中将具有相同的框架(除了Containing App)-由于@prathAbout(https://stackoverflow.com/a/59216681/4770877)的存在,可以对Containing AppApp Extension使用单个框架
//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的库

局限性:

  • Widget扩展UI应该在纯SwiftUI上编写
  • Widget扩展不容易在真实的设备上调试
  • Widget Extension会在可能的时候更新(而不是在您指定它的时候)

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)

相关问题