Re: QuartzCore.framework on 10.3.9?
Re: QuartzCore.framework on 10.3.9?
- Subject: Re: QuartzCore.framework on 10.3.9?
- From: "Mark Munz" <email@hidden>
- Date: Tue, 20 Feb 2007 12:08:34 -0800
Thanks. I've already switched to -weak_framework (which, again, I
think should be tied to the deployment because it is a System
framework) -- but the problem comes in testing.
Assuming I can get a system W/O QuartzCore installed and weak link
fails, I would call that a CRASHING bug. The
CFBundleGetFunctionPointerForName() approach is not acceptable and
means I'll just pull any and all QuartzCore code out of my app.
I had just installed a fresh 10.3.9 w/ standard updates. The result is
a system that cannot be truly tested against (because I guess QT7
installs frameworks into the system that don't actually exist with
that system).
Apple keeps sticking us between a rock and a hard place when it comes
to adopting new features and maintaining compatibility. As I said,
this simply makes it harder to adopt new technologies if you need to
maintain backward compatibility. It's easy for Apple to say "just use
OS X 10.4 or 10.5", but small developers don't have the option.
Sadly, it is a recurring theme.
Frustrated.
On 2/20/07, John Mikros <email@hidden> wrote:
I think QuartzCore gets installed on 10.3.9 if you install QuickTime 7.
When linking to a whole framework (as opposed to weak linking to a
subset of symbols that may not exist in a framework) you have to pass
-weak_framework <framework> to the linker.
That said, I had a problem doing this with QuartzCore specifically.
My app was weak linked to QuartzCore, but on 10.3.9 (with QuartzCore
not installed) it would crash at the first call of any Cocoa
function. This happened to be [[NSAutoreleasePool alloc] init], but
I believe it didn't matter which Cocoa call it was. If I removed any
references to QuartzCore, then I wouldn't crash at the aforementioned
Cocoa call.
My solution ended up being to manually import QuartzCore symbols
using CFBundleGetFunctionPointerForName() when I was running on 10.4
or later, and this worked great for me since I was only using a dozen
or so symbols.
Good luck
-john
On Feb 20, 2007, at 10:46 AM, Mark Munz wrote:
> I've run into a bizarre scenario that I'm trying to figure out so I'm
> not bitten again.
>
> I have a project with:
>
> SDKROOT_PPC = /Developer/SDKs/MacOSX10.4u.sdk
> MACOSX_DEPLOYMENT_TARGET_PPC = 10.3
>
> I also had:
>
> OTHER_LDFLAGS_ppc = -framework QuartzCore
>
> Now, I would have expected that because QuartzCore is part of the
> system and the deployment target is 10.3, it would automatically be
> weak linked. That appears not to be the case (and I'm planning to
> write an enhancement request because I think it should).
>
> But the bizarre part comes in that my testing worked fine under 10.3.9
> because apparently there was a QuartzCore framework installed. I'm not
> sure how it got installed. I've received intermittent complaints from
> 10.3.9 users, so some of them have it installed and some don't.
>
> Did Apple really retroactively install a public QuartzCore
> framework in 10.3.9?
>
> Outside of Xcode actually doing the smart thing (by weak linking any
> system frameworks not part of the deployment target), how can I insure
> it only has the frameworks that actually came with 10.3.9, other than
> manually having to examine the frameworks constantly?
>
> It seems like this can only makes backwards compatibility testing more
> difficult/time consuming than it already is.
>
> Thanks.
>
> --
> Mark Munz
> unmarked software
> http://www.unmarked.com/
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Xcode-users mailing list (email@hidden)
> Help/Unsubscribe/Update your Subscription:
> 40blizzard.com
>
> This email sent to email@hidden
--
Mark Munz
unmarked software
http://www.unmarked.com/
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden