【问题标题】:Non-PIE Binary - The executable 'project name' is not a Position Independent Executable.非 PIE 二进制文件 - 可执行的“项目名称”不是与位置无关的可执行文件。
【发布时间】:2013-05-09 06:03:56
【问题描述】:

我将一个二进制文件上传到 iTunes Connect,它经过验证并被接受发布到 App Store。我收到一封来自 Apple 的电子邮件,说我的应用程序是无效的二进制文件:

尊敬的开发者,

我们发现您最近交付的一个或多个问题 “项目名”。要处理您的交货,必须解决以下问题 更正:

iPhone 5 优化要求 - 您的二进制文件未针对 iPhone 5 进行优化。截至 5 月 1 日,所有新的 iPhone 应用和应用更新 提交的必须支持 iPhone 5 上的 4 英寸显示屏。所有应用程序必须 包括适当大小的启动图像。学习更多关于 通过查看 iOS 人机界面指南来支持 iPhone 5。

虽然您不需要解决以下问题,但我们希望 让您了解它们:

非 PIE 二进制文件 - 可执行文件“xyz.app”不是与位置无关的可执行文件。请确保您的构建设置是 配置为创建 PIE 可执行文件。一旦需要更正 已经制作完成,进入版本详情页面,点击“Ready to 上传二进制文件。”继续提交过程,直到应用程序 状态为“等待上传”。然后,您可以提供更正的 二进制。

我已将Target > Build Settings 中的Don't Create Position Independent Executables 选项更改为YES,但我仍然收到上面相同的消息。

【问题讨论】:

    标签: iphone pie-chart


    【解决方案1】:

    现在有一份来自 Apple 的文件解释了这个问题以及如何解决它:QA1788: Building a Position Independent Executable

    将应用程序构建为 PIE 的步骤

    1. 在 Xcode 中,在“目标”部分中选择您的目标,然后单击“构建设置”选项卡以查看其设置。

    2. 对于 iOS 应用,将 iOS Deployment Target 设置为 iOS 4.3 或更高版本。对于 Mac 应用,将 OS X Deployment Target 设置为 OS X 10.7 或更高版本

    3. 验证 Generate Position-Dependent Code 设置为 NO

    4. 确认Don't Create Position Independent Executables 设置为NO

    【讨论】:

    • 感谢您的帮助。我已经阅读了上面给出的链接并在我的 xcode 中应用,我在文件夹“/Build/Products/Debug-iphonesimulator/dkpad.app/dkpad”中的 otool -hv 中测试了我的构建。但根据链接头标志不显示“PIE”。标题标志显示为“NOUNDEFS DYLDLINK TWOLEVEL MH_NO_HEAP_EXECUTION”。我的 mac osx 版本 10.6.8(snow leopad)、xcode 版本 4.0 和 ios 版本 4.3。请为此提供合理的理由。谢谢。
    • 如果 otool 显示您的应用不是 PIE,则可能是某个特定目标覆盖了构建设置。三重检查您的构建设置。同时按住 Option 并从“Product”菜单中选择“Clean Build Folder”,可能 Xcode 没有重新构建应用程序。
    • @VincentGable 当这些设置显式设置为 no 时,您如何实现 PIE 可执行文件?他们现在似乎强制它,构建设置已设置但我收到错误。
    • @AntwanvanHoudt 你能解决这个问题吗?我现在才收到这个警告
    • @JaysonTamayo Apple 似乎已经取消了对 ITC 的限制,但我不会感到惊讶我们将来必须更新 Xcode 来解决这个问题。
    【解决方案2】:

    本周我们的所有应用更新都收到了相同的消息。 您需要将“不创建与位置无关的可执行文件”设置为“否”,将“生成位置相关代码”设置为“否”,这是默认设置。

    关键是你需要将“iOS Deployment Target”设置为4.3或更高版本,否则PIE设置将被忽略。

    您可以使用此命令测试应用程序二进制文件,它会在 PIE exe 的行尾显示“PIE”。 otool -vh MyAppExe

    【讨论】:

    • 感谢您的回复。你有没有成功地在 itune 上发布你的 iphone 应用程序。请解释您回复的最后一行。你能告诉我如果我将“iOS 部署目标”设置为 4.3 或更高版本,那么它将适用于较低版本的 ios。
    • 如果您将“iOS 部署目标”更改为 4.3,那么您的应用程序将不再与旧 iOS 版本兼容,这将显示在 iTunes 中。我们没有对 PIE 进行更改,因为我们仍希望支持较旧的 iOS 版本,但请记住,Apple 的反馈只是一个提醒,您不必进行此更改...。
    【解决方案3】:

    正如文森特在此提到的,拥有一个 PIE 二进制文件:

    • 关注Apple Q&A QA1788
    • 将部署目标设置为 4.3 作为最低操作系统版本(这是 PIE-Binary 的要求)
    • (缺失的部分):确保您没有与 PIE-binary 不兼容的 3rd 方库,否则所有项目都不会为 PIE-Binary 构建。
    • 检查:otool -hv /path/to/MyApp.app/MyApp

    这就是说,Apple 不会强迫您“还”拥有 PIE-Binary 应用程序。所以问题是“他们会强迫这样做吗?什么时候?”

    _oho

    更多信息:http://blog.hoachuck.biz/blog/2013/06/28/non-pie-binary-app-on-ios-could-lead-to-security-issue/

    【讨论】:

    • 如何检查第三方库是否与 PIE 兼容?
    猜你喜欢
    • 2020-05-03
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 2015-08-10
    • 2021-07-25
    相关资源
    最近更新 更多