Dali Clock 2.32

Dali Clock 2.32 is out now. A few fixes later, and I have now seen the iPhone version running on my own phone, and have heard reports of it running on the phones of others! The plan for world domination continues apace.

Have you seen it running on an iPad? I don't think anyone has yet told me for sure that that works. It works in the simulator, but I haven't heard of anyone running it on one of the actual devices.

Dear Lazyweb: Can any of you figure out why "motionEnded" is never being called? I'd like to make it respond to "shake" gestures but I never get those events, either in the simulator or on the device. What am I doing wrong?

I know that most of you (quite sensibly) don't read the comments on my Livejournal, but I must point out that there was actually some amusing commentary on my previous post about Dali Clock. In particular, may I direct your attention to:

gryazi says, "The future is sort of like RMS predicted, but only because the alternative is sysadmining your television, and the UNIX arts-and-crafts movement has no financial interest in actually making that easy."

lionsphil says, "Give someone a massively parallel hammer, and suddenly they want to redefine the world in per-nail terms. Or something."

I note with interest that "sysadmining your television" and "unix arts-and-crafts movement" are currently googlewhacks. I expect to see these phrases in social-network "interests" lists shortly.

Regrettably, that post got Slashdotted, which always forces me to break out the Hammer of Bannination.

Anyway, I actually burned a few hours today trying to get the PalmOS Classic version to build again. As I mentioned earlier, it's not possible to build circa-1999 PalmOS applications any more using a modern Mac as your development machine, because the GCC m68k cross-compiler was never ported to 64-bit Macs. Well, some time last year I made a cosmetic improvement to the core Dali Clock animation on most of the platforms (specifically, when switching between "date" and "time" modes, the colon and dash now morph into each other rather than just switching instantly) and I felt something of an obligation to backport that to the PalmOS Classic version, just one last time. Well, I remembered that the iMac that had been my desktop machine several years go is now the hand-me-down iMac in the DNA Lounge office, and, as luck would have it, prc-tools was still installed there! So I spent several hours doing builds over there and scp'ing them back to my home machine to test them. Yes, I spent several hours trying to debug new software for an operating system that was last updated nine years ago. Truly, that was some retrocomputing.

Sometimes you have an OCD itch that you just have to scratch. But I kept picking at it and it started bleeding, so I finally came to my senses and stopped (before I got it working!) I think that the PalmOS Classic version of Dali Clock has now really and truly reached end-of-life.

Tags: , , , , , ,

