> > Only your boss knows for sure (hopefully!) but I guess nowadays 'low end
> > Mac' means: support for Mac OS X 10.3.9. You would do this by creating a
[quoted text clipped - 3 lines]
> No, no, no, no, NO. People keep saying this and it's *not true*. Please
> stop.
relax.
> To ensure your software can *run* on Mac OS X 10.3.9 on PowerPC
> machines, you need to set your Mac OS X Deployment Target to 10.3 when
> building for PowerPC, and avoid using any new-in-10.4 (or later) APIs.
> That's it.
Yes, that works. However, in practice this means that it's all too easy
to build a product that *won't run* on older systems. The availability
macro's are a fine mechanism (and should be used), but they don't
provide full coverage:
- Not even all Cocoa frameworks use it (f.i. WebKit). Availability is
mostly mentioned in the documentation.
- Most lower level libraries don't use it (f.i. OpenGL). Availability
can be determined only from the SDK headers.
In my opinion, the best advise to the original poster is to use matching
SDK and Deployment Target settings. This will detect unavailable symbols
at the earliest possible stage. Using a newer SDK with an older
deployment target is an advanced technique that allows one to take
advantage of newer API at the expense of hiding availability conflicts
for older targets.
I say this based on my own experience and reading Apple documentation
such as the weak linking technote (5 years old by now, but "check back
here periodically for updates on tools and OS support"). If I missed
some important aspect, or if you can share more up-to date inside
information on the subject, I would certainly be interested.
patrick
gandreas - 27 Feb 2008 17:20 GMT
>> To ensure your software can *run* on Mac OS X 10.3.9 on PowerPC
>> machines, you need to set your Mac OS X Deployment Target to 10.3 when
[quoted text clipped - 8 lines]
> - Not even all Cocoa frameworks use it (f.i. WebKit). Availability is
> mostly mentioned in the documentation.
The problem here is that WebKit is not tied to the OS. It's tied to
what version of Safari is installed, which is sort of tied to the OS
but only indirectly (so for example, Safari 3.0 features found in 10.5
are available on 10.4, but only 10.4.11 or later). As a result,
there's no practical way to use the availability macros like this.
The Quicktime features are even worse...
> - Most lower level libraries don't use it (f.i. OpenGL). Availability
> can be determined only from the SDK headers.
OpenGL provides its own (cross platform-ish) way of determining what
features are available (which are ultimately tied to the display card
and drivers)
> In my opinion, the best advise to the original poster is to use matching
> SDK and Deployment Target settings. This will detect unavailable symbols
> at the earliest possible stage. Using a newer SDK with an older
> deployment target is an advanced technique that allows one to take
> advantage of newer API at the expense of hiding availability conflicts
> for older targets.
It is, however, the "recommended" way to do things. For example, from
<http://developer.apple.com/documentation/DeveloperTools/Conceptual/cross_develop
ment/UniversalBinaries/chapter_4_section_1.html>:
To
support versions of Mac OS X prior to Mac OS X v10.4 for PowerPC, you
can specify separate deployment OS versions for Intel and PowerPC-based
builds. To do so, use the per-architecture variants of the
MACOSX_DEPLOYMENT_TARGET build setting