Dali Clock, 10.6

Before I dive in to getting xscreensaver to work on 10.6, I started smaller, and got the Dali Clock screen saver to work. Version 2.30 is out now. Please try it.

Unfortunately, I think the screen saver executable in there only works on 10.6, and the app and widget no longer work on 10.4, and I can't figure out how to fix that.

That's where you come in, dear Lazyweb.

To make it build on 10.6, I had to make these changes in XCode:

  • Architectures: Standard (32/64-bit Universal)
  • Base SDK: Mac OS X 10.5 (10.6 for the .saver)
  • C/C++ Compiler Version: GCC 4.0 (not 4.2)
  • Objective-C Garbage Collection: Supported
  • Info.plist: change "LSMinimumSystemVersion" from "10.4.0" to "10.4".

But it's obviously unacceptable that this should be a 10.6-only binary.

  1. How to I build DaliClock.app in such a way that it is runnable on 10.4, 10.5, and 10.6 systems?

    When I set the Base SDK to 10.4, I get "warning: Mac OS X version 10.5 or later is needed for use of the new objc abi", followed by "#error 64-bit not supported" from from objc/objc.h, included via Foundation.h.

    I suspect this means that you can't build a 10.4 version of the x86_64 binary, which is fine. Since 10.4 was perfectly happy running the i386 or ppc binaries, it's ok if the x86_64 build be 10.6-only, and the i386 and ppc builds be 10.4. But I don't see a way to specify that.

  2. How to I build DaliClock.saver in such a way that it is runnable on even 10.5 systems?

    When I set the Base SDK to 10.5, I get "ld: warning: in MacOSX10.5.sdk ScreenSaver.framework, missing required architecture x86_64 in file".

    Maybe this is the same kind of problem. But it's worse, because it means I can't build a 10.5-compatible version of the saver at all.

  3. How do I make these warnings go away?

    "AppController.m warning: passing argument 3 of 'addObserver:forKeyPath:options:context:' makes integer from pointer without a cast"

    The code in question is this, which had been warning-free before:

      [userDefaultsController addObserver:self
                forKeyPath:@"values.windowTitlebarIsHidden"
                options:nil
                context:@selector(windowTitlebarIsHiddenDidChange:)];
Tags: , , , , ,