3

我正在尝试通过我的 Mac 上的 Apple 应用程序加载器实用程序上传 .ipa 文件。当我这样做时,我收到此错误:

错误 ITMS-90094:“无效的启动图像 - 您的应用程序包含带有大小修饰符的启动图像,仅支持使用 iOS 6.0 SDK 或更高版本构建的应用程序。”

该应用程序是使用 Embarcadero RAD Studio XE7 / C++ Builder 中的 iOS 8.2 SDK 构建的。我在我的 Mac 上创建了一个有效的 Adhoc Distribution 移动配置,PAServer 15.0 和 Xcode 6.2 使用它来编译应用程序。我已经在我的项目属性中正确定义了 | 在 iOS 平台上为 Adhoc 分发配置。我已更改为发布模式,并在配置下通过项目管理器选择 Adhoc。我先清理应用程序,然后构建它,然后部署它。完成后,我得到一个在我的测试设备上完美运行的有效 .ipa 文件。

根据 Apple 的说法,当您使用 iOS SDK 5.1 或更早版本构建应用程序时会出现此问题,但包含 Default-568h@2x.png 图像(用于 iPhone 5 的 4 英寸视网膜显示支持)。它说要解决此问题,请针对 iOS 6.0 SDK 或更高版本构建您的应用程序。但正如我所说,我使用的是 iOS 8.2 SDK。我也尝试过 8.1,这是我什至在我的系统上安装的仅有的 2 个 iOS SDK 版本。

它说如果您不打算针对 iOS 6 SDK 构建您的应用程序,请从您的项目中删除 Default-568h@2x.png。我尝试删除此文件,错误消失了,但随后出现另一个错误:“iPhone 5 优化要求 - 您的二进制文件未针对 iPhone 5 进行优化。”

它必须以某种方式从 IPA 文件中检测到错误的版本(我只能假设这是等式的 RAD Studio 方面的问题,而不是 Xcode 或大量其他人会遇到这个问题)。其他帖子使用“部署目标”、“基础 SDK”和“目标 SDK”等术语。

我相信我已经正确设置了所有这些,但是我该如何修复它,以便 Application Loader 正确检测到 XE7 生成的 IPA 是使用比 iOS 6.0 更高的 SDK 构建的?

我尝试过的解决方案(没有成功):

大多数搜索结果都说要使用更新版本的 Xcode(至少 5 或更高版本)构建,但我使用的是最新的 Xcode 版本 6.2。注意:到处都是 6.0 版,我也试过 7.0。项目选项是指目标:所有配置 - iOS 设备平台。

  1. http://207.211.86.211/index.php/answers/my-discussion/upload-to-itunesconnect
    这家伙有同样的问题,并说要验证你所有的项目选项 | 应用程序图像的大小正确。我已经确认我的是。他还建议您确保使用 Apple iOS SDK 的发布版本进行构建。通过工具 | 选项 | 环境选项 | SDK Manager,选择iPhoneOS 8.x并点击“更新本地文件缓存”。这也没有帮助。

  2. https://pjstrnad.com/submitting-application-apple-store-delphi/
    首先他建议你在 Project | 下创建一个自定义的 Info.plist 文件。部署。然后要修复无效图像问题,他说您需要添加 MinimumOSVersion 密钥并将其设置为 6.0。

    添加到 Custom.info.plist:

    <key>MinimumOSVersion</key>
    <string>6.0</string>

  3. 由于我只能发布 2 个链接,因此下一个您必须在 community.embarcadero.com 的 Answers 下搜索“Problems deploying for iOs 8.1”以获取原始帖子。

    在这里,他们建议您安装修补程序 30036“将 iOS 应用程序提交到 Apple AppStore 的修补程序”——我这样做了。他们还建议了 Project Options | 德尔福编译器 | 编译,将“--ios-version-min:6.0”添加到附加选项以传递给编译器。由于我使用的是 BCB,因此不确定这是否会影响我,但我也尝试过。

  4. 一篇关于 stackoverflow 的文章描述了如何在 .IPA 文件上使用 otool 和 grep 来确定版本信息。所以我解压缩了我的 ipa 文件,运行 otool w/ grep,它返回了这个输出:

    cmd = LC_VERSION_MIN_IPHONEOS
    cmdsize = 16
    version = 7.0
    sdk = 7.1

    虽然它没有像我期望的那样说 8.1 或 8.2,但两个版本都是7+。这绝对比 6.0 更新,所以肯定有其他地方 Application Loader 正在从其他地方获取版本。

  5. 更改项目选项 | C++ 链接器:高级:支持的最低 iOS 版本为 6.0。

  6. 更改项目选项 | 德尔福编译器 | 链接:支持的最低 iOS 版本为 6.0。

  7. 尝试创建一个全新的空白多设备应用程序,对其进行配置并通过应用程序加载器上传。这失败并出现相同的确切错误。

4

1 回答 1

0

回答:

在 Embarcadero 支持和来自 Apple 的错误消息/文档之间,我终于弄清楚了问题所在。事实证明,Apple 将允许您尝试将 Ad hoc 应用程序提交到 iTunes Connect,即使它必须是 App Store 移动设备。尽管您尚未向公共 App Store 分发,但正在为选定的用户组部署私有 beta 测试版本,您仍将其作为 App Store 配置提交。不同之处在于它拥有的测试版权利。

我认为 Ad hoc 是指它将通过 TestFlight 进入 App Store 之外的选定数量的设备 - 但事实并非如此(至少对于 TestFlight 而言)。问题源于苹果的错误信息完全没用。错误应该是“您必须使用 App Store 条款,而不是 Ad hoc 或开发条款”,而不是“您包含无效的 6.0 SDK 启动图像”。

更糟糕的是,当 TestFlight 是第 3 方服务时,指示是将其作为 Ad hoc 提交。因此,我们的团队感到困惑,因为苹果购买它时情况发生了变化(但这并不是显而易见的,或者至少在任何 Embarcadero 文档中都没有明确)。

术语也是另一个问题。术语 CERTIFICATE 和 PROVISION 有时似乎可以互换使用或意外地从其中一个或另一个中使用 - 并且区别非常重要。

因此解决方案是使用 App Store Mobile Provision(使用分发证书签名)而不是 Ad hoc。该应用程序现已成功提交到 iTunes Connect。

于 2015-04-23T18:52:29.823 回答