9

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

亲爱的开发者,

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

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

尽管您不需要解决以下问题,但我们想让您了解它们:

非 PIE 二进制文件 - 可执行文件“xyz.app”不是与位置无关的可执行文件。请确保您的构建设置已配置为创建 PIE 可执行文件。完成所需的更正后,转到“版本详细信息”页面并单击“准备上传二进制文件”。继续完成提交过程,直到应用状态为“等待上传”。然后,您可以提供更正后的二进制文件。

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

4

3 回答 3

8

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

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

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

  2. 对于 iOS 应用程序,设置iOS Deployment TargetiOS 4.3 或更高版本。对于 Mac 应用程序,设置OS X Deployment TargetOS X 10.7 或更高版本

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

  4. 验证Don't Create Position Independent Executables设置为NO

于 2013-05-24T20:47:57.630 回答
5

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

关键是您需要将“iOS 部署目标”设置为 4.3 或更高版本,否则 PIE 设置将被忽略。

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

于 2013-05-09T08:40:30.387 回答
0

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

  • 关注苹果问答 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/

于 2013-07-18T15:50:39.770 回答