Our DNA is written in Objective-C

Dr. Touch #010 – "A New Decade"

I hope you had a good transition into this new decade. 2010 always was the future to me. Close enough to live to see it and enjoy it. Far away enough so that amazing technologies could develop. Also can you believe that it’s been already a decade since Y2K caused lots of IT projects looking for places where the dates could not handle the jump to 00. Well in any case, it’s been an amazing ride so far and we are on tenterhooks to see what Apple has in store for us in this decade or even this year.


The show notes aka my script you find after the break.
Read more

Easier Version Checking

Sometimes you may need to modify your app’s behavior depending on which OS version it’s running on. As of XCode 3.2 you can choose a different SDK to compile against than you choose for the deployment target. This allows to make an app that runs as low as 2.0, but uses all the bug fixes in the SDKs. And it forces the compiler to make dynamic links to 3.x frameworks. So you can check at run time if such a framework is available and if not present the feature that depends on it.

When working on DTAugmentedRealityController I needed to limit it’s use on devices with a magnetometer and also which run a version of iPhoneOS that’s greater than or equal to 3.1 because this is the version when Apple introduced the capability of overlaying your own view on top of an UIImagePickerController. So I needed an elegant method, I would not settle for comparing strings. That’s why I came up with this extension to UIDevice.

Read more

Augmenting Reality

Opinions differ on what constitutes “Augmented Reality”. This can generally range from sophisticated 3D graphics overlayed on a stereoscopic view of the word to simply overlaying floating icons related to a location over a live camera view. In between some also count as AR when you have a special marker in your hand which you webcam can track and inserts a small 3D model on top of it.

On the iPhone it is currently not possible to do any sophisticated motion tracking or shape recognition was you can only get live images via a backdoor which Apple recently kind of opened just a bit so that useful applications like RedLaser or uStream can make use of it. Still it seems that the consensus is that you can only use images that have no UI elements over them as the workaround does captures of the whole screen.

I figured it would be an interesting addition to my Dr. Touch’s Parts Store and so I set up to create DTAugmentedRealityController. The goal for V1.0 is to provide a view controller which you can feed icons and geo locations and the view controller would overlay said icons over live video from the iPhone’s camera.

Read more

Dr. Touch's Parts Store

UPDATE: This article was split into the announcement and the information about individual parts. The annoucement stayed in this article, but the individual parts’ description was moved to the Parts Store page.

I like to reverse-engineer stuff because I learn much from how somebody else (like Apple) solved a UI problem. Most of the solutions I am coming up with are too big for a blog article, instead they found a home on my SVN. Generally when I demo my demos the reactions are entirely positive and I get flooded with requests to license those technologies.

I am not yet entirely certain on how to best organize such an endeavor, but spontaneously I had a title for it spring up from the back of my head:  Dr. Touch’s Parts Store.

Dr. Touch being my online brand, Parts referring to the components that I build to easy integration into a multitude of projects and Store as in “show me the money”. iPhone Development is my livelyhood and passion. So as much I would like to give away all, that’s not the reality I live in. My bank does not yet accept pro bono as legal payment.

So, if you see something on this site or in my YouTube videos that you like to be able to use in your own apps, you can!

By purchasing a source-level license to any of Dr. Touch’s Parts you gain access to my Subversion Repository where I am continuing development on parts as I am fixing bugs or implementing requested features.

Here’s what I have to offer right off the bat. All these components are readily available to license. To order your access please contact me via e-mail. You will receive access and free implementation support.

Go To Parts Store page.

New Year, in Context

What’s the appropriate New Year Greeting for a Cocoa Geek? He reverse-engineers something that Apple made into saying the wishes for him:

This is what my DTMenuViewController will look like or rather already does look like. Just like the one Apple includes since iPhone OS 3.0, but with any kind of labels you like to have. And any kind of colors you like. To prove that point, I made the NEW red. NEW Year. NEW Luck.

2010 will be great, I just know it. I remember that 2010 always was “the future” for me. Cool stuff, near enough to live to see it, yet far away enough so that some technical breakthroughs could happen. Stanley Kubrik’s 2001 was “in the future” and 2010 was even further futuristic. So that’s partially what imprinted this year in the back of my head as a goal to live to see it healthy and hopefully a bit wealth and a bit wise.

2010 will also be great because I am counting on the iSlate to double my market for Cocoa-written apps practically over night, one fateful Summer 2010 day.

Now that 2010 is almost upon us, the future has arrived and in a weird sense it just feels like the present. Duh. What’s the next year we should aim to see without any local or global health disasters?

Stay tuned for what’s coming on this blog in 2010. You ain’t seen nothing yet!

Update Jan 1st: YouTube Demonstration.

Update Jan 2nd: I made a demo showing of DTCalendarController in a Tap&Hold Tableview.

Source Code for this component is available for 100 Euros. A professional invoice is available if you need it for your professional app.

Dr. Touch #009 – "iSlate"

