【问题标题】:Custom framework fails to load in iOS simulator (wrong architecture)自定义框架无法在 iOS 模拟器中加载(错误的架构)
【发布时间】:2015-08-20 04:54:28
【问题描述】:

我正在尝试为 iOS8 构建一个 Cocoa Touch 框架,该框架最终将嵌入应用程序并提交到 App Store,因此发布版本仅包含 armv7 但调试版本也必须在模拟器中运行,这一点很重要。因此,我一直在关注this tutorial,并且在尝试在嵌入了框架的模拟器中运行应用程序时遇到运行时错误:

dyld: Library not loaded: @rpath/TestFramework.framework/TestFramework
  Referenced from: /Users/jay/Library/Developer/CoreSimulator/Devices/97715157-EABB-4F38-8CA0-62768358DDD6/data/Containers/Bundle/Application/4856FC75-6C5B-4F7E-91A9-70CA1863D130/Test.app/TestFramework
  Reason: no suitable image found.  Did find: /Users/jay/Library/Developer/CoreSimulator/Devices/97715157-EABB-4F38-8CA0-62768358DDD6/data/Containers/Bundle/Application/4856FC75-6C5B-4F7E-91A9-70CA1863D130/Test.app/Frameworks/TestFramework.framework/TestFramework: mach-o, but wrong architecture

但是,当我浏览到它抱怨的框架二进制文件时

(/Users/jay/Library/Developer/CoreSimulator/Devices/97715157-EABB-4F38-8CA0-62768358DDD6/data/Containers/Bundle/Application/4856FC75-6C5B-4F7E-91A9-70CA1863D130/Test.app/)

然后运行xcrun lipo -info TestFramework 我得到了Non-fat file: TestFramework is architecture: i386 的输出,所以我现在有点迷茫了。它在实际的 iOS 设备上运行良好。

【问题讨论】:

  • “提交到应用商店”和“仅包含 armv7”是互斥的。
  • 对不起,armv7 / arm64。无论如何,只是没有模拟器架构。
  • 好的,我认为这与您的 Xcode 应用程序目标如何依赖于您的框架目标有关。如果在 Build Phase 中设置正确,那么 Xcode 将为应用程序(即设备或模拟器)构建正确的架构。我认为您需要做的就是将其复制到应用程序包中的正确位置(iOS 应用程序包结构远不如 OSX 应用程序包结构正式,但仍然需要这样做)。这可能需要 Build Phases 选项卡中的自定​​义脚本。
  • 我不确定我是否遵循 - 从教程中,它应该找到与调试或发布有关的框架版本:$(PROJECT_DIR)/lib/$(CONFIGURATION)" 并且调试的应该可以工作两者都有。我挂断的事情是它正在加载的文件肯定只包含 i386 库(也应该包括 armv7)但不知何故只能在设备上运行。

标签: ios objective-c xcode


【解决方案1】:

根据问题和您的 cmets,最可能的原因是您正在构建 32 位框架并将其链接到 64 位应用程序。如果不是这种情况,请提供崩溃日志的全文。

你应该构建你的框架 4way-fat:

  i386/iphonesimulator
  x86_64/iphonesimulator
  armv7/iphoneos
  arm64/iphoneos

为了使其 4-way fat,您需要手动将 i386/x86_64 sim 构建与 armv7/arm64 设备构建一起 lipo-together。 Xcode 不支持使用两个不同(从 Xcode 的角度)平台构建 4-way fat。

Xcode 11 中的新功能:您可以使用xcframework 来支持这些场景!不再需要 lipo hack。你可以在WWDC 2019 Session 416找到详细信息

【讨论】:

    【解决方案2】:

    在我的例子中,我使用了一个自定义框架,其中包含我在 Interface Builder 中使用的视图,我在 Interface Builder 构建阶段遇到了这个错误。

    运行 pod install 修复它。

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多