生成我的iPhone应用程序时出现此错误:
ld:警告:在/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit中,文件中缺少必需的体系结构i386
我的应用程序中的所有框架都一样。这很奇怪,因为这没有更早发生。
生成我的iPhone应用程序时出现此错误:
ld:警告:在/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit中,文件中缺少必需的体系结构i386
我的应用程序中的所有框架都一样。这很奇怪,因为这没有更早发生。
Answers:
当您将框架添加到项目中并且无意中将框架复制到项目目录中时,就会发生这种情况。
解决方法是检查项目目录(在磁盘上存储项目的位置)中是否存在任何iPhone SDK * .Framework文件,然后删除它们。
此后项目将建设良好。
我也遇到了同样的问题,而解决方案却很容易解决。备份然后在TextMate或TextEdit中打开project.pbxproj(位于项目文件包内),然后搜索标题为“ / * Begin XCBuildConfiguration section * /”的部分。查找一个名为FRAMEWORK_SEARCH_PATHS的密钥,并将其及其内容删除(每个构建配置一次,因此我在两个位置将其删除了)。这是我删除的示例:
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);
我的项目现在同时为iPhone设备和iPhoneSimulator构建。
这里发生的事情是Xcode神秘地添加了指向特定iPhone设备SDK的“框架搜索路径”条目。例如,我的最近设置为:
$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks
这导致编译器找到不正确架构的框架。在目标的构建设置中的“框架搜索路径”键下删除任何值将解决此问题。
我只是想在XCode中提及这一点,如果您转到“编辑项目设置”并找到“搜索路径”,则存在“框架搜索路径”字段。更新此版本可以解决问题,而无需修改项目文件!
干杯!
杰西
如果您的应用程序打算在设备上运行,请确保您不尝试在模拟器上运行它。听起来似乎很明显,但是还是要检查一下。
尽管有可能删除了某些内容,但根据我的经验,项目文件中有一些内容搞砸了。我还没有确定什么是“东西”。当SDK安装正常时,我遇到了类似的问题。有两种选择。
首先,将所有文件添加到新项目中。这似乎通常有效。不过有点痛苦。
其次,您可以在XCode / Get Info / Build / Library Search Paths中右键单击项目。添加类似于/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib的新路径。为每个版本(2.2.1等)和平台(模拟器或iPhoneOS)添加该字符串的适当版本。如果框架是您的问题,请对“框架搜索路径”执行类似的操作。
第三,工作更多但更可靠,是从MyProject.xcodeproj中打开project.pbxproj(Textmate对此很有用)。查找“ / *开始XCBuildConfiguration部分* /”,然后查找“ LIBRARY_SEARCH_PATHS”和“ FRAMEWORK_SEARCH_PATHS”。根据需要添加或修改路径,然后保存文件。
无论如何,屁股痛,我肯定要指出原因,因为我已经发生过几次了。项目构建良好,然后只是建立起来,并拒绝这样做,这似乎没有什么道理。
从终端在框架上运行file命令:
file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit
您应该返回一条消息,告诉您UIKit二进制与哪些体系结构兼容。如果未列出“ i386”,则说明已设法删除了iKit版本的i386,这意味着您无法为模拟器构建。要解决此问题,必须重新安装SDK。
如果您遇到其他错误,希望它可以帮助您确定实际问题是什么。
我的解决方案是将模拟器目标调试设置为YES,仅查看git status即可查看仅作为.project添加为体系结构的新行。如果不设置,则该构建将在所有体系结构上运行,并显示一些缺少的体系结构,例如i386或其他。注意显然,主要问题是使用实现某种特定体系结构的框架。