使用Application Loader上传IPA时出现无效的启动图像错误 ERROR ITMS-90094。

3
我正在尝试通过苹果的Application Loader工具上传.ipa文件。然而,我遇到了以下错误:
ERROR ITMS-90094:“无效的启动图像 - 您的应用程序包含一个大小修饰符的启动图像,该修饰符仅适用于使用iOS 6.0 SDK或更高版本构建的应用程序。”
该应用程序是使用iOS 8.2 SDK在Embarcadero RAD Studio XE7 / C ++ Builder中构建的。我已经创建了有效的Adhoc Distribution移动配置文件,并将其放在我的Mac上,并由PAServer 15.0和Xcode 6.2用于编译该应用程序。我在我的项目属性| iOS平台的Adhoc分发中正确定义了它。我切换到发布模式,并通过项目管理器选择Adhoc。我首先对该应用程序进行了清除,然后进行构建和部署。最后,我得到了一个有效的.ipa文件,在我的测试设备上完美运行。
根据苹果公司的说法,如果您使用iOS SDK 5.1或更早版本构建应用程序,但包括Default-568h@2x.png图像(用于iPhone 5的4英寸视网膜显示屏支持),则会出现此问题。它建议解决此问题时使用iOS 6.0 SDK或更高版本构建应用程序。但是如我所述,我正在使用iOS 8.2 SDK。我还尝试过8.1,这是我系统中唯一安装的iOS SDK版本。
它说,如果您不打算使用iOS 6 SDK构建应用程序,则从项目中删除Default-568h@2x.png。我尝试删除此文件,错误消息就消失了,但是随后又出现了另一个错误:“iPhone 5优化要求 - 您的二进制文件未针对iPhone 5进行优化。”
它必须以某种方式检测到IPA文件中的错误版本(我只能假设这在RAD Studio方程式的一侧是问题,而不是Xcode或其他人会遇到此问题)。其他帖子使用类似于“部署目标”,“基础SDK”和“目标SDK”的术语。
我相信我已正确设置所有内容,但如何修复XE7生成的IPA,使其被Application Loader正确检测为是使用iOS 6.0之后的较新SDK构建的呢?
我尝试过以下解决方法(均未成功):大多数搜索结果都说要使用更新的Xcode版本(至少为5或更高版本),但我正在使用最新的Xcode版本6.2。注意:无论哪里都提到版本6.0,我也尝试过7.0。项目选项指的是目标:所有配置 - iOS设备平台。
  1. 这位用户遇到了相同的问题,他建议您验证所有的Project Options | Application images是否都是正确的尺寸。我已经验证过我的图片是正确的。他还建议您确保使用的是苹果iOS SDK的发布版本。通过Tools | Options | Environment Options | SDK Manager,选择iPhoneOS 8.x并单击"Update Local File Cache"。但这也没有帮助。

  2. 首先,他建议您在Project | Deployment下创建一个自定义的Info.plist文件。然后为了解决无效的图像问题,他说您需要添加MinimumOSVersion key,并将其设置为6.0。

    在Custom.info.plist中添加:

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

  3. 由于我只能发布2个链接,所以你需要在community.embarcadero.com的Answers中搜索"Problems deploying for iOs 8.1"来查看原始帖子。

    在那里,他们建议您安装Hotfix 30036 "Hotfix for Submitting iOS Applications to Apple AppStore" - 我已经安装了。他们还建议在Project Options | Delphi Compiler | Compiling中添加"--ios-version-min:6.0"到Additional options to pass to the compiler。不确定这是否会影响我,因为我正在使用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. 将Project Options | C++ Linker: Advanced: Minimum iOS version supported更改为6.0。

  6. 将Project Options | Delphi Compiler | Linking: Minimum iOS version supported更改为6.0。

  7. 尝试创建一个全新的空白多设备应用程序,进行配置并通过Application Loader上传。这与相同的错误失败。


如果这是一个新的应用程序,则必须使用64位编译器进行编译。这与你的问题有关吗? - Doug Rudd
我刚刚获得了XE8,并编译为iOS 64位和32位通用IPA。但是,当上传到TestFlight时,仍然会出现“无效的启动图像”错误。 - Dann Daggett
1个回答

0

答案:

通过 Embarcadero 的支持和苹果的错误消息/文档,我最终弄清了问题所在。原来,即使必须是 App Store 移动配置文件,苹果也允许您尝试并提交 Ad hoc 应用程序到 iTunes Connect。尽管您还没有向公共 App Store 分发,但正在向一组特定用户部署私有测试版本,仍然将其提交为 App Store 配置文件。区别在于它具有 beta 权限。

我认为 Ad hoc 意味着它将通过 TestFlight 发送到 App Store 之外的一些设备 - 但实际情况并非如此(至少在 TestFlight 中不是这样)。问题源于苹果的错误消息完全没有用。错误应该说“您必须使用 App Store 配置文件,而不是 Ad hoc 或开发配置文件”,而不是“您包含了一个无效的 6.0 SDK 启动图像”。

更糟糕的是,当 TestFlight 是第三方服务时,说明书上的指示是要将其提交为 Ad hoc。因此,我们的团队感到困惑,因为这在苹果收购它时发生了变化(但这在任何 Embarcadero 文档中都没有明确说明)。

此外,术语也是另一个问题。证书(CERTIFICATE)和配置文件(PROVISION)有时似乎可以互换使用或者从其中一个不小心使用到另一个上 - 而区分它们非常重要。

因此,解决方案是使用应用商店移动配置文件(使用发布证书签名),而不是Ad hoc配置文件。该应用程序现已成功提交到iTunes Connect。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接