purchase acomplia online
buy cialis on internet
cheap viagra overnight delivery
find cheap viagra online
buy viagra us
acomplia prescription
order viagra no prescription
cheap cialis overnight delivery
cheapest propecia
purchase viagra overnight delivery
buy cheap soma
purchase levitra
cialis bangkok
propecia generic
compare viagra prices
cheap generic propecia
order ultram
buy cialis us
cialis approved
propecia no prescription
online soma
buy viagra no prescription required
order no rx cialis
cheap propecia
order viagra no prescription required
cheap propecia tablets
purchase propecia online
cheapest viagra
levitra prescription
cheapest cialis
cheap tramadol tablets
where to buy viagra
buy viagra from india
buy tramadol online
buying generic viagra
buying cialis
buy viagra without prescription
cialis for order
cheap cialis online
cialis from canada
viagra for sale
buy cialis cheap
purchase cialis overnight delivery
buy cialis online
discount cialis online
buy cheapest cialis on line
viagra prices
order viagra from canada
price of viagra
cheap generic cialis
cialis buy online
order cialis without prescription
order viagra in us
cheap viagra
buy levitra cheap
cheap viagra in uk
soma without a prescription
purchase viagra no rx
generic levitra
cialis pills
buy viagra low price
price of propecia
buying viagra
cheap viagra from uk
cialis overnight delivery
cialis pharmacy online
cialis drug
cheapest viagra price
lowest price viagra
discount acomplia
order viagra
order no rx viagra
buy generic propecia
tramadol online stores
free viagra
online propecia
cialis cheap price
online viagra
cialis sales
soma without prescription
online pharmacy cialis
soma online stores
buy propecia cheap
acomplia prices
find cialis without prescription
order cialis in us
buy tramadol
viagra pills
cheapest propecia prices
viagra us
cialis online
cheap cialis tablet
acomplia sale
cheap cialis without prescription
cheapest soma
certified cialis
order cialis
purchase viagra without prescription
discount cialis no rx
order propecia
order cialis on internet
buy cialis from india
cialis buy
purchase ultram online
overnight cialis
cialis without a prescription
cialis cheapest price
viagra online stores
cheap price cialis
tramadol no prescription
buy viagra
discount cialis without prescription
price of acomplia
levitra prices
purchase cialis online
generic cialis
buy tramadol cheap
purchase soma online
find cheap viagra
soma prescription
lowest price propecia
find viagra online
viagra price
levitra online stores
order viagra on internet
buy cialis generic
order cialis from us
buy cheap cialis
cheapest levitra
soma discount
acomplia pharmacy
online pharmacy viagra
order viagra online
cheap cialis from usa
ultram without prescription
levitra online
cheap acomplia tablets
buy cheap propecia online
drug viagra online purchase
cheap viagra tablets
where to buy tramadol
find discount viagra online
pharmacy cialis
buy ultram cheap
viagra from canada
cheap cialis internet
cheap cialis no rx
tramadol without prescription
acomplia
cheap generic levitra
cialis in australia
generic ultram
order levitra online
no rx viagra
buy ultram without prescription
buy no rx viagra
cheap cialis no prescription
buy viagra from us
where to buy acomplia
viagra side effects
cheapest generic cialis online
generic acomplia
cheap ultram tablets
buy cialis lowest price
viagra online without prescription
ultram generic
acomplia without a prescription
buy cheapest viagra on line
buy cheap viagra
buy generic ultram
cheap viagra in canada
order acomplia
cialis online cheap
soma
low cost cialis
cheap cialis on internet
cheapest generic viagra
where to buy levitra
cheapest cialis online
order cialis in canada
discount tramadol
lowest price tramadol
find viagra
viagra free delivery
viagra malaysia
generic viagra
buying viagra online
cialis canada
order cialis no prescription
cialis medication
viagra tablets
viagra buy drug
order viagra in canada
cialis free sample
levitra without a prescription
cialis pill
cialis buy drug
ultram without a prescription
cialis in malaysia
where to buy soma
cialis online without prescription
cheapest viagra prices
generic soma
ultram pharmacy
viagra cheap drug
buy discount cialis
order tramadol
order cialis no prescription required
buy cialis in canada
buy discount cialis online
soma cheap
viagra online pharmacy
viagra medication
buy soma cheap
cialis internet
viagra sale
buy viagra in us
discount ultram
buy tramadol without prescription
cheap soma
lowest price ultram
order cialis overnight delivery
viagra
compare viagra prices online
sale viagra
order cheap cialis online
cialis free delivery
cialis information
buy cialis no rx
viagra internet
order tramadol online
discount levitra
viagra online review
online cialis
acomplia online cheap
find viagra no prescription required
lowest price for cialis
buy viagra online
viagra drug
pharmacy viagra
cialis india
cialis without rx
purchase cialis no rx
viagra overnight delivery
propecia without prescription
buy viagra cheap
buy propecia without prescription
viagra no prescription
order acomplia online
buy cheap acomplia online
buy cheap ultram online
cheap generic acomplia
cheap cialis
viagra information
cheap cialis in canada
purchase cialis without prescription
lowest price soma
buy soma without prescription
buy viagra on internet
find cheap cialis
buy cheap propecia
propecia online stores
purchase cialis
cialis no online prescription
acomplia no prescription
viagra without rx
cialis australia
viagra approved
viagra in malaysia
cialis order
tramadol pharmacy
cialis without prescription
cialis sale
buy generic viagra online
find cialis on internet
cialis purchase
buy cheap viagra internet
price of soma
find discount cialis
find no rx cialis
levitra no prescription
viagra canada
cialis from india
cheapest ultram prices
discount viagra overnight delivery
viagra in uk
drug cialis
propecia for sale
levitra cheap
order viagra without prescription
where to order viagra
cheap propecia online
find discount viagra
purchase soma
viagra no rx
generic viagra online
cialis vendors
cost of cialis
online tramadol
buy cheap tramadol
lowest price cialis
buying cialis online
order discount viagra online
cheapest cialis price
cialis rx
cialis no rx
soma pharmacy
ultram cheap
cialis discount
cost of viagra
buy no rx cialis
acomplia without prescription
soma prices
buy cialis from us
lowest price acomplia
order viagra from us
discount soma
viagra free sample
where to order cialis
order discount cialis
purchase tramadol
buy viagra from canada
compare cialis prices
cheap cialis pill
buy cheap cialis online
purchase tramadol online
cheap cialis pharmacy
acomplia generic
propecia pharmacy
buy viagra overnight delivery
purchase levitra online
cheap viagra pill
buy cialis without prescription
tramadol for sale
viagra india
propecia
viagra buy online
find viagra on internet
buy viagra lowest price
order discount cialis online
order ultram online
cost viagra
cheap tramadol online
best price for cialis
acomplia discount
buy levitra without prescription
tramadol prices
cheap viagra online
propecia prices
ultram pills
buy generic acomplia
cialis uk
online levitra
propecia discount
drug cialis online purchase
buy viagra internet
ultram online
tramadol generic
cialis overnight shipping
soma pills
levitra pharmacy
cheap viagra tablet
cheap generic tramadol
ultram online stores
buy cheap acomplia
buy discount viagra online
generic propecia
cialis malaysia
viagra online cheap
ultram online cheap
viagra without a prescription
buy cialis no prescription required
cheapest viagra online
free cialis
cheap generic ultram
viagra pharmacy
levitra sale
order soma
tramadol discount
purchase acomplia
viagra cheap price
buy viagra online cheap
buy generic cialis
fda approved cialis
cheap cialis in usa
ultram prices
buy viagra no rx
order generic viagra
online ultram
cheap cialis from uk
cialis online pharmacy
cialis prescription
lowest price levitra
buy cialis
cheap levitra online
sale cialis
cialis us
levitra pills
propecia prescription
generic tramadol
cheapest tramadol prices
cialis generic
discount viagra online
buy viagra on line
online acomplia
propecia online
levitra for sale
order viagra cheap online
order propecia online
cheapest levitra prices
price of tramadol
viagra from india
buy propecia online
fda approved viagra
price of ultram
levitra
viagra purchase
soma sale
buy generic tramadol
buy acomplia online
discount viagra
cheap soma online
cheap cialis in uk
buy discount viagra
viagra vendors
order viagra no rx
discount cialis
buy cialis online cheap
cialis online stores
buy soma
viagra in us
buy ultram online
best price viagra
cialis tablet
buy ultram
viagra pharmacy online
cheap viagra without prescription
find cialis no prescription required
viagra no online prescription
cheap levitra tablets
discount propecia
cheap viagra no prescription
buy cheap levitra
ultram
where to buy propecia
cheap acomplia
find no rx viagra
viagra generic
overnight viagra
ultram prescription
cheap viagra from canada
purchase ultram
order cheap cialis
acomplia pills
viagra discount
tablet cialis
soma online cheap
viagra australia
cialis for sale
purchase propecia
cheap ultram
generic cialis cheap
generic cialis online
cialis in bangkok
buy levitra online
cost cialis
no prescription cialis
lowest price for viagra
find discount cialis online
price of levitra
cheap tramadol
buy cialis from canada
buy cheapest viagra
cialis online review
viagra cost
levitra without prescription
price of cialis
drug viagra
ultram for sale
buy cialis internet
viagra in bangkok
viagra cheap
compare cialis prices online
cheap soma tablets
certified viagra
soma for sale
buy cheap levitra online
buy viagra in canada
cheap levitra
tablet viagra
cheap viagra from usa
viagra buy
cialis no rx required
buying generic cialis
order viagra overnight delivery
cialis no prescription
propecia online cheap
viagra prescription
tramadol
cheapest tramadol
cialis in uk
viagra cheapest price
tramadol online cheap
order cialis from canada
buy levitra
cialis overnight
no rx cialis
buy generic soma
cialis tablets
viagra no rx required
viagra online
buy generic levitra
viagra overnight
buy cialis overnight delivery
approved viagra pharmacy
viagra pill
buy propecia
cheap viagra no rx
buy cheap tramadol online
viagra sales
best price cialis
viagra overnight shipping
find cialis
viagra in australia
cheap generic viagra
tramadol sale
propecia pills
cialis side effects
cialis
buy cheapest cialis online
cheapest ultram
buy cheap cialis internet
discount viagra without prescription
discount viagra no rx
buy acomplia without prescription
acomplia cheap
levitra online cheap
acomplia for sale
buy cheapest viagra online
viagra order
ultram no prescription
buy soma online
find viagra without prescription
tramadol online
discount cialis overnight delivery
acomplia online
cheap viagra on internet
ultram sale
buy cheap soma online
propecia without a prescription
cheap cialis from canada
buy cialis in us
buy acomplia cheap
find cialis online
viagra rx
ultram discount
order cheap viagra online
tramadol without a prescription
cheap generic soma
order cheap viagra
order generic cialis
viagra uk
order soma online
tramadol prescription
purchase viagra online
propecia cheap
cheap viagra pharmacy
tramadol pills
order levitra
viagra tablet
cheap acomplia online
best price for viagra
tramadol cheap
levitra discount
cheapest cialis prices
cheap viagra in usa
cheapest acomplia prices
find cheap cialis online
buy cheap viagra online
no prescription viagra
generic viagra cheap
cheap price viagra
purchase viagra
levitra generic
where to buy ultram
cialis in us
cheapest generic viagra online
acomplia online stores
cialis cheap drug
soma online
buy acomplia
buy cialis low price
cheapest generic cialis
viagra for order
where to buy cialis
cialis cheap
order cialis no rx
soma no prescription
approved cialis pharmacy
order discount viagra
propecia sale
low cost viagra
order cialis cheap online
cheapest soma prices
buy cialis on line
buy generic cialis online
cialis price
cheap cialis tablets
cheap viagra internet
cialis pharmacy
order cialis online
viagra bangkok
buy cheap ultram
soma generic
buy viagra generic
cialis prices
buy generic viagra
viagra without prescription
cheap ultram online
cheapest acomplia
buy cheapest cialis
cialis costThe Mac developer scene is loaded with a lot of helpful and supportive developers out there, sharing ideas, code and encouragement with one another. I’ve benefitted from the development community, as have the Mori and Clockwork code. I say this not only as one who’s currently putting new code into them, but seeing the comments Jesse left in the code before me!
So I’d like to drop an idea into your lap you might find useful for the right type of application. As there are different types of software one can develop, e.g., operating systems, utilities, paint programs and the like, they have particular usage characteristics that they encourage. Some, like digital notebooks and desktop timers for example *cough*, tend to remain in operation while the user is logged into his account. Usually, this isn’t a problem for the user. Unless, of course, the user is also someone further developing said software. Then several questions have to be answered, such as, “How do I run unit tests on builds while still running a stable version of my app?” and “How do I try out the latest build without affecting the files which are currently open in my app?”
On operating systems based on more primitive process management, it isn’t troublesome because each built application is fairly independent of others, and often multiple invocations of a single app can be run concurrently. It wasn’t problematic on the Mac either back on MacOS 9 and earlier, and even in the early MOX releases. But now with Launch Services, running test versions of apps you run on an all-day basis can be problematic. It’s best to give that test version some different signature so its defaults and file changes don’t corrupt your normal environment.
Note that this tip doesn’t prevent two versions from munging the same files; even two unrelated apps can mess up a data file if they’re updating it at the same time. What this tip does is provide an alternate identity, if you will, for test builds so MOX doesn’t try to hand it the same data set it gives the release builds of your app. You mustn’t try to open files in the test build that are currently opened by a release build.
Here’s how I do it:
1. In the Info.plist file, use the C pre-processor’s conditional compilation directive to give your app its normal metadata when a release build is made, but a special set of metadata for all other build configurations:
#if defined(Release)
<key>CFBundleIdentifier</key>
<string>com.apokalypsesoftware.Mori</string>
#else
<key>CFBundleIdentifier</key>
<string>com.apokalypsesoftware.Mori-debug</string>
#endif
Update: I forgot to mention that Xcode 3 and later versions now use specialized editors for the Info.plist files. To override this editor selection, bring up the file’s Info window (by selecting the file and pressing cmd-I) or the Inspector window and change the File Type setting from “text.plist.whatever” to “text”. Once you add the conditional to Info.plist you can change File Type back and access Info.plist in its raw form from its target’s Properties tab. That way, you can view it in either mode within Xcode. However, making any changes in Xcode’s plist editor will wipe out any conditional directive in the file, so use it only for reviewing current settings, not for actual editing!
2. In the Target Info window (brought up via the ‘Project > Edit Active Target “Mori”‘ menu item), select the Build tab, specify “All Configurations” for the Configuration pop-up menu, and enter “plist” in the search toolbar widget to bring up the relevant setting items.

