Mac Catalyst 的问题 - 链接为 iOS 模拟器构建的目标文件
Posted
技术标签:
【中文标题】Mac Catalyst 的问题 - 链接为 iOS 模拟器构建的目标文件【英文标题】:Issue with Mac Catalyst - linking in object file built for iOS Simulator 【发布时间】:2020-02-26 06:04:18 【问题描述】:我正在尝试使用新的 Mac Catalyst 在我的 Mac 上构建我的 ios/iPadOS 项目。当我在 iPhone 模拟器上构建它时,一切都很好,但是当我在我的 Mac 上构建它时,我得到了这个错误。
in /Users/nevin/Documents/[projectName]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics(CLSInternalReport.o), building for Mac Catalyst, but linking in object file built for iOS Simulator, file '/Users/nevin/Documents/[projectName]/Pods/Crashlytics/iOS/Crashlytics.framework/Crashlytics' for architecture x86_64
这发生在多个 pod 上,所以如果我删除 Crashlytics,另一个 pod 也会出现类似的错误。有人知道这是 Crashlytics 需要解决的问题,还是我可以在我的项目中解决的问题?
【问题讨论】:
尚未(还)使用 Catalyst,但看起来您确实需要单独的构建 - 一个用于 iOS,一个用于 macOS。请不要将项目、代码等分开构建。 我们如何为 macOS 创建单独的构建?我们直接点击运行然后选择macOS而不是iOS? 我真的不知道,只是想帮忙。我从来没有真正需要 Xcode 中的条件构建,但知道一些您可以使用 Schemes 7 构建设置做什么。很明显您的问题的原因 - iOS 与macOS - 但是*solution8?我不认为你应该创建一个实际的 macOS 分支...... 【参考方案1】:Mac Catalyst 使用 x86_64,但使用 Mac Catalyst 的目标编译。
我有一个为 Mac Catalyst 编译的项目,您需要添加这些标志: https://github.com/ezored/conan-darwin-toolchain/blob/stable/1.1.0/conanfile.py#L183-L188
如果您的框架不兼容,请不要在“General > Frameworks”中链接,而是选择“iOS”而不是“macOS + iOS”。示例:
并在您的 swift 代码中添加 IF 代码以检查您的框架是否可以导入并与此一起使用:
#if targetEnvironment(macCatalyst)
print("UIKit running on macOS")
#else
print("Your regular code")
#endif
有了这个,您可以使应用程序与 Mac Catalyst 兼容。当您的框架(如 Crashlytics)兼容时,再次检查“macOS + iOS”并删除对代码的检查。
另一种选择是为 Mac Catalyst 制作另一个目标并只为 Mac Catalyst 放置东西,但使用我的第一个选项,您可以毫无问题地构建。
如果您想使用 C++ 代码制作支持 Mac Catalyst 的框架,您可以查看我的框架 (https://github.com/ezored/ezored)。
【讨论】:
问题是我需要过滤不兼容的框架,而不是阻止所有的催化剂以上是关于Mac Catalyst 的问题 - 链接为 iOS 模拟器构建的目标文件的主要内容,如果未能解决你的问题,请参考以下文章
iOS Catalyst Cocoapod 框架错误 - 签名需要开发团队
iOS:Mac Catalyst,在其他 Mac 上测试 iOS 应用
Mac-catalyst - Mac 催化剂应用程序的最小窗口大小