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

Nic*_*ari 5 ios-frameworks ios-app-extension swift-package-manager

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

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

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

  • 框架目标
  • 照片编辑扩展目标,链接到框架但不嵌入它,以及
  • App目标,嵌入扩展二进制文件和框架二进制文件,并链接到两者。

到目前为止,一切都很好。


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

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


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

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

问题

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

但是,当我尝试构建应用程序应用程序扩展目标时,我收到一条指向共享框架 Swift 标头 (MyFramewor-Swift.h) 的错误:

// ...
@import CoreGraphics;
@import CoreImage;
@import Foundation;
@import PhotosUI;
@import UIKit;
@import MyLibraryA;  <-- Module 'MyLibraryA' Not Found
// ...
Run Code Online (Sandbox Code Playgroud)

结果是:

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

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

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

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

nik*_*ans 2

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

这可能是由于“Swift Packages”是“Swift”,但对我来说仍然看起来像一个错误。