I performed several additional tests using the procedure proposed by Matt:
- When minimum deployment target is iOS 6 no Assets.car is being
generated.
[UIImage imageNamed:]
returns nil
for JPG images unless ".jpg" extensions is provided as part of the image name
- When minimum deployment target is iOS 7 Assets.car is generated but
it contains only those images which were imported in Asset Catalog
as PNGs. All JPGs get copied outside of Assets.car.
[UIImage imageNamed:]
returns nil
for JPG images unless ".jpg" extensions is provided as part of the image name.
- When minimum deployment target is iOS 8 Assets.car contains all
images. Its size is 13MB.
[UIImage imageNamed:]
returns JPG images correctly even when not specifying ".jpg" extension. Images also load correctly when ".jpg" extension is included
- When minimum deployment target is iOS 9 Assets.car contains all
images. Its size is 11.5MB.
[UIImage imageNamed:]
returns JPG images correctly even when not specifying ".jpg" extension. Images also load correctly when ".jpg" extension is included
I have used the image extractor tool suggested by Matt to extract images from these Assets. I was only able to export from archives for devices which are with Retina and I can confirm that all images had correct resolutions (i.e. only retina size, iPad specific images ignored). The tool, however, saved all of them in PNGs format and so the resulting size of the folder was always bigger then Assets.car.
What is most surprising is that the size of the folder was the same (39.4MB) for cases 3 and 4. Also, the images seem to be exactly the same. So, I really wonder what happens there because there is a difference of 2MB in the size of Assets.car for these cases.
To conclude, we are still not sure if such testing method can be used to accurately mimic the App Thinning behaviour. So, if anyone had a personal experience with this it would be awesome if they could share it.
However, assuming that exporting for specific device for AdHoc produces the same result as actual App Thinning performed by App Store we can conclude that:
- App thinning only kicks in when deployment target is iOS 7 or later
- App thinning for JPG images only works starting from a minimum deployment target of iOS 8
[UIImage imageNamed:]
returns JPG images correctly without providing ".jpg" extension only when JPG images are correctly processed through Asset Catalogs. Which, as mentioned earlier, only happens when minimum deployment target is iOS 8 or later
[UIImage imageNamed:]
always loads correct images if ".jpg" extensions is specified.
The last two conclusions seem to be irrelevant to this question, but I have found several conflicting opinions on Stack Overflow about how to load JPG images correctly with Asset Catalogs. Some people claimed that you can load them without providing ".jpg" extension whilst others complained that this approach doesn't work. I think 3 and 4 above explain in details what is happening in this case and why people get different results.