【发布时间】:2020-06-10 22:39:11
【问题描述】:
我的 iOS 应用遵循“照片扩展”模板: - 一个独立的“容器”应用程序 - 照片编辑扩展,通过将其嵌入到上面的应用程序中进行部署。
根据 Apple 的建议,应用程序和扩展程序共享的代码被收集在嵌入应用程序的“核心”cocoa 框架中,并且应用程序和扩展程序都链接到它。
所以我的 Xcode 项目包含 三个目标:
- 框架目标,
- Photo Editing Extension 目标,链接到框架但不嵌入框架,并且
- App 目标,嵌入 Extension 二进制文件和 Framework 二进制文件,并链接到两者。
到目前为止,一切顺利。
此外,框架、应用程序和扩展依赖于我在 Github 上的两个库 MyLibraryA 和 MyLibraryB(反过来,MyLibraryA 取决于 MyLibraryB)。
我最初使用 Carthage 设置了对 MyLibraryA 和 MyLibraryB 的依赖,一切正常。
然后,我决定将我的库 A 和 B 迁移到 Swift Packages。
我删除了项目和目标、框架搜索路径等中的所有 Carthage 相关设置,以确保引用我的库的 Swift Package 版本,而不是缓存的 Carthage 构建。我还删除了 Carthage 目录(结帐和构建)。
问题
当我构建共享/嵌入式 Framework 目标时,没有任何问题。
但是当我尝试构建 App 或 App 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