Best Option For Enabling App Rebranding

Looking for confirmation or suggestions as to the best approach with rebranding applications.


Essentially, our use case is that we have an app, which is being provided to other companies. The app is intended for internal distribution through each company’s given enterprise distribution channel/provider. Included with the offering is that each customer has the option to rebrand the app as they see fit. This rebranding not only includes app id, app name, version, etc., but also app icon and imagery throughout the app.


In the past, we would just package the assets that we want changed, into the main project bundle. Then we would provide instructions on rebranding via swapping out those images in the xcarchive before resigning. While this still works, my assumption is that we should really just be using asset catalogs for managing all images. However, with Xcode packaging up all assets catalogs into an assets.car file, it changes our traditional resign instructions for customers, and depending on the version of iOS we support back to, it also adds some complexity with images being directly in the bundle as well as in the .car file. With all that being said, it looks like in the documentation here: https://help.apple.com/xcode/mac/current/#/dev10510b1f7it clearly calls out ‘For iOS 11.0 apps and later, the app icon is required to be in an asset catalog.’ In this case it specifically refers to public app store releases, but I figure the sentiment likely matches enterprise distributions, even if it’s not actually enforced.


So essentially my question is what’s the recommended option below:


Option 1: Leave all assets in the top-level project to be bundled with the app, not in an asset catalog. Then tell the app to specifically not use Asset Catalogs for app icon and launch image. In this case we still could put some assets in asset catalogs, as long as they weren’t anything customers are going to be changing. Then when the customer gets the app, they just copy in their specific images and make any other plist modifications (title, bundle id, version, etc.), and resign the app. However, in this scenario, that build could never be distributed to the public app store, as the app icon is not in an asset catalog.


Option 2: Put all customizable assets in an asset catalog, including app icon. When we send the xcarchive file to the customer, we then also provide the .xcassets directory/files. Then, as part of their resigning/rebranding process, they would have to open the .xcassets in Xcode and drag in their updated assets. After doing so, they would run the “xcrun actool ….” command on the .xcassets folder to turn it into the Assets.car file. From there, it’s the normal resigning process, with the additional step of replacing the current build’s Assets.car file with the one they generated, prior to signing.


Option 3: Is there a better option altogether?


Thanks! Any help is appreciated!