Swift 依赖于 Swift 包的嵌入式框架

Swift Embedded Framework That Depends on Swift Package

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

根据 Apple 的建议,应用程序和扩展程序 共享 的代码收集在 "core" cocoa 中应用程序中嵌入的框架,应用程序和扩展程序都链接到该框架。

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

到目前为止,还不错。


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

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


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

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

问题

当我构建 shared/embedded Framework 目标时,没有任何问题。

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

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

结果:

Could not build Objective-C module 'MyFramework'

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

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

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

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

这可能是因为 "Swift Packages" 变成了 "Swift",但对我来说仍然像是一个错误。