I made some updates recently that I wanted to mention so as to minimize some surprises. Also there are some changes that were prompted by iOS 6 being released.
Target Conditionals and Availability
The great thing about building apps for both iOS and Mac is that many pieces of code work just the same on both platforms. There are some scenarios however where you want to add different kinds of Apple SDKs based on which platform you are building for.
A good place to put all headers that often used is the Precompiled Header File (PCH) which gets precompiled and then reused throughout your app. Whenever you have an #import statement in your code the compiler needs to figure out whether this header has already been imported because the same header file can potentially be imported from several locations.
I generally like to put all imports for Apple headers into my PCH file as well as my own app-wide classes like my DTFoundation library which has a growing selection of methods that I frequently use. Having these imports in the PCH means that the preprocessor can prepare them for faster compiling once and then can virtually prepend all these definitions for every source code file.
Today I learned something new, namely how you can use the same PCH for Mac as well as iOS.
OS X Tutorial for iOS Developers (2)
In the first part of this series we started out by setting up the document type and export the UTI for the system to know about it. We also implemented methods to read the index from a file wrapper as well as persisting it to a new one. These steps where sufficient that we ended up with all the file manipulation candy (reverting to earlier versions, new doc, etc.) functional.
I promised that we would get go something more interesting today. We’ll be wiring up an NSCollectionView to show thumbnails and names of our images contained in shoebox documents. Then we need to dive into pasteboard as well drag-and-drop functionality to be able to manipulate those shoebox images. We want to be able to drag images from Desktop into shoeboxes and – time permitting – also be able to change their order by dragging as well.
Please let me know if this kind of tutorial is of interest to you by using the Flattr button and/or sharing it in your favorite social network.
iOS 6 out now
True to the predictions iOS 6 became available worldwide at exactly 7 pm central European time. The nice guys at istheapplestoredown.de were the first to call it and send out the notification e-mail that you can subscribe to.
The first question foremost on every developer’s mind: is the released version the same as the Gold Master.
Back on Mac – OS X Tutorial for iOS Developers
I’ve been programming for the iOS platform ever since this is possible, since the iPhone 3G with iPhone OS 2.0 was released by Apple in Summer 2008. For all this time I had a healthy respect about programming for Mac. More precisely: Horror.
If you dig into it you can only applaud Apple for not having tried to craft touch screen and energy optimization stuff onto AppKit, but chose to go the forked OS route. Being a seasoned iOS developer you will find yourself often cursing about how complicated certain activities seem.
Having said that you also see the positive influence of iOS on AppKit all around. Now that Apple deprecated Garbage Collection and you are already well used to programming under the ARC paradigm you find yourself writing exactly the same code for both platforms more often than not.
This will be the first in a series of tutorials where I am sharing my experiences in diving into AppKit. Please let me know if this is in fact interesting to you by sharing and Flattr’ing it.
Retina Iconset Trouble
When I was done with QA on Linguan 1.1.2 I wanted to submit it for review. But when I tried the validation step in Xcode halted me. It complained that I didn’t have a 512×512@2x icon. Then it dawned on me: Retina Macs.
So you have to imagine me, all excited about being able to submit this, but unable to do so. The icons for Linguan were all contained in an icns and I was stumped … but only for a moment. With help from David Smith I was able to prepare an iconset, the best current method for preparing the multiple resolutions of icons for Mac apps.
iPhone 5 Keynote Event
We just witnessed the iPhone 5 launch …almost live … at the Runtastic HQ where there was a Cocoahead special event. Let’s summarize what it means for us developers.
Tim Cook called iOS 6 and iPhone 5 the “biggest thing to happen to the iPhone since iCloud”.
Knowing that File Protection Works
In one of our business-specific apps we wanted to activate File Protection. But how do you know if its turned on and actually doing its job?
We even spent a tech incident (of two you get from free every year) to inquire how we could be certain if the feature is actually working. Though unfortunately Apple did not have any answer for us because there is no way to actually test this with “legal” means.
Our first thought had been to copy the app documents to the desktop via Xcode organizer. But of course you can only do this while the iDevice is unlocked and thus even file-protected files come across normally.
Summertime 1.2.0
Our Summertime is a handy little tool that shows you when the next DST switch is in your local time zone. The newest version brings these improvements:
- Fixed: Cannot search for timezones that have a space.
- Fixed: Some missing Time Zone localizations
- Fixed: Text alignment issues with longer count down durations or Time Zone names
- Fixed: Time Zone names not getting updated if system language was changed
- Fixed: Broken Reminder function
- Changed: first page is now always the local time zone
- Improved: Scrolling Performance in Timezone selector
There were some other “crufty” things that we addressed behind the scenes. The project was converted to ARC and the import process for localized timezone names was parallel-ized to achieve the much improved scrolling performance.
Radar: Scroll Direction setting linked for Mouse and Trackpad
It is understandable to have this ominous “Natural Scrolling” setting for trackpads. And that there is a separate such setting for mice. But I don’t understand why Apple would like these two settings, because somebody working on a laptop might want to use the normal way to scroll with his mouse’s scroll while while using the “natural” setting for his trackpad.
Filed as Radar #12236447 and cross-posted on OpenRadar.
Updated March 6th, 2013: “Works as Intended”