脂肪电池错误!!无法打开输入文件

50

我的应用程序之前运行得非常好,然后我开始集成推送通知的SDK,在集成过程中停止了。我甚至从我的项目中删除了该SDK,并尝试存档或运行应用程序,但是它给出了这个错误:

lipo错误!!无法打开输入文件。

任何帮助都将不胜感激,我已经花了足够的时间来解决这个问题,但失败了。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo: 无法打开输入文件: /Users/XYZ/Library/Developer/Xcode/DerivedData/MyAPP-hjbmqpnmsoruqxbwlayqkjsojccv/Build/Intermediates/MyAPP.build/Debug-iphoneos/MyAPP.build/Objects-normal/armv7s/MyAPP(没有那个文件或目录)

21个回答

67
我把它搞定了,我只是在我的项目文件->构建设置->仅构建活动架构做了一个简单的更改,并将此仅构建活动架构设置为YES。现在它正常工作了。
更新后6个月: 我再次遇到了这个问题,这次我需要更新项目目标->构建设置->有效架构为armv7。我删除了armv7s和arm64。

有人知道这是为什么吗? 将Build for active architecture设置为YES只是为了在调试时加快构建过程,因为它会按照所说的那样执行。当它设置为NO时,它应该构建所有架构并创建一个fat二进制文件 - 为什么这个fat二进制文件不能正常工作呢? - Tom Redman
2
这难道不会防止生成的可执行文件在某些设备上运行吗? - Oscar
1
奇怪的是,我通过删除然后重新添加所有架构来使其工作。一旦我这样做了,原始设置就起作用了。不确定为什么。 - MajorHavoc
6
更改“仅构建活跃架构”设置对于应用商店构建不会产生良好的效果。请参见下面的答案。 - Sheamus
2
任何子项目(例如Pods项目)都需要构建父项目所构建的所有架构,至少要这样做。因此,如果父项目正在构建所有架构,则子项目必须执行相同操作。如果父项目只构建活动架构,则子项目设置无关紧要。同样,子项目的架构列表必须与父项目的架构列表相同(或是父项目架构列表的超集)。最后,在“发布”配置中,“仅构建活动架构”的设置应始终为“否”。 - Frank Schmitt

12

将“启用位码”设置为“否”对我很有帮助。

现在我能够在设备上运行,并提交到应用商店。

输入图像描述


2
不行...这对我没用。我正在使用Xcode 7.1.2。 - Jayprakash Dubey
1
在建议更改位代码选项之前,请检查对您的应用程序会产生什么影响。 - Stan

10
注意,当我从Carthage转换到CocoaPods时遇到了这个问题。解决方法是在“Build Phases”部分中删除“Remove Unneeded Architectures”。

我的程序叫做“去除不需要的弧线”。 - Jacksonkr
我还用Cocoapods替换了Carthage,并不得不从我的构建阶段中删除此运行脚本,以避免派生数据错误。 - vikzilla
我在使用 cordova-sentry 时遇到了这个问题,它有一个像这样运行的脚本。我不得不删除 Build Phases 下的脚本才能在我的设备上安装它。 - rlfrahm

6

这种情况发生在我使用cocoapods时,工作区中的Pods项目与我的主项目"仅构建活动架构"设置不同(分别为YES和NO)。当我将两者都设置为"NO"时,我就能够在我的设备上构建和运行。


1
这太奇怪了。这与我所做的相反。那怎么可能行得通呢?我的思维已经足够混乱了。 - Alex Zavatone
在我看来,这应该是被采纳的答案。子项目需要至少构建与父项目相同数量的架构。因此,如果父项目仅构建活动架构,则可以设置子项目为任何内容,但如果父项目构建了所有架构,则子项目必须做到相同。 - Frank Schmitt

4

如果连接了iPad/iPhone,请尝试将其断开。这对我的情况起到了作用。


4
尝试从项目目标中删除已删除的文件- >构建阶段- >编译源。希望这有所帮助。

1

我同时使用Carthage和Cocoa Pods,以下是我如何在不删除“Build Phases”部分中的“Remove Unneeded Architectures”的情况下解决了这个问题:

• 在目标内转到“Build Phases”选项卡

• 将“Remove Unneeded Architectures”(或者你所命名的脚本)拖动到更高的行(例如,在“Compile Sources”上方)。

• 清理并构建

希望这可以帮助你!


1
请问您能否分享一下您在构建阶段中使用的命令的屏幕截图? - Mumtaz Hussain

1
对我来说,这是因为我的主可执行文件和我静态链接的库在“构建设置”>“架构”中有不同的设置。库被设置为仅“标准架构”,但主可执行文件被设置为“标准架构(包括64位)”。
我认为发生的情况是,在构建过程中链接所有内容时,它发现缺少库的64位版本,从而导致此错误。
将它们全部设置为相同的值(带或不带64位)解决了我的问题。

1
在我的情况下,我在一些更新后执行了我的应用程序,然后尝试将其提交到git上,但冲突破坏了我的代码。那是一个悲伤的故事。
但幸运的是,我在系统上有一个备份,我用本地代码替换了破坏的代码。
现在在执行时我遇到了同样的问题。然后“清理项目”对我来说就像魔棒一样。我清理了项目,然后就可以继续了。

2
这里的可怕问题是我们从不知道为什么它能够工作。我想知道是什么改变了使得构建可以工作。我们都遇到过这种情况,只是不知道为什么会发生,或者我们所做的修复措施为什么有效。 - Alex Zavatone

1
这是一个与cocoapods相关的问题。我使用的是0.35.0版本的Xcode 6.1.1,显然需要在我的podfile中提及我的目标,以便所有的cocoapods都能正确地与我的目标一起工作。
在我的podfile底部,我添加了以下内容:
link_with 'Target A', 'Target B' ...

将所有目标名称添加,关闭Xcode,运行pod install,打开Xcode,它应该为您构建。

这是Github问题: https://github.com/CocoaPods/CocoaPods/issues/2627


这个问题与lipo问题有什么关系? - interrupt

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