正如标题所述,我在模拟器上使用 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 上得到一个,堆栈跟踪中的唯一项目是memcpy
and _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,否则应用程序无法编译。