We’re using the new Urban Airship iOS plugin for PhoneGap.
In the plugin’s plist file, we’re supposed to enter the app-specific keys needed to enable push notifications.
The problem is we have two versions, free and paid, of the same app, but the plist file only accommodates one version.
Essentially, we need to modify the Objective-C code to read different plist values, depending on whether it’s the free or premium version.
We currently manage both versions with the same code base and Xcode project. Unless we change the plugin code, it seems like we need to create a new Xcode project, which we don’t want to do.
How do we adjust Urban Airship’s Objective-C files to read different values from the plsit file?
Sorry to keep you waiting, I wanted to give you a very detailed answer instead of rushing last night 🙂 So here we go.
First in your project we need to add a new target. Go to your project settings and right click your target. Click duplicate.
You’ll get a new target probably named Target-copy. You’ll also get a new info.plist file just for that target.
Next we’re going to edit our Pro version’s Built Settings. Scroll or search and find Apple LLVM compiler 4.0 Preprocessing. Add to both your Debug and Release configurations. I normally just go with the simple
PRO=1. You also need to addPRO=0to your lite version or it will be undefined when you try to build that version.Now lets look at how to add a custom plist like I’m sure you’ll need. First create two folders. Its important these are folders not groups. In each folder we can create a plist with the exact same filename.
Since Now you can add something to each of them. I just added a key
propertyand a valuepro string/lite string. Finally to the code. In the sample project I made I simple overrodeviewDidLoadbut obviously this will work anywhere. Since the plists have the same name you can load them with one line of code. They’ll never get mixed up because they are only copied to their respective target. If you need to do code level based logic you can use thePROpreprocessor we made.This is the method I use for all my lite/pro version apps so I can share a common codebase without copying it between projects or other complicated systems. It has worked pretty well for me so far 🙂 Happy Coding!
Source
Figured someone may be able to use the project to look at so here it is on GitHub.