I have a watchOS-only Xcode project targeting watchOS 6 and above, written in SwiftUI and all its dependencies handled by Swift Package Manager. I’ve noticed in Xcode 12 there are actually 2x build targets for this project.
One is labelled "Any watchOS device" and the other is labelled "Any watchOS device (armv7k, arm64_32)".
As a probable aside, I manually added 2x Series 3 simulators to debug a production issue that one user was encountering.
Is there any difference between these two separate build targets? If so, which one should I be using for submitting to the App Store for maximum compatibility?
2
Answers
Initially, I thought the Any watchOS device is gonna be 64-bit and the other is 32-bit, but after looking at the archives, they both indicate arm64.
Likewise, I see both of those build targets without adding the Series 3. After comparing the xcarchive files, they appear to be identical which deepens the mystery. 🤔 🤷♂️
Also found this guy, talking about CPU architectures in general: https://docs.elementscompiler.com/Platforms/Cocoa/CpuArchitectures/
Back to the question:
I’d go with the less specific option Any watchOS device until you discover a reason to choose otherwise.
After doing some research, I believe I have an explanation.
I have run the following command to inspect the various
ARCHS
build settings:The valid destinations list has only one watchOS entry:
And the build settings are:
I believe the disparate destinations in Xcode are a UI bug, stemming from the fact that the order of params differs between
ARCHS_STANDARD
andVALID_ARCHS
. If you were to build the app from the command line, there would not be two choices.