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

时间:2015-04-04 00:18:49

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

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

  

错误ITMS-90094:"无效的启动图像 - 您的应用包含启动   具有尺寸修饰符的图像仅支持使用的应用程序   iOS 6.0 SDK或更高版本。"

该应用程序是使用Embarcadero RAD Studio XE7 / C ++ Builder中的iOS 8.2 SDK构建的。我创建了一个有效的Adhoc Distribution移动设备,它位于我的Mac上,由PAServer 15.0& Xcode 6.2编译应用程序。我在我的项目属性中正确定义了在iOS平台上配置Adhoc分发。我已更改为Release模式,在Configuration下,我通过Project Manager选择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"。

我相信我已经正确设置了所有这些,但是如何解决这个问题,以便应用程序加载程序正确检测到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并单击&#34;更新本地文件缓存&#34;。这也没有帮助。

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

    添加到Custom.info.plist:

    &lt; key&gt; MinimumOSVersion&LT; /密钥GT;
    &LT;串GT; 6.0&LT; /串GT;

  3. 由于我只能发布2个链接,所以下一个链接你必须在Answers下的community.embarcadero.com上搜索&#34;为iOs 8.1&#34;部署的问题;原帖。

    在这里,他们建议您安装Hotfix 30036&#34; Hotfix,用于将iOS应用程序提交到Apple AppStore&#34; - 我做了。他们还建议项目选项| Delphi编译器|编译,添加&#34; - ios-version-min:6.0&#34;到传递给编译器的其他选项。我不确定这会影响我,因为我使用BCB,但我也尝试过。

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

    cmd = LC_VERSION_MIN_IPHONEOS
    cmdsize = 16
    版本= 7.0
    sdk = 7.1

    虽然它并没有像我期望的那样说8.1或8.2,但两个版本都是7+。这肯定比6.0更新,因此必须有其他地方Application Loader从中获取版本。

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

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

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

1 个答案:

答案 0 :(得分:0)

<强>答案:

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

我认为Ad hoc意味着它会通过TestFlight进入App Store以外的部分设备 - 但事实并非如此(至少在TestFlight上)。问题源于Apple的错误信息完全没用。该错误应该说“您必须使用App Store配置,而不是Ad hoc或开发提供”而不是“您包含6.0 SDK的无效启动映像”。

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

术语也是另一个问题。 CERTIFICATE和PROVISION这两个术语有时似乎可以从一个或另一个中互换或偶然使用 - 这种区别非常重要。

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