Two solutions have been suggested, launchd and "Login Item". (Indeed, LoginItemsAE is unreliable and depracated.) I've never seen an explanation of which one to use. Here are my conclusions:

• If you do not want the user to be able to see and control your item in System Preferences, or if you have more complicated instructions than simply "always launch at login", use launchd. This is probably appropriate for background agents/daemons/whatever.

• If you want the user to be able to see and control en/disable your item in System Preferences, make it a Login Item. This is probably more appropriate for apps. You can set/unset Login Items programmatically using the new LSSharedFileList API...

On 2008 Sep, 25, at 20:25, Ken Thomases wrote:

Actually, Leopard introduced the LSSharedFileList API, which is the new preferred solution. Unfortunately, this API is undocumented. The only documentation (other than a brief mention in the release notes) is the header file:

/System/Library/Frameworks/CoreServices.framework/Frameworks/ LaunchServices.framework/Headers/LSSharedFileList.h


Yes, this is more reliable than LoginItemsAE and should be used in any project that requires 10.5. But, yes it's undocumented, not very nice to use (Carbon-style C API) and also there is a bug.

To make it nicer to use, I wrote a Cocoa wrapper a few months ago, but forgot to make it available. I had been waiting for Apple to fix a bug, but apparently my bug report didn't ring the bell on the priority list. Oh, well. Here is the project...

http://sheepsystems.com/files/SSYLoginItems.zip

Click in the Documentation subfolder on index.html to see HeaderDoc documentation.

Jerry


Here's the text of the bug:

Apple Bug Reporter.  Problem ID 5901742

30-Apr-2008 01:48 PM Jerry Krinock:

* SUMMARY The 'hidden' attribute for Login Items in the LSSharedList API has a disconnect with the reality. In more detail, when reading a Login Item, the 'hidden' attribute is read as 0, even if it is in fact '1', unless the 'hidden' attribute has been set by the LSSharedList API. In that case, it doesn't really set, but when you read it back with the API, it says that it is set, even though in fact it is not.

* STEPS TO REPRODUCE Build and run the attached project. Follow the prompts shown in the the console.

* EXPECTED RESULTS In all tests, the values read and written using the LSSharedList API and shown in the log should agree with what is shown in the System Preferences application.

* ACTUAL RESULTS In Test #1, items which have the "Hide" box checked in System Preferences read from the API hidden=0. In Test #5, although the API set Safari to "Hide" and the API read it back as hidden=1, if you look in System Preferences you see that the "Hide" box is not checked.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to