I already have a released build for iOS 9+ devices. Now I want to release a new version for only ARKit devices that requires arm64 too. But my build doesn't pass a verification in XCode for itunesconnect release. It shows an error that I can't change target devices range for already released bundleID. But if I change bundleID in XCode it will be another application. I want to provide an update only for ARKit enablers, how can I do it?
-
If that's the same app why don't you just add ARKit capabilities for the devices that can use it and fallback to the old implementation for older devices? You won't be able to release new app under the same bundleID.– Mateusz SzlosekCommented Mar 12, 2018 at 13:51
-
@MateuszSzlosek , ARKit features isn't the base functionality of our app, but we really need it to add for specific devices and remain old app for old devices.– svnvavCommented Mar 13, 2018 at 10:31
1 Answer
You can't have separate builds with the same BundleID shipped to the AppStore. If you really want to have "Something special" for devices that are ARKit capable - Use some kind of checks during the app launch. Here's the quote from Apple
Important All ARKit configurations require an iOS device with an A9 or later processor. If your app otherwise supports other devices and offers augmented reality as a secondary feature, use this property to determine whether to offer AR-based features to the user. If your app requires ARKit for its core functionality, use the arkit key in the UIRequiredDeviceCapabilities section of your app's Info.plist to make your app available only on devices that support ARKit.
So you can use ARConfiguration.isSupported
to check the device capabilities in the runtime. If It's not supported fallback to the "Old" implementation.
In order to compile the code for targets < 11 you can mark methods or even classes with @available(iOS 11.0, *)
like so:
@available(iOS 11.0, *)
func doSomeARStuff() {
if ARConfiguration.isSupported { print("Supported") }
}
In order to call those methods using your existing code do it like:
if #available(iOS 11.0, *) {
doSomeARStuff()
} else {
// Fallback on earlier versions
}