【问题标题】:Invalid Launch Image error uploading IPA with Application Loader ERROR ITMS-90094使用 Application Loader 错误 ITMS-90094 上传 IPA 时出现无效的启动图像错误
【发布时间】:2015-06-09 02:05:17
【问题描述】:

我正在尝试通过我的 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:

    MinimumOSVersion
    6.0

  3. 由于我只能发布 2 个链接,因此下一个链接您必须在 community.embarcadero.com 的“为 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. 尝试创建一个全新的空白多设备应用程序,对其进行配置并通过应用程序加载器上传。这会失败并出现同样的错误。

【问题讨论】:

  • 如果是新应用,必须使用 64 位编译器编译。这和你的问题有关系吗?
  • 我刚得到 XE8 并为 iOS 64 位和 32 位编译为通用 IPA。上传到 TestFlight 时,我仍然收到 Invalid Launch Image 错误。

标签: ios xcode delphi firemonkey c++builder-xe7


【解决方案1】:

答案:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多