【问题标题】:Xcode 10 GM - Invalid Binary Architecture when submitting to App Store Connect?Xcode 10 GM - 提交到 App Store Connect 时二进制架构无效?
【发布时间】:2018-09-12 22:04:44
【问题描述】:

我有一个支持 iOS 11/12 和 watchOS 4/5 的 iOS 和 watchOS 应用。我一直在使用 Xcode 10 beta 将构建提交到 App Store Connect for TestFlight,没有问题。今天我使用 Xcode 10 GM 提交了一个构建,我收到了以下电子邮件:

尊敬的开发者,

我们发现您的应用“littlefeed”最近交付的一个或多个问题。请更正以下问题,然后重新上传。

无效的二进制架构 - iOS 3.0 引入了对多种二进制架构的支持。如果您的二进制文件是为多种架构构建的,则您的 Info.plist 必须具有一个值至少为 3.0 的 MinimumOSVersion 键。此外,如果您的应用程序旨在支持早期的 iPhone 和 iPod touch 型号,您的应用程序必须至少包含 armv6 二进制文件;除非在 Info.plist UIRequiredDeviceCapabilities 键中也存在 armv7 所需的设备功能,或者 MinimumOSVersion 键的值为 4.3 或更高,否则将不接受“瘦”仅 armv7 二进制文件。

有关详细信息,请参阅技术问答 QA1707:http://developer.apple.com/iphone/library/qa/qa2010/qa1707.html

最好的问候,

App Store 团队

问题是,这些信息已经过时了。 MinimumOSVersion 密钥早已被弃用; armv6 是与 iOS 11+ 设备无关的架构;到 QA1707 的链接已失效;等等。Google 和 Stack Overflow 上的所有相关问题往往可以追溯到 2012 年或更早,所以我实际上并不知道问题是什么。我最好的猜测是它与 Apple Watch Series 4 现在是 64 位处理器的事实有关,也许我需要配置我的手表应用程序和手表扩展目标以某种方式来处理它?

如果有人有任何想法,将不胜感激。

【问题讨论】:

  • 那么你的最低操作系统版本是多少?它在您的 .plist 中设置正确吗?
  • 是的,iOS 应用程序和 iOS 扩展程序中的 11.2,以及 watchOS 应用程序和扩展程序中的 4.0。就像我说的,直到今天将构建提交给 TestFlight 都没有问题。
  • 你使用 cocoapods 还是其他依赖管理器?如果是这样,请在下面查看我的答案

标签: ios xcode


【解决方案1】:

我们遇到了同样的问题,并通过将 watchextension 和 watchapp 的部署目标设置为 3.0(或更高版本)来修复它。现在还要确保手表中使用的每个框架也将部署目标设置为 3.0(或更高)。因此,如果您使用 cocoapods(或任何其他依赖管理器),请确保通过 cocoapods 安装的框架也将 watch 的部署目标设置为 3.0。

【讨论】:

  • 是的,它是 Cocoapods 手表框架。我昨晚也通过反复试验发现了这一点。是否有一些文档说明我们的手表框架不能再针对 2.0 了?仍然很乐意接受您的回答!
  • 不,我没有在任何地方看到它...我猜这是一个 iTunesConnect 错误。因为电子邮件说“iOS 3”......这根本没有意义。我们开了一张票...如果我们发现更多信息,我会及时通知您。
【解决方案2】:

我有一个相同的,但对我来说,将二进制文件上传到 appStoreConnect 时出错:

错误 ITMS-90081:“此捆绑包无效。应用程序构建更多 不止一种架构需要 iOS 部署目标 3.0 或 稍后。”

这需要手动检查(并将其中一些更改为 3.0)project.pbxproj 文件(主项目和 pod)中的每个 WATCHOS_DEPLOYMENT_TARGET

【讨论】:

  • 谢谢!在 pod install 之后,我必须将它添加到我们的 CI 以替换 pod 文件中的所有目标: find MainApp/pods -name '*.pbxproj' -print0 | xargs -0 sed -i "" "s/WATCHOS_DEPLOYMENT_TARGET = 2.0/WATCHOS_DEPLOYMENT_TARGET = 4.0/g"
【解决方案3】:

为了更容易为 Pod 中的所有依赖项设置正确的 WATCHOS_DEPLOYMENT_TARGET,请将其添加到 Podfile 的末尾。如果您需要更高版本作为部署目标,您可以替换 3.0,二进制验证的最低要求是 3.0

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.build_settings['SDKROOT'] == 'watchos'  
              config.build_settings['WATCHOS_DEPLOYMENT_TARGET'] = '3.0'  
            end
        end
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多