I previously wrote a blog post titled Performing any Selector on the Main Thread detailing a convenience category on NSInvoication for easily creating invocation objects that could be invoked on any thread. This category has served me well, and even got traction in the iOS developer community, so I never bothered to stop and think [...]
Invoke any Method on any Thread
August 8th, 2011 by Fredrik Olsson — Architecture, Cocoa, Dynamic languages, Tips & Tricks
Tags: concurrency, design patterns, iphone, mac, objective-c, open source, programming, tips, tutorial
Auto-incrementing Build Numbers in Xcode
May 31st, 2011 by Fredrik Olsson — Cocoa, Testing, Tips & Tricks
Users and testers will find bugs you are sure you have already fixed. Sometimes they use the wrong version, sometimes your fix is not as good as you thought. Either way a tiny unique version number visible in the app can save you hours of work. Incrementing the version number of your project for every [...]
Tags: iphone, objective-c, scripting, tools, tutorial
The state of iOS Open Source – and what to do about it!
May 16th, 2011 by Fredrik Olsson — Architecture, Cocoa, Tips & Tricks
There is a vibrant community of open source projects for iOS. You need a calendar UI components or a JSON parser? No problem, the projects are out there. Most code out there is of very high quality. Unfortunately the distribution of the code is generally very crude, barely half a step away from sharing code [...]
Tags: frameworks, iphone, maven, mobile, objective-c, open source
Sync-Async Pair Pattern – Easy concurrency on iOS
April 28th, 2011 by Fredrik Olsson — Architecture, Cocoa, Testing, Tips & Tricks
Apple provides many tools for implementing concurrency in your application. NSOperationQueue, GCD, or simply using performSelectorInBackground:withObject: that is available on each and every object, are just some examples. The tools are there, yet implementing good concurrency is hard. The solution I have found is not yet another tool, or framework, but a simple pattern. I [...]
Tags: automated testing, concurrency, design patterns, iphone, objective-c, programming
Automated Testing is Like Optimizing
January 7th, 2011 by Fredrik Olsson — Testing, Uncategorized
I have my roots in the Atari demo scene, so I know the joys of optimizing the inner-loop of a software texture mapper down to the last assembly instruction. The bragging rights of knowing that not a single clock cycle is wasted. I am also grown up enough to know that this is not a [...]
Tags: automated testing, performance, programming, tdd
Exceptions and Errors on iOS
October 13th, 2010 by Fredrik Olsson — Architecture, Cocoa, Embedded, Testing, Tips & Tricks
Cocoa, and by inheritance Cocoa Touch on iOS makes a clear distinction between what is an exception, and what is an error in your application. This should be obvious since NSException and NSError both inherit from the NSObject root class with no relations at all. Programmer vs. User Exceptions are intended for signaling programming errors [...]
Tags: design patterns, iphone, objective-c, programming, tutorial
Localizations from NIB files
October 5th, 2010 by Fredrik Olsson — Uncategorized
Cocoa Touch have good support for localizations. Pretty much any file can be localized, including NIB-files with user interface layouts. Unfortunately a NIB-file is an atomic file. So if you later need to do changes, like adding a new button, you will have to add this button to each and every NIB-file of each locale [...]
Future Cocoa Operation
August 19th, 2010 by Fredrik Olsson — Architecture, Cocoa, Tips & Tricks
In Java you have for quite some time had the Future interface for encapsulating an asynchronous calculation. Cocoa has had the abstract NSOperation class to encapsulate asynchronous operations. NSOperation do not have any facilities for returning a result when done as the Future do, you are left to implement this on your own. Which I [...]
Tags: concurrency, design patterns, iphone, Java, mobile, network, objective-c, programming
UIWebView and JavaScript Woes
June 28th, 2010 by Fredrik Olsson — Uncategorized
JavaScript Core is unfortunately not a public framework on iOS, leaving us at the mercy of the UIWebView class if we want to execute JavaScript in our applications. I have used JavaScript a lot recently and want to share four gotchas that I have had. Functional code! Turns out that JavaScript is functional, not as [...]
Rewriting a Public Cocoa Touch API
May 25th, 2010 by Fredrik Olsson — Architecture, Cocoa, Embedded, Tips & Tricks
Cocoa Touch added API for presenting a view controller in a popup bubble in iPhone OS 3.2, the responsible class is named UIPopoverController. One would guess that this new class is a subclass of UIViewController, just like UINavigationController is, but that is not the case. One would also guess that in functionality many ideas for [...]
Tags: api, apple, cocoa touch, frameworks, ipad, iphone, objective-c
Performing any Selector on the Main Thread
March 30th, 2010 by Fredrik Olsson — Cocoa, Embedded, Tips & Tricks
Many UI frameworks, including AppKit for Mac OS X and UIKit for iPhone OS, require that all methods to UI components are sent on the main UI thread. Cocoa and Cocoa Touch make this quite easy by providing for example -[NSObject performSelectorOnMainThread:withObject:waitUntilDone:] in Foundation. Making updating the text for a text field a snap: [someTextField [...]
Tags: cocoa touch, concurrency, iphone, mac, mobile, objective-c, open source, programming, tips, tutorial
iPad, the Future, and the Luxury of Starting Over
January 28th, 2010 by Fredrik Olsson — Cocoa, Events
A luxury that you seldom have in the world of software development is the luxury of starting over. I am not talking about throwing away everything and start from scratch. But just taking what you have, and all the experiences learned. Apply some major refactoring to make what works really shine, and without care of [...]
Tags: apple, cocoa touch, frameworks, innovation, ipad, iphone
Learn to Stop Worrying and Love the Singleton
January 15th, 2010 by Fredrik Olsson — Android, Architecture, Embedded, Java, Tips & Tricks
Enterprise applications and mobile applications have quite different requirements. Starting an enterprise application is just something you do once before it continue running for months or years. On the other side of the spectrum most mobile applications seldom runs for more than minutes, run by a bored users standing in line or riding the bus. [...]
Tags: design patterns, java me, mobile, mock, performance, spring ldap
Google Translate and iPhone apps
January 11th, 2010 by Fredrik Olsson — Cocoa, Embedded, Tips & Tricks
The Cocoa and Cocoa Touch frameworks has a really nice function for acquiring a localized string NSLocalizedString(). Just pass in a key and you are done, for strings that are known at least. Sometimes you are getting unknown strings from a data source not under your control, strings representing just a fraction of the text [...]
Tags: frameworks, iphone, localization, mobile, objective-c, web
Add some polish to iPhone app start up
June 29th, 2009 by Fredrik Olsson — Cocoa, Embedded
First impressions last, and the very first impression your users have of your iPhone application is the start up. First step is to have a nice Default.png, but not many words spilled on that one, it is well covered in Apple’s documentation. Creating a perfect Default.png is impossible, especially if you have different setup of [...]
Tags: frameworks, iphone, mobile, objective-c, programming
