代码之家  ›  专栏  ›  技术社区  ›  Seb

通过Xcode使用xcframework时iOS模拟器崩溃

  •  0
  • Seb  · 技术社区  · 3 年前

    正如标题所述,我在模拟器上使用xcframework时遇到了崩溃。在此之前,我会从lipo命令生成一个fat文件,该文件在设备和模拟器上都运行得很好。模拟器和设备的各个框架是通过CMake构建的,并生成一个 framework 每个文件都有自己的Info.plist、acknowledgements.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 在线程1上,堆栈跟踪中只有以下项目 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_PATH,否则应用程序无法编译。

    0 回复  |  直到 3 年前
        1
  •  0
  •   I.U.    3 年前

    尝试按照此[视频]所示进行操作(https://www.youtube.com/watch?v=TCnhvHUcjrY).
    尽量不要使用“lipo”,一切都通过终端完成。
    还要注意,在导入框架时,他们需要设置值“嵌入和签名”。
        2
  •  0
  •   Seb    3 年前

    我知道这是一个老话题,但直到最近才通过升级到CMake 3.21.4版本解决了这个问题。在CMake 3.20中,似乎已经修复了 -rpath 正在处理链接器标志。请参阅 Release notes for CMake 3.20