• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
How to correctly load the bundle of a screen saver (was: How to change the product name with command line builds?)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

How to correctly load the bundle of a screen saver (was: How to change the product name with command line builds?)


  • Subject: How to correctly load the bundle of a screen saver (was: How to change the product name with command line builds?)
  • From: Gabriel Zachmann <email@hidden>
  • Date: Mon, 17 Jan 2011 19:06:08 +0100

> On Jan 16, 2011, at 7:59 AM, Ken Thomases wrote:

>> I've got an Xcode project that compiles and works fine.
>>
>> The short question now is: what is the proper way to change the bundle's name from the command line?
>
> Assuming your project is set up like normal (e.g. with Info.plist values based on build settings), it may be as simple as:
>
> xcodebuild -target Foo -configuration Release build PRODUCT_NAME=Foo2

Thanks a lot for your response.  Unfortunately, it doesn't seem to be quite as simple as that.

The executable I am working on is a screen saver.
My Info.plist looks like this:

    <key>CFBundleName</key>
    <string>${PRODUCT_NAME}</string>
    <key>CFBundleExecutable</key>
    <string>${EXECUTABLE_NAME}</string>
    <key>CFBundleIdentifier</key>
    <string>de.zach.${PRODUCT_NAME:rfc1034identifier}</string>

In the final packages, the variables are correctly replaced by the correct executable names, i.e., "Foo" and "Foo2".

However, when I run the screen savers (in System Preferences), the name of my screen saver, i.e., the value of CFBundleName is the same, whichever screen saver I use. It happens to be the one of the screen saver that got started first in SystemPreferences.
And since I base the name of the preferences file on the bundle name, both screensavers Foo and Foo2 use the same preferences file.

Here is how I load the bundle and determine the name of the screen saver running:

	NSBundle * bundle = [NSBundle bundleForClass:[self class]];
	exec_name_ = [[bundle infoDictionary] objectForKey:@"CFBundleName"];

I tried
	NSBundle * bundle = [NSBundle mainBundle];
but that loads the bundle of SystemPreferences!

I was considering to use [NSBundle bundleWithIdentifier: @"de.zach.Foo"] but I can't hard-code the identifier, since I don't know which screensaver it will be.

Is there something like preprocessor macro expansion in Obj-C? Something like

  @"de.zach." ## PRODUCT_NAME
(that is C++ syntax, where PRODUCT_NAME is a preprocessor token, which can be set on the command line of gcc).

Does anyone know how to do this properly?

Thanks a lot in advance.

Best regards,
Gabriel.

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: How to correctly load the bundle of a screen saver (was: How to change the product name with command line builds?)
      • From: Ken Thomases <email@hidden>
References: 
 >How to change the product name with command line builds? (From: Gabriel Zachmann <email@hidden>)
 >Re: How to change the product name with command line builds? (From: Ken Thomases <email@hidden>)

  • Prev by Date: Re: Gestures
  • Next by Date: Re: Why can't a modal view controller present another in viewDidLoad?
  • Previous by thread: Re: How to change the product name with command line builds?
  • Next by thread: Re: How to correctly load the bundle of a screen saver (was: How to change the product name with command line builds?)
  • Index(es):
    • Date
    • Thread