【问题标题】:Non-PIE binary built regardless of build settings无论构建设置如何,都构建了非 PIE 二进制文件
【发布时间】: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

标签: ios app-store


【解决方案1】:

您可以使用 otool 检查每个二进制文件或库。

转到框架或应用程序的位置。前任。 /[DerivedData 目录]/Build/Products/Release-iphoneos

otool -hv LibraryName.framework/LibraryName

otool -hv AppName.app/AppName

在标志部分查找“PIE”。这是示例输出:

AppName.app/AppName (architecture armv7): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 EXECUTE 45 4600 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

AppName.app/AppName (architecture arm64): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 ARM64 ALL 0x00 EXECUTE 45 5184 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多