Mac Catalyst的问题 - 链接到为iOS模拟器构建的目标文件中的问题

12

我正在尝试使用新的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的版本。请注意,这不是指分开的项目、代码等,而是分别构建不同的版本。 - user7014451
我们如何为macOS创建单独的构建?我们只需点击运行,然后选择macOS而不是iOS即可。 - Nevin Jethmalani
我真的不知道,只是想帮忙。我从来没有在Xcode中需要条件构建,但我知道一些关于Schemes和Build Settings的内容。显然你的问题的原因是iOS与macOS之间的差异,但解决方案呢?我认为你不应该创建一个实际的macOS分支... - user7014451
1个回答

2
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”。例如:

xcode

在你的 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)。

1
问题在于我需要过滤不兼容的框架,而不是阻止所有来自 Catalyst 的框架。 - sharshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接