White labeling an iOS app

I currently manage a whitelabeled iOS app. We add targets for each white label client to the main project, and have made most parts of our app configurable via a Theme.plist file.

So, each target includes all the classes for the app but has custom Info.plist, icons, launch screens, font files, and Theme.plist.

We avoided the approach that @dtrotzjr mentioned above because there were a few things outside of the Info.plist file that we needed to change per target... the Provisioning Profile being a good example as well as preprocessor macros to handle the occasional #ifdef for per-client hacks.

It also made it easier for new devs to understand the build process.


I did this at my job and how I did it is I have a python script that I wrote that goes in and manipulates the Info.plist with a list of replacement values that I store in an alternative plist file. We also have a build step script that goes and injects any resources we need for that particular build.

You can manipulate the bundle all you want but you have to do it just before Xcode signs the app. In some cases you might want to go in and edit the Info.plist in the bundle as well which is fine, just do it before the signing step.