Table of Contents

Here’s a full list of content I’ve written over the years. I started developing for iOS in 2011, and started taking notes here since 2012.

Annual Summary

I've written a total of 412 articles for this site and counting!
Here's a list of how many articles I've written per year:

  • 2020 (1)
  • 2019 (4)
  • 2018 (13)
  • 2017 (20)
  • 2016 (13)
  • 2015 (70)
  • 2014 (92)
  • 2013 (151)
  • 2012 (48)
  • Every article I've ever written for this site

    In all these 412 articles, I've written a whopping 130,398 words on this site alone, not including the 10,337 that I've written as comments in response to my readers.

    Combined together, that's a staggering 140,735 words!
    By comparison, an average paperback contains about 50,000 words.

  • Top Secret: The WWDC 2020 Opening Video
  • Mothball Alert
  • What’s New in iOS 12.4
  • What’s New in iOS 12.3.1
  • What’s New in iOS 12.2
  • What’s New in iOS 12.0.1
  • ChargeGate: What’s going on with wired charging on iPhone XS?
  • iPhone XS and XR: It’s like New Coke all over again
  • What’s New in iOS 12
  • How to assign a variable inside a block in Objective-C
  • Why is Xcode getting worse with each passing year?
  • Two Million Visitors
  • Which iPhone should you buy (August 2018)?
  • iOS 12 – First Impressions
  • Building a Day Counter on iOS – Part 3
  • Building a Day Counter on iOS – Part 2
  • Building a Day Counter on iOS – Part 1
  • How to pick a random character from a string in Objective-C
  • How to use Version Control since Xcode 9
  • How to create a macOS Project without Storyboards in Xcode 8
  • How to detect an iPhone X
  • What to do with “Linker Command failed with exit code 1” error in Xcode 8
  • What’s New in iOS 11
  • How to load a different storyboard for different iPad Sizes
  • What is the NSPhotoLibrary Usage Description key?
  • How to delete a git branch with Xcode 8
  • How to fix missing file warnings in Xcode 8
  • How to create infinite loops in Objective-C and C
  • How to add a macOS target to your iOS App
  • How to resize a UITextView dynamically with Auto Layout
  • How to keep a UITextView scrolled to the bottom
  • How to determine the height of the keyboard in iOS
  • How to detect when the keyboard appears and disappears in iOS
  • How to read keyboard input in C
  • How to define a struct in C
  • How to submit your apps to the App Store with Xcode 8
  • How to fix http load errors in your apps since iOS 10
  • How to break a for loop in C and Objective-C
  • How to read Command Line Input on macOS
  • How to use a specific voice for text-to-speech in iOS
  • How to test if an NSArray or NSSet contains an object
  • What’s new in iOS 10.2
  • How to turn an ISO language code into the language identifier
  • How to explode an NSString into single NSString characters
  • What’s New in iOS 10
  • How to check if the Alex Voice is installed in iOS
  • What’s New in iOS 9.3.2
  • How to read MFi Controller input in iOS
  • How to avoid “Capturing ‘self’ strongly in this block is likely to lead to a retain cycle”
  • What’s New in iOS 9.3
  • Health Update
  • How to play videos in iOS 9
  • What’s new in iOS 9.2
  • How to use Arrays in Swift
  • How to fix “no rule to process file” warning in Xcode
  • How to build WordPress for iOS (2015)
  • How to write a Custom Initialiser in Swift
  • How to access values in a Swift Dictionary
  • How to present a view controller on top of a UISplitView Controller – Part 2
  • How to switch root view controllers in Swift
  • How to prevent the screen from sleeping in iOS
  • How to present a view controller on top of a UISplitView Controller – Part 1
  • Building a searchable UITableView in iOS 9 – Part 4
  • Building a searchable UITableView in iOS 9 – Part 3
  • How to use Swift classes in Objective-C
  • How to instantiate an NSManagedObjectContext in iOS 9
  • Building a searchable UITableView in iOS 9 – Part 2
  • How to test if a Navigation Controller’s Back Button was pressed
  • Getting started with Unit Testing in Xcode 7
  • How to extract a UIImage from a video in iOS 9
  • How to kill your app when it enters background mode
  • How to access the Step Counter and Pedometer Data in iOS 9
  • How to create a searchable UITableView in iOS 9
  • Building a searchable UITableView in iOS 9 – Part 1
  • How to access the barometer in iOS 8
  • What’s new in iOS 9.1
  • How to add your own shortcuts above the keyboard in iOS 9
  • How to share objects using your own UIActivity
  • How to share things with a UIActivityViewController
  • How to create Popovers in iOS 9
  • How to handle device rotation since iOS 8
  • How to use Key-Value Observing in Objective-C
  • How to display Live Photos in a view controller
  • How to track finger position and touch force in iOS 9
  • How to create alert views and action sheets in iOS 8
  • 3D Touch in iOS 9, Part 4: Adding Static Shortcut Items
  • 3D Touch in iOS 9, Part 3: Adding Dynamic Shortcut Items
  • 3D Touch in iOS 9, Part 2: Preview Actions
  • 3D Touch in iOS 9, Part 1: Peek and Pop
  • What’s new in iOS 9.0.1
  • How to link directly to your app’s Settings section
  • How to use Touch ID in iOS 8
  • How to avoid “whose view is not in the window hierarchy” error when presenting a UIViewController
  • Xcode: How to activate code completion for already completed methods
  • How to increase the font size in the Xcode Debugger
  • Tip: How to download apps again after changing the region of your Apple ID (for free)
  • How to fix "Couldn't communicate with a helper application" in Xcode 7
  • Why am I not seeing iCloud Store Log Messages in Xcode 7
  • Swift: How to iterate through all elements in an Array, Set or Dictionary
  • How to bring back Code Folding in Xcode 7
  • What’s new in iOS 9
  • How to preview storyboards in Interface Builder
  • How to fetch multiple Entities with an NSFetchedResultsController
  • How to tint the sections in your UITableVIew
  • How to implement Table Headers with NSFetchedResultsController in Core Data
  • FAIL: iOS 9 can’t restore iCloud Backups from iOS 8
  • Apple changes Developer Program
  • How to load UIStoryboards depending on screen height in iOS
  • What’s new in iOS 8.3 and Xcode 6.3
  • What's new in iOS 8.2
  • How to implement context menus for cut/copy/paste in a UICollectionView
  • How to build a UICollectionView in iOS 8
  • How to use UIPasteboard to share data with iOS
  • How to set the Root View Controller in Xcode 6
  • How to create an Unwind Segue in iOS 8
  • What’s new in iOS 8.1.3
  • How to use Categories in Objective-C
  • How to apply Blur Effects to images and views in iOS 8
  • How to take a screeshot in iOS programmatically
  • How to grab a reference to the top most UIWindow
  • How to control the Preview Screenshot in the iOS Multitasking Switcher
  • Deploying your app from Xcode to a device with Release Build Configuration
  • What’s new in iOS 8.1.1
  • What's new in iOS 8.1
  • How to change the Git user pictures in Xcode
  • What’s New in iOS 8
  • How to test which class presented a UIViewController
  • How to access values from the iOS Clipboard (from copy and cut operations)
  • How to add ordered image uploads in WordPress for iOS 4.0.3
  • How to open the Pinterest App from your own iOS App
  • Creating Multiple In-App Purchases in iOS
  • How to fix “The identity used to sign the executable is no longer valid” error in Xcode
  • How to compare two NSDates
  • How to reset your iCloud Ubiquitous Container
  • Completing an iCloud Restore when it's stuck on apps deployed from Xcode
  • How to test if your app needs an upgrade
  • How to fix a Region Mismatch on your Apple ID
  • How to speak Core Data
  • How to bring back Code Completion for @ literals in Xcode 6
  • Creating an In-App Purchase in iOS 7 – Part 6: Restoring
  • Creating an In-App Purchase in iOS 7 – Part 5: Testing
  • Creating an In-App Purchase in iOS 7 – Part 4: The Purchase
  • Creating an In-App Purchase in iOS 7 – Part 3: StoreKit Observer
  • Creating an In-App Purchase in iOS 7 – Part 2: Custom Shop Class
  • Creating an In-App Purchase in iOS 7 – Part 1: Setup
  • Where is the Documents Directory for the iOS 8 Simulator
  • How to use Popovers on iPad – Part 3: Image Picker
  • How to use Popovers on iPad – Part 2: Storyboard
  • How to test the existence of a file with NSFileManager
  • How to migrate your persistent store from one location to another
  • How to use Popovers on iPad – Part 1: Code
  • How to checkout a previous Tag in Git
  • How to convert your iPhone Storyboard into an iPad Storyboard
  • How to create multiple buttons in a UINavigationBar
  • iCloud in your iOS Apps – Part 5: Initial Import Hack
  • How to test why your iCloud Core Data store was changed
  • iCloud in your iOS Apps – Part 4: iCloud and Core Data
  • iCloud in your iOS Apps – Part 3: Document Storage
  • iCloud in your iOS Apps – Part 2: Key/Value Storage
  • iCloud in your iOS Apps – Part 1: Setup
  • How to check if the Main Window in your Mac App was closed
  • How to dismiss the keyboard from a UITextField in iOS
  • What is Cocoa error 134140
  • How to avoid Redefinition of 'Category' as different kind of symbol error in Xcode
  • How to populate an NSTableView in code
  • How to remove focus from an NSTextField
  • How to create pop-up help for your own code in Xcode 5
  • How to create an Alert View in Cocoa
  • How to open a URL in Safari (on Mac in Cocoa)
  • How to support iPad 1 rotation in Xcode 5
  • How to change the header in an NSTableView
  • How to add a background image to an NSView
  • How to disable touch events in iOS
  • How to test which iOS Hardware your app is running on
  • How to set a badge value on a UITabBarController item
  • How to implement a Shake Gesture in iOS
  • How to bind an NSArrayController to an NSTableView
  • How to handle mouse events in OS X
  • How to show the Master View button in a UISplitViewController app
  • How to execute a method on a background thread in iOS
  • Xcode crashes every time you open it – and how to fix it
  • How to tear down your Core Data Stack
  • What is the difference between NSSet, NSArray and NSDictionary
  • How to use Git Branches in Xcode 5.1
  • How to use Git Tags in Xcode 5.1
  • How to build apps for iOS 5 with Xcode 5.1
  • How to create a searchable UITableView (2014)
  • How to push a local Xcode Project to GitHub.com
  • How to draw an MKPolyline on a Map View
  • How to use Core Data with iCloud
  • What is the path to your iCloud Documents folder
  • How to fix "setPreferredContentSize" error in iOS 6 iPad Apps
  • How to open the Google Plus App from your own iOS App
  • How to let the user set a pin on your MKMapKit Map View
  • How to turn an NSString into an NSNumber
  • What to do if your iOS device refuses to install updates over the air
  • How to play video files in your iOS App
  • How to record video files in your iOS App
  • What is the URL to the Documents Directory in iOS
  • How to play audio in iOS
  • How to record audio from the microphone in iOS
  • How to enable iTunes File Sharing in your iOS App
  • How to save a UIImage to the Camera Roll in iOS
  • How to feed a location into an MKMapView
  • How to read the current location of an iOS device
  • How to open items in other iOS Apps
  • How to define a Code Snippet in Xcode
  • How many days are left this year in Objective C
  • How to save a UIImage in Core Data and retrieve it
  • How to react to Local Notifications in your iOS App
  • How to create Local Notifications in your iOS App
  • How to attach custom actions to an Edit Button Item (or The Dark Secrets of the Edit/Done Button)
  • How to reorder a UITableView with Core Data
  • How to display a "spinning wheel" indicator in the centre of your screen
  • How to load a different storyboard depending on screen size in iOS
  • How to dismiss the iOS Keyboard when the done button is pressed
  • Links to the latest Social Icons
  • How to increase your Build Number automatically every time you build your Xcode Project
  • How to read you App Version and Build from the Main Bundle
  • What are the button indexes in a three-button UIAlertView
  • How to restore your single In-App Purchase in iOS
  • How to create a single In-App Purchase in iOS 7
  • How to open the LinkedIn App from your own iOS App
  • How to create a Twitter Follow button in your iOS App
  • How to open the Twitter App from your own iOS App
  • How to open the Facebook App from your own iOS App
  • How to create a Facebook Like button in your iOS App
  • How to store a BOOL as NSNumber
  • How to test the size of an NSDictionary (in bytes)
  • How to create a UITabBarController in code
  • How to swap out a store file in Core Data
  • How to remove the gloss effect from your App Icon in Xcode 5
  • How to convert a file path into an NSURL (and back)
  • How to detect file changes in your ubiquitous iCloud Folder
  • How to find your own apps in Xcode
  • How to fix “Could not change executable permissions on the application” error in Xcode
  • How to restore your iOS device with DFU / Recovery Mode
  • How to fix “property’s synthesized getter follows Cocoa naming convention for returning ‘owned’ objects”
  • How to add a custom initialiser to a Managed Object in Core Data
  • How to use the iOS 5 Simulator in Xcode 5
  • How to test for a (null) string in Objective C
  • How to dismiss a Popover from the current UIViewController
  • How to create a custom UIPickerView
  • How to use the speech synthesiser in iOS 7
  • How to share items with a UIActivityViewController
  • How to post to Facebook and Twitter using Social Framework
  • How to execute a method on another thread using Grand Central Dispatch
  • How to download a file and save it to your app's Documents directory
  • How to test the size of a UIImage (in bytes)
  • How to detect if your app is running on iOS 7
  • How to covert an NSUInteger / NSInteger into an int value
  • How to avoid WAL files in Core Data
  • How to delete a branch in Git
  • How to encode / convert a .strings file into UTF-16LE in Xcode
  • How to preload images in iOS
  • How to delete an NSManagedObject in Core Data
  • How to show SQLite Debug output from Core Data in iOS
  • How to add command line arguments in Xcode 5
  • How to check if your app is running in 64bit
  • How to create an NSDate object from a string such as 22/04/2013
  • How to return the section title in a UITableView with Core Data
  • How to receive Code Support from Apple for Xcode Projects
  • How to create a Fetched Results Controller
  • How to use a provided store file with Core Data
  • How to convert a UIImage into NSData
  • How to fix Core Data error: "Receiver type xxx for instance message is a forward declaration"
  • How to add 64bit support to your iOS apps
  • How to bring back the Status Bar in iOS 6 when compiling with Xcode 5
  • How to react to multiple UIAlertViews
  • How to fix “Use of undeclared identifier NSFoundationVersionNumber_iOS_6_1” error in Xcode 5
  • How to determine screen size in iOS
  • How to change the Deployment Target in Xcode 5 to an iOS Version lower than 7.0
  • How to load different Storyboards for different versions of iOS in Xcode 5
  • How to turn the Navigation Bar in iOS 6 opaque when compiling with Xcode 5
  • How to check if your iOS App comes into the foreground or background
  • How to reverse a BOOL in Objective C
  • How to detect changes in iCloud Key/Value Data
  • How to use iCloud to store Key/Value Data
  • How to use "iOS 6 Legacy Look" in Xcode 5
  • How to fix "ibtool failed with exit code 255"
  • How to animate a UIView
  • How to add touch events to a UITableViewFooter (or header)
  • How to tag a release in Git
  • How to deploy apps to an iOS 7 device and retain iOS 6 “Legacy Look”
  • How to add iOS 7 Icons in Xcode 4.6.3
  • How to fix "No unexpired provisioning profiles found that contain any of the keychain's signing certificates" in Xcode 4
  • How to set the colour in a UINavigationBar
  • How to hide a UIBarButtonItem in your Navigation Controller
  • How to check which iOS version your device is running
  • How to use Targets in Xcode
  • How to define Preprocessor Macros in Xcode
  • How to check if your app is running on an iPad or an iPhone
  • How to hide navigation elements with swishy animations
  • Managed Object Context arrives empty when passed via a segue in iOS 5
  • How to find out what class an NSObject belongs to
  • How to define a method that takes multiple parameters
  • How to list the contents of an NSURL
  • How to display a UIImage from an NSURL
  • How to copy a file from the Main Bundle into the Documents Directory in iOS
  • How to use Core Data with multiple Store Files
  • How to create an NSDate object
  • How to display the full month from an NSDate (such as "February")
  • How to create Linkshare Affiliate Links to iTunes Products
  • How to create a UIBarButtonItem in code and make it call a method
  • How to remove a Core Data Model Version
  • How to create a View Controller defined in you your Storyboard programmatically
  • How to add a Search Display Controller to a UITableView (in code)
  • How to parse a JSON URL in iOS and Cocoa
  • How to use a Selector
  • How to remove the first n characters from an NSString
  • How to create a Fetch Request in the Xcode Model Editor
  • How to retrieve a Managed Object in Core Data Fetch Requests
  • How to create a Managed Object in Core Data
  • How to create a Save As dialogue with NSSavePanel
  • How to create an Open File dialogue with NSOpenPanel
  • How to pass data from the App Delegate to your Top View Controller
  • How to return the number of rows in a UITableView with Core Data
  • How to return the number of sections in a UITableView with Core Data
  • How to convert a Persistent Store from XML to SQLite in Core Data
  • Binding an NSTableView to Core Data without code
  • How to assure your values are as intended with NSAssert
  • What is an Exception Breakpoint
  • How to activate a UISearchDisplayController
  • How to extract first n characters of an NSString
  • How to remove the last n characters from an NSString
  • How to create your own Data Type using typedef
  • How to create an Enumeration (enum)
  • How to create an NSIndexPath and specify its components
  • How to add some time to an NSDate
  • How to normalize NSDate objects (i.e. set the time to midnight)
  • How to determine how many days / months / years have passed between two NSDate objects
  • How to pop a UINavigationController in code
  • How to “quick save” in Core Data
  • How to change the back button text on a UINavigationController
  • How to define a Protocol in Objective-C
  • How to dequeue UITableViewCells
  • How to hide (and show) the UISearchBar in a UITableView
  • How to create a searchable UITableView
  • How to fix "this class is not key value coding-compliant" after accidentally adding an IBOutlet instead of an IBAction
  • How to convert an NSString into an integer
  • How to loop through every element in an NSArray
  • How to generate a random number in iOS
  • How to read the contents of a text file into an NSString
  • How to check for Network Connectivity in iOS
  • How to delete a file
  • How to test if a file exists
  • How to access the iPhone Simulator Directory Structure
  • How to update an iOS device from a Beta to a Release Version
  • How to create an NSTimer
  • How to load a UIImage that we’ve previously saved
  • How to save a UIImage
  • How to select a UIImage from the camera roll (and use it)
  • How to combine NSString objects
  • What is the iOS Signing Key in PhoneGap Build and Dreamweaver
  • How to create a PhoneGap project for Xcode 4.5
  • iOS 6 Table View crashes when deployed to iOS 5
  • How to set the title in a Navigation Bar
  • How to create a UIActionSheet and respond to it
  • How to change a cell's selection colour
  • How to retrieve the current URL from a UIWebView
  • How to open a URL in Safari programmatically
  • How to use iCloud key value storage
  • How to add an Observer to your class
  • When Xcode 4.5 suddenly stops running your app on a device (could not launch app)
  • How to place an existing Xcode project under Version Control with Git (and ignore files you don't want to track)
  • How to disable cell interaciton in UITableView
  • How to create a transparent cell in a UITableView
  • How to rename an app in Xcode 4.5
  • How to hide a UIBarButton item
  • How to close your app programmatically
  • Great tutorial on how to implement In App…
  • How to change the background colour of a UIView
  • How to create an NSString from an NSDate
  • How to retrieve the current User Locale
  • How to localize your project in Xcode 4.4
  • How to link to an iOS App
  • How to add version control to an existing project in Xcode
  • How to disable scrolling in a Table View
  • How to style a table view header / footer
  • How to add a cutsom accessory image to a Table View Cell
  • How to add a background image to a table view
  • How to react to a UIAlertView
  • How to handle an error while loading a UIWebView
  • How to show the Network Activity Indicator (spinning wheel in the iOS status bar)
  • How to pass an Index Path to another table
  • How to create a custom button
  • How to add the “spinning wheel” Activity Indicator to a web view
  • How to convert an NSArray into an NSMutableArray
  • How to change the text on a Button
  • How to convert an integer into a string (text object)
  • How to share data between Navigation Controllers
  • How to trigger a Modal Segue
  • How to load a URL into a UIWebView
  • How to make your iPhone vibrate
  • How to play an Audio Alert
  • How to play a sound effect
  • How to remove the gloss effect from iOS Logos
  • How to rename your iOS App in Xcode 4.x.x
  • How to add a Framework to Xcode 4.x.x
  • How to send an email in iOS
  • How to create an Alert View
  • How to load data in iOS
  • How to save data in iOS
  • How to exchange data between View Controllers
  • How to add a second View Controller
  • I’m trying to read out the value of…
  • How to concatenate strings (i.e. print several at a time)
  • How to check the battery level of your iOS device?
  • How to test the state of a UISegmentedControl
  • NSDate and NSDateFormatter
  • How to test the state of a UISwitch
  • Welcome to my iOS Dev Diary