views:

60

answers:

2

I have made an application for the iPhone but it is required to be released with multiple brandings. Eg Differernt:

  • App Name
  • Icons
  • Default.png
  • Text replaced for the app name in IB
  • Colour schemes for all images such as backgrounds, icons etc

I'm not sure of the best way to do this.

I was thinking of a plist file for each branding that would have the name of the files to load eg "brand1_background.png" for brand1 but that would get very messy with the text replacement. It would also mean that all brands images would be in the package making it of larger size.

Looking around a bit I could have an 'images' folder for each brand and drag it in to build that brand's app, however the text is still an issue.

I'm wondering how everyone else would handle this situation as I want to do it as right as possible.

+3  A: 

There are 2 different aspects to this problem, which I'd describe as follows:

  1. Stuff that can be changed dynamically
  2. Stuff that can't be changed dynamically

The first category is super easy. If you have your colo(u)r schemes stored in some easily-readable format like a plist or whatever, you can just load up that file during app startup, and build UIColor objects from them and use those where appropriate. The same goes for images used within the app itself. This is not a hard problem.

The second category is trickier. This is stuff that has to be baked into the application because of code signing. This means that the things like the App Name, the icon, Default.png, etc, all have to be changed before the app is signed in the compilation process. So what I'd do is bake up a bunch of scripts to take your branding information (name, image files, icons, etc) and load it up, then generate your Info.plist file and whatnot. This should be done as one of the first phases of your compilation.

For what it's worth, I work on an application where we do exactly this process, and it works pretty well. It's a bit tedious to update when we change what resources get branded, but I'm not sure there's any decent way around that.

Dave DeLong
+3  A: 

Create a target for each of your brandings. For each single target you can add different files (e.g. images) and set an app name. You can even use the same file names (but stored under a different location) and you can build your brand-apps pretty fast.

Stefan
+1 this is also a good approach. The main downside comes when you have lots of different brands and/or lots of different resources. Changing any aspect of the branding (adding/removing/renaming resources) can become quite tedious.
Dave DeLong