【问题标题】:Swift Embedded Framework That Depends on Swift Package依赖于 Swift 包的 Swift 嵌入式框架
【发布时间】:2020-06-10 22:39:11
【问题描述】:

我的 iOS 应用遵循“照片扩展”模板: - 一个独立的“容器”应用程序 - 照片编辑扩展,通过将其嵌入到上面的应用程序中进行部署。

根据 Apple 的建议,应用程序和扩展程序共享的代码被收集在嵌入应用程序的“核心”cocoa 框架中,并且应用程序和扩展程序都链接到它。

所以我的 Xcode 项目包含 三个目标

  • 框架目标,
  • Photo Editing Extension 目标,链接到框架但不嵌入框架,并且
  • App 目标,嵌入 Extension 二进制文件和 Framework 二进制文件,并链接到两者。

到目前为止,一切顺利。


此外,框架、应用程序和扩展依赖于我在 Github 上的两个库 MyLibraryAMyLibraryB(反过来,MyLibraryA 取决于 MyLibraryB)。

我最初使用 Carthage 设置了对 MyLibraryAMyLibraryB 的依赖,一切正常


然后,我决定将我的库 A 和 B 迁移到 Swift Packages。

我删除了项目和目标、框架搜索路径等中的所有 Carthage 相关设置,以确保引用我的库的 Swift Package 版本,而不是缓存的 Carthage 构建。我还删除了 Carthage 目录(结帐构建)。

问题

当我构建共享/嵌入式 Framework 目标时,没有任何问题。

但是当我尝试构建 AppApp Extension 目标时,我收到指向共享框架 Swift 标头 (MyFramewor-Swift.h) 的错误:

// ...
@import CoreGraphics;
@import CoreImage;
@import Foundation;
@import PhotosUI;
@import UIKit;
@import MyLibraryA;  <-- Module 'MyLibraryA' Not Found
// ...

结果:

无法构建 Objective-C 模块“MyFramework”

我知道作为二进制文件分发的框架不能依赖于 Swift 包,但是这个嵌入式框架是在本地编译源代码然后嵌入

也许我可以对 Xcode 上的设置进行一些更改以使其正常工作?

我尝试在框架目标的构建设置中将Enable Modules (C and Objective-C)更改为No,但无济于事。

【问题讨论】:

    标签: ios-app-extension ios-frameworks swift-package-manager


    【解决方案1】:

    您目前可以在需要 Swift 包依赖项的模块的构建设置中将 Install Objective-C Compatibility Header 设置为 No

    这可能是因为“Swift Packages”是“Swift”,但对我来说仍然是一个错误。

    【讨论】:

    • 谢谢,我一到办公桌就试试。
    猜你喜欢
    • 2015-05-21
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    相关资源
    最近更新 更多