Size of binary for Apple Watch apps - ios

I'm developing an iOS app with a corresponding watchOS app. The watchOS app is not required and the iOS app should still be accesable to people who doesn't have an Apple Watch.
My question is regarding the size of the app; the binary size. Does the people who needs the watchOS app and the people who doesn't download the same binary?
If this is the case, this means that for the non-watch users the download size will be unnecessary big, since it also contains the watchOS binary, right?

Looking at Apple's documentation on App thinning and Bitcode, it seems that they do quite a lot to ensure an elegant and small footprint for apps, including on demand resource download and architecture specific binaries.
That said, it seems that WatchOS components aren't included in this process.

Related

Why is the same app different sizes on different devices

I released my first app in the AppStore right before Apple's holiday break. On the iPhone the size of app listed in the App Store is 15MB. However, the exact same app on iPad is 28.8MB according to AppStore page.
Why is there a the huge size difference if both the apps have everything the same?
Do they? I do not think so.
Apple sends only the images along with the app file that the particular devices needs. The non-retina devices will have really tiny size while the app for the iPhone 6S Plus will be a lot larger.
The term used for that procedure is App Thinning. What I mentioned regarding the images is a part of that and called Slicing
Apple has introduced a concept called App Thinning with iOS 9. It contains three strategies to reduce the download size of you App:
Slicing: In short only the images and resources needed for a specific target device are delivered. If someone downloads the App with iOS 8 or earlier, the full package will be downloaded
Slicing is the process of creating and delivering variants of the app bundle for different target devices. A variant contains only the executable architecture and resources that are needed for the target device
Bitcode: If active, Apple can optimise your code for a specific device. For example deploy with 32 or 64 Bit compiled code
On demand data sources: Must be used explicitely by you

Extract Enterprise app's IPA in iOS 9

As you know, Apple disabled app extraction in iOS 9. But in this case I'm talking about an enterprise app not bought apps from App Store.
Is there anyway to backup or better to say extract IPA of installed apps in an iOS 9 device?
Thanks
Apple remove this feature for various reasons. See:
Why did Apple kill App extraction in iOS 9?
3 very good reasons which we believe pushed Apple to completely remove app extraction from iOS 9:
App Slicing
Because universal apps are destined to be stripped, extracting the .ipa package from an iOS 9 device doesn’t make much sense anymore: it may only be installable on a device with identical resolution.
Frequent Updates Improve Security
Blocking app extraction will effectively shorten the lifespan of stale versions of apps, improving overall security of the iOS ecosystem.
Preserve Disk Use
All these backed up apps quickly add up, and can result in literally tens of gigabytes of outdated apps eating up your precious hard drive space.
If you'd like to have a backup of your app, you can try to use iMazing app for backing up and restoring application data.

Is bitcode required in order to allow users to download only the executable architecture needed for the target device?

My app size is huge, almost 100MB for an ordinary Mahjong game made with Unity3D. I'd like to provide smaller downloads for my audience.
Most of the problem comes from the executable code embedded in the fat binary (armv7 and arm64 architectures). I don't use a lot of images and using On Demand resources/levels does not make much sense in my game.
Looks like App Slicing feature from Apple is the way to go, since it allows iOS 9 users to download from the App Store the app variant containing only the executable architecture needed for the target device.
Since I'm using 3rd party frameworks that don't support bitcode, me question is:
Is bitcode support required for my purposes? Does the App Store require bitcode in order to 'slice' my app for iOS 9 users?
In case bitcode is not required, do I need to set my deployment target to iOS 9 or can I still support iOS >= 7 and take advantage of App Slicing for the iOS 9 users?
1) As you can see in the Apple Doc App Slicing and Bitcode are two different things so yeah, it will work iOS9 users
2) Same link
Note: Sliced apps are supported on devices running 9.0 and later; otherwise, the store delivers universal apps to customers.
So you can continue to target iOS7, Apple will do the job
N.

Does the App Store remove architectures from an IPA?

Since the announcement by Apple that all apps distributed by the App Store require 64-bit support, I've had to build multiple-architecture fat binaries that increase the size of the resulting IPA. Does this size increase directly affect my users, or does the App Store strip out irrelevant architectures from an IPA containing fat binaries when downloading to a device?
It does not appear that they currently do, since that feature was announced for iOS 9.
Slicing is the process of creating and delivering variants of the app
bundle for different target devices. A variant contains only the
executable architecture and resources that are needed for the target
device. You continue to develop and upload full versions of your app
to iTunes Connect. The App Store will create and deliver different
variants based on the devices your app supports.

Restrict future Apple Watch apps to capable devices only

I'd like to restrict the sales of my next app to devices that are able to control an Apple Watch (iPhone 5 at least).
I can't find (in the doc or on Internet) which value for UIRequiredDeviceCapabilities I should put in the info.plist file.
There is currently API for knowing whether a device is paired with Apple Watch.
Even simply from an iOS app review perspective, if a user downloads an app onto their iPhone that app is expected to provide value regardless of any external products.
See Apple's App Review Guidelines for more detail
There is no such API.
As you are also no doubt aware, requiring iOS 9 will also not assist you as it runs on iPhone 4S. While it is speculation, it is possible that this will de facto change if iOS 10 is released in September/October 2016, as expected, as that may remove support for older iPhones that cannot be paired with an Apple Watch (for mostly reasons of performance, unrelated to Apple Watch capability).
However, if you are wanting to do this because you want the app to only be used with the watch, be aware that App Store review requires that apps with WatchKit extensions need to also provide useful functionality in their own right, and cannot be solely the code backend for a watch app. Therefore, you would be expected to provide functionality to users who do not (and even cannot) attach an Apple Watch to their phones.

Resources