Xcode 6错误 - 为iOS模拟器构建时“缺少必需的架构i386”

时间:2015-02-27 21:39:41

标签: ios architecture frameworks xcode6 i386

我创建了一个自定义的Objective-C框架。我想将它导入任何给定的iOS项目,并在iOS模拟器和实际设备上使用其提供的功能。要导入框架,我使用构建阶段>链接它。在应用程序的目标中设置链接二进制文件库。然后,我可以使用以下声明将其导入我的一个类中:

#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回答。我没有链接框架,而是在目标的构建阶段设置中添加了一个新的复制文件阶段,将目标设置为框架,并添加了我的框架。

这很有效;但是,我也想在iOS模拟器上测试我的应用程序。当我尝试在模拟器上运行我的应用程序时,我仍然得到了缺少必需的架构i386&#34;错误。我已经尝试了几乎所有我能找到的相关SO主题提出的解决方案,没有什么能帮助我解决这个问题。

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

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

2 个答案:

答案 0 :(得分:5)

问题是该框架没有为iOS模拟器的架构编译,即i386。 Xcode只为目标体系结构编译一个框架,所以如果我为iOS模拟器构建框架,它就无法在设备上运行,如果我为设备构建框架,它将无法在iOS模拟器上运行。

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

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

答案 1 :(得分:0)

在尝试为模拟器构建时,我遇到了与Xcode 7.1相同的问题。 其他人说它在Xcode 8.2.1下为他们工作,所以我尝试在那里建立/运行它有效。我没有必要在项目中更改目标或任何内容。

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