watchOS 多个构建目标:"Any watchOS Device" 对比 "armv7k, arm64_32"

watchOS Multiple Build Targets: "Any watchOS Device" vs "armv7k, arm64_32"

我有一个针对 watchOS 6 及更高版本的 watchOS-only Xcode 项目,用 SwiftUI 编写,其所有依赖项由 Swift 包管理器处理。我在 Xcode 12 中注意到该项目实际上有 2 个构建目标。

一个标记为“任何 watchOS 设备”,另一个标记为“任何 watchOS 设备(armv7k,arm64_32)”。

顺便说一句,我手动添加了 2 个 Series 3 模拟器来调试一位用户遇到的生产问题。

这两个单独的构建目标之间有什么区别吗?如果是这样,我应该使用哪一个来提交到 App Store 以获得最大兼容性?

Is there any difference between these two separate build targets?

最初,我认为任何 watchOS 设备 将是 64 位的,另一个是 32 位的,但在查看档案后,它们都表明是 arm64。

同样,我在没有添加 Series 3 的情况下看到了这两个构建目标。在比较 xcarchive 文件后,它们似乎是相同的,这加深了神秘感。 ‍♂️

还找到了这个人,大体上在谈论 CPU 架构:https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/

arm64_32 is a variant of arm64 with 32-bit pointer sizes, used on Apple Watch Series 4 and later.

回到问题:

which one should I be using for submitting to the App Store for maximum compatibility?

我会选择不太具体的选项 任何 watchOS 设备,直到您找到选择其他方式的理由。

经过一些研究,我相信我有一个解释。

我有 运行 以下命令来检查各种 ARCHS 构建设置:

xcodebuild -showBuildSettings -workspace MyWorkspace.xcworkspace -scheme Watch -sdk watchos | grep ARCHS

有效目的地列表有只有一个 watchOS 条目:

{ platform:watchOS, id:dvtdevice-DVTiOSDevicePlaceholder-watchos:placeholder, name:Any watchOS Device }

构建设置为:

    ARCHS = armv7k arm64_32
    ARCHS_STANDARD = armv7k arm64_32
    ARCHS_STANDARD_32_BIT = armv7k arm64_32
    VALID_ARCHS = arm64_32 armv7k

我认为 Xcode 中的不同目的地是一个 UI 错误,源于 ARCHS_STANDARDVALID_ARCHS 之间的参数顺序不同这一事实。如果您要从命令行构建应用程序,则不会有两种选择。