Today is the day after christmas. Mine was very comfortable and relaxing. My biggest present I made to myself, it was my 27″ i7 iMac which I unboxed earlier this month on YouTube. And when I unboxed my other Christmas presents I was excited to find a Microphone desk arm and a pop killer screen. This episode is already being recorded with this and on the new iMac. Ah and by the way, there is a new firmware for the graphics card in the i7 iMacs that supposedly fixes some screen problems. Though I never saw any of these. So I am blessed.

Subscribe to the Podcast in iTunes

My script (aka “Show Notes”) after the fold below.

Read more

MyAppSales 1.0.15 – "Holiday Fix"

The latest version of MyAppSales contains a fix for times when iTunes Connect is offline, but the ITTS reporting site is still running.

This way you still get your daily sales reports throughout the downtime for ITC which was announced to go from December 23rd until December 29th.

Another minor change is that review scraping no longer is requires for the app totals to be loaded because all reviews for all apps are scraped at the same time anyway. This is a minor startup speed benefit.

Merry Christmas and Happy Holidays!

UPDATE Dec 26th: Apple caught up on using the ITTS url for report downloading and shut this down as well, giving this message.

So, there now really IS no way to get to your daily reports anymore. We all have to wait until Dec 29th.

Double Tapping on Buttons

Grinarn asks:

“I got several buttons set up on my view and when the button gets clicked, a detailed view of that item appears.
What I need is another action method like double click or click and hold, to trigger another action.

How can I do this? I just found the events in the IB which seems only supports single touch events.”

Any view in the SDK can receive and process touch events. This gives you the ability to implement any kind of tap or gesture that you might dream up. But for everyday purposes we will find the methods provided by UIControl sufficient. UIControl inherits from UIView which means that it can do everything that views can do, but it adds the Target-Action mechanism.

For this mechanism you can attach a multitude of various events to each control by simply specifying a target (= any object instance), an action (= any selector of the target) and a constant from the following list. “Selector” is only fancy name for method signature, which consists of the method name and the names of the parameters, all with a colon behind them.

General Touch Actions

  • UIControlEventTouchDown
  • UIControlEventTouchDownRepeat
  • UIControlEventTouchDragInside
  • UIControlEventTouchDragOutside
  • UIControlEventTouchDragEnter
  • UIControlEventTouchDragExit
  • UIControlEventTouchUpInside
  • UIControlEventTouchUpOutside
  • UIControlEventTouchCancel

Specific to Editing Controls

  • UIControlEventValueChanged
  • UIControlEventEditingDidBegin
  • UIControlEventEditingChanged
  • UIControlEventEditingDidEnd
  • UIControlEventEditingDidEndOnExit

Generic Constants matching several Actions

  • UIControlEventAllTouchEvents
  • UIControlEventAllEditingEvents
  • UIControlEventApplicationReserved
  • UIControlEventSystemReserved
  • UIControlEventAllEvents

Now generally if you make a button then you would use the UIControlEventTouchUpInside event even though at first you might instinctively go for UIControlEventTouchDown. TouchUpInside is the standard as it allows the user to reconsider and move outside of the button before lifting his finger thus cancelling his action. Otherwise the button would be like a landmine where there is no way back after touching it.

Now there might be cases where you exactly WANT the action to be fired right when you touch the control. Then TouchDown is the right action. You also see a TouchDownRepeat action available, but this always comes in succession after a TouchDown. Therefore some additional trickery is necessary to be able to distinguish between single and double tapping a button.

Read more

Early Christmas, 27" i7 iMac arrives

I had ordered my 27″ i7 iMac on Black Friday and expected for it to arrive on Dec 22nd as per the information on the Apple Store website. I was happily surprised to suddenly have a UPS lady at my doorstep at 5 pm. I had never gotten a package from any package delivery service that late, that was another first.

When I inquired about that, she responded: “We start at 5 am and we don’t stop until all packages are delivered”. I like that kind of service.

My brother-in-law helped me record the unboxing on my iPhone 3GS. To get it from 15 minutes down to the maximum allowed 10 minutes for YouTube I already used iMovie on the new machine.

I got:

  • 27″ gorgeous LED-lit wide display. It’s also huge. Almost twice as wide as my 15″ MacBook Pro display.
  • 8 GB RAM, I chose the cheaper variant where all memory banks are full because I don’t think I will need more RAM for coding
  • i7 CPU, the fastest iMAC machine. It’s also the greenest because between high-power compiling it can idle more thus using less energy.

About this Mac

As a final test of happiness I installed XCode on it and timed a complete build (after clean all) of MyAppSales. I had to first export my certificates including private keys from my MacBook and import them on the iMac’s keychain. Then I also copied the provisioning profiles and installed all things via double click.

  • MacBook Pro 2.8 GHz Intel Core 2 Duo: 12 seconds
  • iMac 2.8 GHz Intel Core i7: 4 seconds

I had to double-check these results, but really the i7 compiles my biggest project 3 times as fast. You wouldn’t think that having the processor speed rated at the same value. But more cores and 2 generations later give you such a turbo-boost. “Roarr!” says the Tiger, pardon, Leopard, pardon SNOW Leopard.

Dr. Touch #008 – "Christmas in Sight"

Apple is planning an outage over Christmas, ’tis the season.


Subscribe to the Podcast in iTunes

My script (aka “Show Notes”) after the fold below.

Read more