Re: Detect legacy OSX
Re: Detect legacy OSX
- Subject: Re: Detect legacy OSX
- From: Dave Fernandes <email@hidden>
- Date: Sat, 25 Aug 2007 01:28:56 -0400
I tried putting LSMinimumSystemVersion in my info.plist, and it works
as expected - when I set it to 10.4.11, my application will not open.
Only problem is... when I set it back to 10.4.10, the application
still won't open. I tried removing all copies of the app, rebuilding,
and rebooting. Where is the system caching this information?
Dave
On Aug 22, 2007, at 4:14 PM, Rosyna wrote:
Ack, at 8/22/07, David Duncan said:
// This function checks if we are running on 10.5 or later
BOOL RunningOn105OrLater()
But then you'd have to update it/rename it for every system update.
See below for some happy BCD code.
Two things about this code
1) The Gestalt selectors that I'm using only exist on 10.3 or
later. You can detect this by checking for errors (which I do not
here) and use an alternate selector (gestaltSystemVersion) in that
case.
Actually, they're 10.4+ only. It's not documented in the header
(which is lame) but is documented in the documentation, <file:///
Developer/ADC Reference Library/documentation/Carbon/Reference/
Gestalt_Manager/Reference/reference.html#//apple_ref/doc/c_ref/
gestaltSystemVersionMinor>
2) Checking the OS version in order to detect features is a
technique of LAST resort.
Weak linking, ftw. Gestalt is usually only used (for valid reasons)
when you need to know that the system version changed or need to
check the system version because the logic or flow of code is
completely different (or the previous version has a serious bug in
it that prevents the API from being used without skanky
workarounds, I'm looking at you Font Panel....).
And please don't parse the SystemVersion property list - it is too
easy to get that wrong .
Yes, this is exceedingly evil. As you can tell from the huge amount
of apps that broke mysteriously or failed to run when 10.4.10 was
released and they required 10.4.7 or later to run.
I did not write this, Steve Christensen did and posted it to Carbon-
Dev when this question came up two years ago. But the function has
been good to me. And it doesn't fail on systems less than 10.4.
For this example, you'd use:
if (VirtuousCankle_GetSystemVersion()>=0x100500)
// 10.5, ftw
UInt32 VirtuousCankle_GetSystemVersion()
{
// ex: 10.4.17 -> 0x00100417
static UInt32 sBCDSystemVersion = 0;
if (sBCDSystemVersion == 0)
{
SInt32 majorVersion=0, minorVersion=0,
bugFixVersion=0;
if ((Gestalt(gestaltSystemVersionMajor,
&majorVersion) == noErr) &&
(Gestalt(gestaltSystemVersionMinor, &minorVersion) ==
noErr) &&
(Gestalt(gestaltSystemVersionBugFix, &bugFixVersion) ==
noErr))
{
// as written, this should handle up to OS X 99.99.99
sBCDSystemVersion = ((majorVersion / 10) << 20) |
((majorVersion % 10) << 16) |
((minorVersion / 10) << 12) |
((minorVersion % 10) << 8) |
((bugFixVersion / 10) << 4) |
((bugFixVersion % 10) << 0);
}
else
{
SInt32 systemVersion=0;
if (Gestalt
(gestaltSystemVersion, &systemVersion) == noErr)
{
sBCDSystemVersion = ((systemVersion & 0x0000ff00)
<< 8) |
((systemVersion & 0x000000f0) << 4) |
((systemVersion & 0x0000000f) << 0);
}
}
}
return sBCDSystemVersion;
}
I'm obligated to say "You could just do major * 10000 + minor * 100
+ bugfix. It wouldn't be BCD, but then you wouldn't have to switch
your numeric view to Hex to read it either"
--
Sincerely,
Rosyna Keller
Technical Support/Carbon troll/Always needs a hug
Unsanity: Unsane Tools for Insanely Great People
It's either this, or imagining Phil Schiller in a thong.
_______________________________________________
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:
40utoronto.ca
This email sent to email@hidden
_______________________________________________
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