23 Responses:

  1. lloydwood says:

    The plan for world domination continues apace.

    Is this the plan for world domination that won't stretch to ponying up $100 for an iPhone developer license?

    Hey, good luck with that.

    (captcha: accuses position)

  2. jered says:

    The day I realized that I was finally living in the future was when I installed my new TV (Samsung) and it said "Software update 1016 for your television. Install now?"

  3. terryray says:

    I admit to owning a iPad.

    Unfortunately, I find XCode to be completely incomprehensible, and always struggle mightily whenever trying to get it to do something new to me. Trying to build it gave me errors:

    [BEROR]Code Sign error: The identity 'Jamie Zawinski' doesn't match any valid certificate/private key pair in the default keychain
    [BWARN]warning: building for deployment target '3.2' should omit the armv6 architecture.

    I twiddled with settings, and got it to change to complaining about "Jason Gill (6M3TG54T7E)" instead of "Jamie Zawinski."

    I failed to find where in the XCode mysterious UI labyrinth this lives. I finally found a relevant line in project.pbxproj that said

    CODE_SIGN_IDENTITY = "iPhone Developer: Jason Gill (6M3TG54T7E)";

    I removed that and replaced it with this (from my personal iPad fiddling, where I haven't yet got as far as code signing):

    "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";

    And things started to work.

    Everything seemed fine, except that it turning on the iPad's "rotation lock" switch caused it to instead rotate, and unpredictably. I deduce that you are doing rotation stuff at a lower level than the iPad expects you to. Or something like that.

    • jerronimo says:

      For what it's worth, right click the project name in the left files & groups view, and one of the settings in there is for the signing identity. Pick the one that matches your proper identity for development deployment. Also make sure that your Info.plist identifier matches your provisioning app identifier.

      I know that you already got it working, but just to make it easier for next time. (Also, all of this is covered in OCD-level detail in the PDF document you can snag at the development portal... along with troubleshooting guides and such in that document.) It's just about two clicks to change this the intended way, without mucking about in the project xml file.

      (Snide remark: Instead of just "fiddling with it", if you would have read the docs, you would have gotten it to work much quicker and easier. ;) )

    • endico says:

      Short version: you need to change the bundle identifier before trying to set the code signing identity.

      Long version:
      1. Untar the tarball.
      2. Open OSX/DaliClock.xcodeproj in Xcode
      3. In XCode, open DaliClock/Resources/iPhoneInfo.plist
      4. The bundle identifier is org.jwz.daliclock. Change "org.jwz" to the identifier that you used in your provisioning profile.
      5. Under Targets, double click on DaliClockiPhone to open the build dialog.
      6. In the build dialog choose the debug configuration. For 'Code Signing Identity' choose your iPhone Developer profile.
      7. Switch to the release configuration and set the code signing identity to your iPhone Distribution identity.
      8. Now you're ready to build. Back in the main xtools window. Set the active SDK to one of the iDevice versions. Set the active target and active executable to DaliClockiPhone.
      9. Build and go.

  4. netsharc says:

    So how did you get it into your phone? Jailbreak? I can't imagine you gave them money.

    • It's possible a developer gave him an ad-hoc build. The profile will expire after a few months, but at least it's slightly better than potentially rendering his phone unusable.

      Also, why did I not think of this until now?

      • netsharc says:

        Oh yeah, most dev accounts let you add "developers", who each can have their own private key to sign the build, and a provisioning certificate that will let apps signed using that key be run on a device with a particular UUID...

    • jwz says:

      Some kind person loaned me his private key.

  5. This post may be useful in answering your Lazyweb question. Hopefully.

    • bitjuggler says:

      >I think that the PalmOS Classic version of Dali Clock has now really and truly reached end-of-life.

      Can the build-chain problem be solved with sufficient levels of virtualization? prc-tools on a linux box running under vmware or parallels on your mac?

      Just curious. In case you want to pick at that OCD itch some more. Also: emulated might build faster than the iMac.

    • jwz says:

      That makes no damned sense to me. Why is he creating another class to use as a delegate? Putting those methods directly on the View? I already have an AppDelegate which is the parent of my View and the motion methods are not getting called on either object.

      • Agree, this is confusing. Mea culpa, I saw the "this fixed it" and figured it was a reasonable response, not having implemented shake in any of my own apps yet.

        In the meantime I just made DaliClockView a UIView, set it to become the first responder, and it's not receiving the event :|

        I will poke at it with a stick and let you know if things improve.

      • In applicationDidFinishLaunching add:

        [dv becomeFirstResponder];

        and DaliClockView will start responding to the shake events.

        • jwz says:

          Oh hey, that worked, thanks! I thought I had tried that already...

          • No problem, happy to help. Though nobody said this Lazyweb thing was going to be so difficult.

            Anyway, not sure, but if you did try to do [self becomeFirstResponder]; inside the view, it won't work.

            Also I'm not sure of the specifics but I think it has something to do with some other object receiving the events in the event chain and not passing it along to your view (see this for some more info).

            While I'm making wild-ass guesses, it's possible that by making dv a subView of your window, the window is bogarting all the motion events.

            • Aha!

              "Note: Applications must explicitly set a first responder to handle motion events, action messages, and editing-menu messages; UIKit automatically sets the text field or text view a user taps to be the first responder."