【问题标题】:Xcode 6 Error - "Missing Required Architecture i386" When Building for iOS SimulatorXcode 6 错误 - 为 iOS 模拟器构建时“缺少所需的体系结构 i386”
【发布时间】:2015-04-30 17:42:05
【问题描述】:

我创建了一个自定义的 Objective-C 框架。我想将它导入到任何给定的 iOS 项目中,并在 iOS 模拟器和实际设备上使用它提供的功能。为了导入框架,我使用应用程序目标中的 Build Phases > Link Binary With Libraries 设置来链接它。然后,我可以使用以下语句将其导入我的一个类中:

#import <CustomFramework/CustomFramework.h>

我可以很好地实例化我的框架类,但是当我尝试在设备上运行我的项目时,我收到以下错误消息:

dyld: Library not loaded: @rpath/CustomFramework.framework/CustomFramework
Referenced from: /var/mobile/Applications/A61E882D-481A-4C0B-B4FD-69F5D24968BF/TestApp.app/TestApp
Reason: image not found

如果我尝试在模拟器上运行它,我会收到不同的错误消息:

ld: warning: ignoring file /Users/user/Desktop/CustomFramework.framework/CustomFramework, missing required architecture i386 in file /Users/user/Desktop/CustomFramework.framework/CustomFramework (2 slices)
Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_CustomFramework", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

当我从框架中实例化一个类时会发生这种情况。如果我导入框架但实际上并未使用它,我的应用程序将成功构建。每当我出于某种原因从框架中实例化一个类时,它都会出错。

为了让应用程序在设备上构建,我按照this SO 回答。我没有链接框架,而是在目标的 Build Phases 设置中添加了一个新的 Copy Files 阶段,将 Destination 设置为 Framework,然后添加了我的框架。

效果很好;但是,我也想在 iOS 模拟器上测试我的应用程序。当我尝试在模拟器上运行我的应用程序时,我仍然收到“缺少所需的架构 i386”错误。我已经尝试了几乎所有我能找到的相关 SO 主题中提出的解决方案,但没有任何东西可以帮助我解决这个问题。

请注意,我正在尝试在一个新的 Xcode 项目中使用我的自定义框架,因此没有更改任何应用程序/构建设置的默认设置。

如何修复此错误,以便我可以在 iOS 模拟器和项目中包含我的框架的设备上运行我的应用程序?任何见解将不胜感激!

【问题讨论】:

    标签: ios architecture frameworks xcode6 i386


    【解决方案1】:

    问题在于该框架没有针对 iOS 模拟器的架构(即 i386)进行编译。 Xcode 只为目标架构编译一个框架,所以如果我为 iOS 模拟器构建框架,它不会在设备上工作,如果我为设备构建框架,它不会在 iOS 模拟器上工作。

    我在本教程的帮助下从头开始创建了我的框架:http://www.raywenderlich.com/65964/create-a-framework-for-ios

    多架构构建脚本允许我的框架在 iOS 模拟器和设备上运行。

    【讨论】:

    • 感谢您的回答!直到 2015 年,我们仍然不得不依靠手动构建来获得一个像样的框架,这仍然是荒谬的(教程就像,10 页长?!)。苹果,你真丢脸!
    • @Rick77 很高兴为您提供帮助!我完全同意。我还为 Windows 和 Windows Phone 开发应用程序,我什至不必在这些平台上考虑这一点。
    • @Alexander 我的框架不是为 iOS 模拟器的架构编译的。它只支持设备,如何使我的框架在模拟器中工作。我正在使用 框架。
    • @Arun 如果您正在制作自己的框架,那么您将需要按照我的回答中的 Ray Wenderlich 教程进行操作。本教程包含一个多架构构建脚本,当它集成到您​​的构建过程中时,它将在设备和模拟器上运行。如果您不创建自己的框架,则需要要求该框架的开发人员对其进行编译以支持多种架构。
    • @Alexander 谢谢你的回答帮助了我。
    【解决方案2】:

    在尝试为模拟器构建时,我在 Xcode 7.1 中遇到了同样的问题。 其他人说它在 Xcode 8.2.1 下对他们有用,所以我尝试在那里构建/运行它并且它有效。我不必更改项目中的目标或任何内容。

    因此,如果可以,请尝试升级您的 Xcode,您可能还会获得额外的错误修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2014-11-11
      • 1970-01-01
      • 2013-03-17
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多