【发布时间】:2013-07-16 18:29:47
【问题描述】:
向 App Store 提交 iOS 应用程序时,我从 Apple 收到以下消息:
非 PIE 二进制文件 - 可执行文件“Celly.app”不是职位 独立可执行文件。请确保您的构建设置是 配置为创建 PIE 可执行文件。有关详细信息,请参阅 Technical Q&A QA1788 - Building a Position Independent Executable
链接中的信息表明我应该执行以下操作:
在 Xcode 中,在“目标”部分中选择您的目标,然后单击 “构建设置”选项卡以查看其设置。对于 iOS 应用,设置 iOS 部署目标到 iOS 4.3 或更高版本。对于 Mac 应用程序,设置 OS X 部署目标为 OS X 10.7 或更高版本。验证生成 位置相关代码设置为其默认值 NO。验证 Don't Create Position Independent Executables 设置为默认值 NO的值。
我已按照他们提供的链接中的说明进行操作,确保有关生成与位置无关的二进制文件的构建设置设置为“否”,并且还验证了我的项目的 iOS 部署目标是 iOS 5.1。
我认为它不会影响最终产品,但我正在使用 Mogenerator 创建我的 Core Data 托管对象。我已验证 Mogenerator 目标也具有正确的设置。
我也是通过 Cocoapods 使用了各种库,并且已经验证了它们每个的设置都是正确的,并且它们都具有 iOS 5.1 的部署目标。
但是,即使使用这些设置,我的应用仍然不是 PIE。我只能假设项目中的某个地方隐藏了一些东西,它覆盖了我的构建设置并导致应用程序被构建为位置相关的。我真的很不熟悉 PIE 的概念,所以任何关于可能导致这种情况的信息都将不胜感激。是否还有其他我应该检查的地方可能会影响我的应用程序是否为 PIE?我的代码中是否有可能导致我的应用构建非 PIE 的操作?
【问题讨论】:
-
根据stackoverflow.com/questions/16455416/…,你使用的库也必须是PIE。
-
@JaakL 我已经检查并检查了我使用的所有库是否都具有正确的 PIE 设置。但是,我不确定他们是否真的在生成 PIE,因为他们可能遇到与我的包含项目相同的问题。有没有办法独立地验证每个库是否正在生成 PIE?如果我有一个流程,我就能查明问题的根源。
-
我现在为一个项目得到了这个。该项目由第 3 方开发人员构建,他们使用 Unity3d。 “armv7/Assembly-CSharp-firstpass.dll.o。”出现 PIE 被禁用。这是 Unity/C# 的东西......或者狗知道:-P
-
@Jonny:如何检查图书馆是否启用了 PIE?
-
对不起,我什么都不记得了:-D