将 iOS 应用程序提交到 App Store 时,我收到来自 Apple 的以下消息:
非 PIE 二进制文件 - 可执行文件“Celly.app”不是与位置无关的可执行文件。请确保您的构建设置已配置为创建 PIE 可执行文件。有关更多信息,请参阅 技术问答 QA1788 - 构建与位置无关的可执行文件
链接上的信息说我应该执行以下操作:
在 Xcode 中,在“Targets”部分选择您的目标,然后单击“Build Settings”选项卡以查看其设置。对于 iOS 应用,将 iOS 部署目标设置为 iOS 4.3 或更高版本。对于 Mac 应用程序,将 OS X 部署目标设置为 OS X 10.7 或更高版本。验证 Generate Position-Dependent Code 是否设置为其默认值 NO。验证不要创建与位置无关的可执行文件是否设置为其默认值 NO。
我已按照他们提供的链接中的说明进行操作,确保有关生成与位置无关的二进制文件的构建设置设置为“否”,并且还验证了我的项目的 iOS 部署目标是 iOS 5.1。
我认为它不会影响最终产品,但我正在使用 Mogenerator 创建我的核心数据托管对象。我已验证 Mogenerator 目标也具有正确的设置。
我还通过 Cocoapods 使用了各种库,并验证了它们每个的设置也是正确的,并且它们都具有 iOS 5.1 的部署目标。
但是,即使使用这些设置,我的应用程序仍然不是 PIE。我只能假设项目中的某个地方隐藏了一些东西,它覆盖了我的构建设置并导致应用程序被构建为位置相关的。我真的很不熟悉 PIE 的概念,所以任何关于可能导致这种情况的信息都将不胜感激。是否还有其他我应该检查的地方可能会影响我的应用程序是否为 PIE?我的代码中是否有可能导致我的应用程序构建非 PIE 的事情?