0

正如标题所述,我在模拟器上使用 xcframework 时遇到了崩溃。在此之前,我会从 lipo 命令生成一个 fat 文件,该文件在设备和模拟器上都运行良好。模拟器和设备的各个框架是通过 CMake 构建的,并生成一个framework文件,每个文件都有自己的 Info.plist、确认.plist、公共头文件目录(这是一个 C\C++ 库)和框架。然后使用生成的框架调用xcodebuild -framework <path-to-ios-framework>.framework -framework <path-to-ios-simulator-framework>.framework -output <output-path>.xcframework. 我看到这会生成包含 iOS 和模拟器的正确 xcframework,到目前为止一切都很好。

一旦构建了 xcframework,我将包含在我的 Objective-c 应用程序的 Xcode 项目中,并在通过 Xcode 在设备上运行之前开始构建。这再次没有问题。如果我为模拟器构建,它构建得很好,但是在启动应用程序时,再次通过 Xcode,我EXC_BAD_ACCESS在 Thread 1 上得到一个,堆栈跟踪中的唯一项目是memcpyand _dyld_start。如果我尝试继续,我会得到一个SIGKILL唯一的输出,看起来像是找不到库@rpath/framework.framework/framework。如果我在模拟器上运行应用程序而不通过 Xcode,应用程序运行良好。

我的总体问题是为什么通过 Xcode 在模拟器上运行会产生这种崩溃以及可以做些什么来解决它。在网上寻找答案让我陷入了死胡同。我正在使用运行 iOS 14.4 的第 8 代 iPad 模拟器运行 Xcode 12.4。操作系统是 Big Sur 11.2.1。另一个注意事项是,在实际应用程序中包含 xcframework 后,我必须在 Release 和 Debug 配置中为 iphoneos 和 iphonesimulator 指定 HEADER_SEARCH_PATHS,否则应用程序无法编译。

4

2 回答 2

0

尝试按照此 [视频](https://www.youtube.com/watch?v=TCnhvHUcjrY) 中所示进行操作。
尽量不要使用 `lipo` 并通过终端执行所有操作。
另请注意,在导入框架时,他们需要设置值“Embed & Sign”。
于 2021-02-24T22:48:28.653 回答
0

我知道这是一个老话题,但直到最近才通过升级到 CMake 版本 3.21.4 解决了这个问题。看起来在 CMake 3.20 中修复了-rpath链接器标志的处理方式。请参阅CMake 3.20 的发行说明

于 2021-12-30T20:51:15.607 回答