【问题标题】:iOS Simulator crash when using xcframework through Xcode通过 Xcode 使用 xcframework 时 iOS 模拟器崩溃
【发布时间】:2021-05-27 06:43:12
【问题描述】:

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

【问题讨论】:

    标签: ios objective-c xcode xcframework


    【解决方案1】:

    尝试按照此 [视频](https://www.youtube.com/watch?v=TCnhvHUcjrY) 中所示进行操作。
    尽量不要使用 `lipo` 并通过终端执行所有操作。
    另请注意,导入框架时,需要设置值“嵌入和签名”。

    【讨论】:

      【解决方案2】:

      我知道这是一个老话题,但直到最近才通过升级到 CMake 版本 3.21.4 解决了这个问题。看起来在 CMake 3.20 中修复了如何处理 -rpath 链接器标志。见Release notes for CMake 3.20

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-13
        • 2016-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        • 2015-06-22
        相关资源
        最近更新 更多