3. For the “Info.plist Other Preprocessor Flags” setting, enter -traditional as the value. While not needed to support the test version twin, it will help to prevent any URLs included in the Info.plist from being swallowed up by the pre-processor and possibly causing you sleepless nights because neither MOX nor the Xcode build system have the slightest idea of what the proper format for URLs are, but will behave erratically when it isn’t just so. So it’s best to make it a non-issue from the start. (No charge for that and other tips related to usage of the pre-processor you can find in Technical Note TN2175. Incidentally, TN2175 says to use “-traditional”, but I use “-CC”. Use whatever works for the version you’re on.)
4. For the Info.plist Preprocessor Definitions setting, enter $(CONFIGURATION). Xcode will change the display to read <multiple values>, but that’s okay because the value will vary according to the current build configuration. It will define a value that matches the build configuration that the pre-processor will test against in the Info.plist. (Try switching the setting in the Configuration pop-up menu of the Build tab to watch the value change to match the current setting.) This is what will direct the pre-processor to output the correct value for CFBundleIdentifier.
5. Check the Preprocess Info.plist File checkbox so Xcode invokes the pre-processor on the Info.plist before copying it to the application.
When built, you’ll be able to run the app concurrently with the release version, and without causing conflicts with data files in use by it. Of course, you won’t have your preferences set up, but that’s only a problem until you save preferences for the test version. (Remember, if you try to get around that problem by copying the release version’s defaults file that it also holds the recently opened files. Purge, close or what-have-you as appropriate!)
One of the extra things I attempted to do in this technique was to provide an alternate name for the private builds or test versions so they would be distinctly named for testers. We used to use naming conventions such as “Mori 1.7β4″ when distributing such versions back in the pre-MOX days, but including the metadata keys CFBundleExecutable, CFBundleName, and CFBundleDisplayName don’t have any noticeable effect. Any tips in this regard would be greatly welcomed.
I had also attempted to get the pre-processor to generate the bundle identifier with “Mori-$(CONFIGURATION)” that fit whatever build configuration was in effect automatically, which would’ve avoided the use of the #if defined directive. Unfortunately, because the macro expansion would generate Mori-Release that method proved ineffective.
A corresponding idea is to use an alternate icon (via the CFBundleIconFile specifier) to represent the test version of your app. It helps you and your testers realize when odd behavior is due to running the wrong build just by looking at the dock or application-switcher. It’s also fun to double-click a document only to realize the test app is opening vital data meant only for the stable version. Hilarity is sure to ensue. But I’m a professional, don’t you kids try this at home!
If you don’t have the construction guy handy, you can resort to the technique I used before I discovered Info.plist processing: MOX’s own stamping of missing dock files makes for a handy visual guide to your test app. To try it yourself, add the debug version from within your build/Debug folder to your dock items. That’s right, the debug version (or whatever you use for test builds). Now delete it and empty the trash. (You will be building new ones, won’t you?) Now click on the app icon you just added to the dock. It adds a big fat ‘?’ to your lovely icon, doesn’t it? (At least it should if you deleted the correct icon.) Now rebuild your app and run it from within Xcode.

Now bring up the application switcher (cmd-tab). What do you see? A big fat ol’ ‘?’ emblazoned on the debug version of your app! Oh, you don’t? You see the normal icon? Yeah, you’re on Leopard, aren’t you? This trick doesn’t work as well on Leopard because MOX validates the file state more often than Tiger did. Such as, starting the test build from the Dock instead of only within Xcode. On Leopard, clicking on the dock icon when there’s a built debug version of your app in the debug folder will restore its unstamped icon. But anytime the question mark goes away, just delete the debug version, empty the trash, and click on the dock icon again.
Have fun, and keep ‘em flying!
I’ve had a need to do this sort of thing arise this week myself, but I figured I’d just tackle it by setting the “Info.plist File” option to different files for the different configurations. I haven’t actually tried it yet, but it sounds simpler than the conditional compilation route. Any reason you know of that it wouldn’t work?
No, in fact that’s how I tested it initially, confirming it actually would do the trick.
It’s quicker to edit the “Info.plist” setting manually, but like testing code manually, is subject to forgetfulness and tedium when you have to do it repeatedly.