I think that it’s great that companies like Apple put out sample code to help developers write code without having to resort to figuring it out themselves or doing something in a way that will break. Several years ago I wanted to add my application (NotifyMail) to the login items/startup items for a user under OS X when OS X was new. There was no documented way to do this, but a DTS engineer at Apple posted on a mailing list that if people wanted code, to send him email. So I sent him email and have been using the code ever since in a bunch of projects. It had a major limitation in that if System Preferences was open and you used the code to modify login items, the user wouldn’t see the change which could be confusing. I had added an awkwardly worded alert indicating this and no one complained.
As I was changing some setup stuff on one of my machines, I added an item to the login items by using the contextual menu item in the dock. I then opened up system preferences and began adding and removing it via the menu again. To my surprise (and delight) system preferences immediately indicated the change. After a bit of searching, I found some sample code called LoginItemsAE which was first created last October. I download the code, added it to my project and attempted to compile. Hmmm…it relied on stuff in Mac OS X 10.4, but I was targeting 10.3 (and 10.4.), so it didn’t compile. I double checked the sample code and it says it goes back to 10.2. After a lot of research, it turns out that in order to get the code to compile, even if targeting 10.3, I had to set the SDK to the 10.4 SDK. I didn’t want to do this as I have 50+ targets in one project that all use one configuration file that sets the SDK to 10.3.9; this kind of change could be bad as it would allow me to use functions only found in newer OS versions and then crash on older systems. So if I’m not careful, I’ll get a crash. By setting the SDK, if it doesn’t compile, it won’t run on the older OS version which makes life easier. It would be nice if there was a way to warn you about which functions aren’t available on newer OS versions.
To make a long story a little shorter, I had to whip up some stub code to get it to compile which was a whole lot more work than I had expected.