Monthly Archives: September 2014

Resources for Learning To Write Unit Tests in iOS and Cocoa

I used to joke that writing unit tests for iOS development is not necessary since there’s a compiler and laugh real hard. What I realized was that some people thought that it wasn’t a joke. Even worse, when I asked about unit tests during interviews, some candidates didn’t know how to write tests.

The root cause of this, as I see it, is that writing tests aren’t really covered at Apple’s developer documentations. And with all the new boot camps and training courses turning out iOS developers not covering testing at all, testing issue escalates to yet another level.

Here are a list of my recommendations to get started. I will create screencasts on iOS development in the future since I have more time and will ALWAYS show tests along with anything I do. Hope this helps and ping me with any questions, I’ll do my best to help.

Screencasts

Great screencasts by Jon Reid with real world examples
UIViewController TDD
iOS Model-View-Controller TDD
Objective-C TDD Example
Lynda.com has a course based on Xcode 4, but just about all the stuff still applies.

Books
Test-Driven iOS Development (Developer’s Library)
Test Driven Development: By Example

Blogs/Online
Since you’re already here, please check again for contents as I create them regularly (hopefully) ;)
Quality Coding for iOS Developers – Jon Reid
devmonologue.com – start with Introduction to Test Driven iOS Development

Creating Self-Contained Google Chrome App

Sick of opening different Google Chrome windows for work and private accounts? I use following script to create a separate standalone Chrome app for that. Take a look at the code and give it a spin. This is for Mac ONLY!!!


#!/bin/sh

echo "What should the Application be called (no spaces allowed e.g. GCal)?"
read inputline
name="$inputline"

echo "What is the url (e.g. https://www.google.com/calendar/render)?"
read inputline
url="$inputline"

echo "What is the full path to the icon (e.g. /Users/username/Desktop/icon.png)?"
read inputline
icon="$inputline"

chromePath="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
appRoot="/Users/$USER/Applications"

# various paths used when creating the app
resourcePath="$appRoot/$name.app/Contents/Resources"
execPath="$appRoot/$name.app/Contents/MacOS"
profilePath="$appRoot/$name.app/Contents/Profile"
plistPath="$appRoot/$name.app/Contents/Info.plist"

# make the directories
mkdir -p "$resourcePath" "$execPath" "$profilePath"

# convert the icon and copy into Resources
if [ -f "$icon" ] ; then
sips -s format tiff "$icon" --out "$resourcePath/icon.tiff" --resampleHeightWidth 128 128 >& /dev/null
tiff2icns -noLarge "$resourcePath/icon.tiff" >& /dev/null
fi

# create the executable
cat >"$execPath/$name" < "$plistPath" <

CFBundleExecutable
$name
CFBundleIconFile
icon
EOF

RSpec 3.1 is here

RSpec 3.1 has been released with some interesting changes. Take a look at the changes here.

It has a ton of good stuff including easy exclude pattern, compound block matcher (this will have the most affects on current specs for me), and etc…