Xcode 6错误 - 在构建iOS模拟器时缺少所需的架构i386

5

我创建了一个自定义的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)

当我从框架中实例化一个类时,就会出现这种情况。如果我导入了框架但实际上没有使用它,我的应用程序可以成功构建。但是每当我从框架实例化一个类时,它就会出错。
为了让应用程序在设备上构建,我遵循了 SO答案。我添加了一个新的“复制文件”阶段到目标的构建阶段设置中,将目的地设置为框架,并添加了我的框架。这样做非常好;但是,我也想在iOS模拟器上测试我的应用程序。当我尝试在模拟器上运行我的应用程序时,仍然会出现“缺少所需的架构i386”的错误。我已经尝试了几乎所有相关的SO主题提出的解决方案,但没有任何帮助我解决这个问题。请注意,我正在尝试在新的Xcode项目中使用自定义框架,因此应用程序/构建设置都没有更改其默认值。如何修复此错误,以便我可以在包含我的框架的项目上同时在iOS模拟器和设备上运行我的应用程序?任何见解都将不胜感激!
2个回答

5
问题在于该框架未编译为iOS模拟器的i386体系结构。Xcode 仅为目标体系结构编译框架,因此,如果我为 iOS 模拟器构建框架,则无法在设备上使用它;反之亦然。我根据这个教程从头开始创建了我的框架:http://www.raywenderlich.com/65964/create-a-framework-for-ios。多体系结构构建脚本使我的框架能够在 iOS 模拟器和设备上运行。

2
谢谢你的回答!但是,到2015年为止,我们仍然不得不采用手动构建来获得一个体面的框架(教程就像10页长?!)。苹果真丢人! - Rick77
1
@Rick77 很高兴能帮忙!我完全同意。我也为 Windows 和 Windows Phone 开发应用程序,甚至都没有想过这个问题。 - Alexander
@Alexander 我的框架没有为iOS模拟器的架构编译。它仅支持设备,如何使我的框架在模拟器中工作。我正在使用<ImagPay>框架。 - Arun
1
@Arun 如果你正在制作自己的框架,那么你需要按照我回答中提到的 Ray Wenderlich 教程进行操作。该教程包括一个多架构构建脚本,当集成到你的构建过程中时,可以在设备和模拟器上运行。如果你不是在创建自己的框架,那么你需要向该框架的开发者询问是否支持编译多个架构。 - Alexander
@Alexander 谢谢你的回答,帮了我很大的忙。 - Arun
@Alexander 谢谢你的解释。我也遇到了同样的问题。但是我的框架不是自己创建的。 - Ramakrishna

0

当我尝试为模拟器构建时,我在Xcode 7.1中遇到了这个问题。有人说在Xcode 8.2.1下可以工作,所以我尝试在那里构建/运行,它起作用了。在我的项目中,我不需要更改目标或任何其他内容。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接