Swift 依赖于 Swift 包的嵌入式框架
Swift Embedded Framework That Depends on Swift Package
我的 iOS 应用遵循 "Photos Extension" 模板:
- 一个独立的 "container" 应用程序
- 照片编辑扩展程序,通过将其嵌入到上面的应用程序中进行部署。
根据 Apple 的建议,应用程序和扩展程序 共享 的代码收集在 "core" cocoa 中应用程序中嵌入的框架,应用程序和扩展程序都链接到该框架。
所以我的 Xcode 项目包含 三个目标 :
- 框架目标,
- Photo Editing Extension 目标,它链接到框架但不嵌入它,并且
- App 目标,嵌入了扩展二进制文件和框架二进制文件,并链接到两者。
到目前为止,还不错。
此外,框架、应用程序和扩展依赖于两个库 MyLibraryA 和 MyLibraryB 我在 Github(反过来,MyLibraryA 取决于 MyLibraryB)。
我最初使用 Carthage 设置了对 MyLibraryA 和 MyLibraryB 的依赖,一切正常.
然后,我决定将我的库 A 和 B 迁移到 Swift 包。
我删除了项目和目标、框架搜索路径等中的所有 Carthage-related 设置,以确保引用我的库的 Swift 包版本,而不是缓存的 Carthage 构建。我还删除了 Carthage 目录(签出 和 构建)。
问题
当我构建 shared/embedded Framework 目标时,没有任何问题。
但是当我尝试构建 App 或 App 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",但对我来说仍然像是一个错误。
我的 iOS 应用遵循 "Photos Extension" 模板: - 一个独立的 "container" 应用程序 - 照片编辑扩展程序,通过将其嵌入到上面的应用程序中进行部署。
根据 Apple 的建议,应用程序和扩展程序 共享 的代码收集在 "core" cocoa 中应用程序中嵌入的框架,应用程序和扩展程序都链接到该框架。
所以我的 Xcode 项目包含 三个目标 :
- 框架目标,
- Photo Editing Extension 目标,它链接到框架但不嵌入它,并且
- App 目标,嵌入了扩展二进制文件和框架二进制文件,并链接到两者。
到目前为止,还不错。
此外,框架、应用程序和扩展依赖于两个库 MyLibraryA 和 MyLibraryB 我在 Github(反过来,MyLibraryA 取决于 MyLibraryB)。
我最初使用 Carthage 设置了对 MyLibraryA 和 MyLibraryB 的依赖,一切正常.
然后,我决定将我的库 A 和 B 迁移到 Swift 包。
我删除了项目和目标、框架搜索路径等中的所有 Carthage-related 设置,以确保引用我的库的 Swift 包版本,而不是缓存的 Carthage 构建。我还删除了 Carthage 目录(签出 和 构建)。
问题
当我构建 shared/embedded Framework 目标时,没有任何问题。
但是当我尝试构建 App 或 App 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",但对我来说仍然像是一个错误。