在原始iOS应用程序和应用程序扩展之间共享代码

问题描述 投票:0回答:4

iOS 应用程序和扩展应用程序之间共享类

我想在我的应用程序和扩展应用程序中使用自定义类。如果我只在主应用程序文件夹中包含该类,则扩展程序不会识别它。我尝试制作它的副本并将其放入扩展文件夹中,但我当然得到了

invalid redeclaration of [my class]
错误。对此最好的解决方案是什么?这只是一个类,而不是多个资源。

ios xcode ios-app-extension ios8-extension
4个回答
57
投票

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

enter image description here


30
投票

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

选择您的文件,打开右侧的实用程序面板,然后在目标成员资格下勾选适当的目标。

enter image description here


6
投票

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

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


3
投票

应用程序扩展(例如小部件又名“今日”、照片编辑...)

  • 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
  • Widget 扩展应该在纯 SwiftUI 上编写

[iOS 扩展]
[iOS 应用组]
[词汇]

© www.soinside.com 2019 - 2024. All rights reserved.