Archive for 'Programming'

Swiftly Improving

So you catch the new Swift 1.2 seed yet? If not, looks like we could call this the Daft Punk release:

  • Harder — “compiler crashes have been fixed”, “fewer SourceKit warnings” …
  • Better — “Source files that haven’t changed will no longer be re-compiled by default…”
  • Faster — “Debug builds produce binaries that run considerably faster, and new optimizations…”
  • Stronger — “the language has been further refined to ensure safe, predictable behavior. We also continue to improve the interaction between Swift and Objective-C…”

Time to get on the latest rewrite round! Here’s a selection of good discussions of those “has been further refined” details:

NSHipster’s Swift 1.2’s What’s New in Swift 1.2’s Major content update for Swift 1.2

Let’s Talk About Sets, Baby!; Swift Set Type in Swift 1.2

Changes to the Swift Standard Library in 1.2 beta 1

Swift 1.2 Performance: Pretty Much Fine; Performance Case Study on Swift 1.1, Swift 1.2, and Objective-C; Swift Performance in Xcode 6.3 Beta

Also, we’d like to draw your attention to a couple so far generally overlooked points that have shown up on boards and mailing lists. First off, the souped up if let

The “if let” construct has been expanded to allow testing multiple optionals and guarding conditions in a single if (or while) statement using syntax similar to generic constraints:

if let a = foo(), b = bar() where a < b, let c = baz() {}

This allows you to test multiple optionals and include intervening boolean conditions, without introducing undesirable nesting (i.e., to avoid the “pyramid of doom”). (19382942)

is actually more souped up than those notes make fully clear:

  • can be an arbitrary number of let + where clauses in a single statement
  • can also be used with ‘if var’ should you wish to mutate values in the conditions
  • can also use a full multiple clause statement in a while loop!

That should be quite enough conditional flow expressivity to quiet all the grumbling on that front.

Next, if you’re chomping at the bit to add the new return value contract annotations to your legacy Objective-C headers, “nullability” is the so far undocumented clang feature for that, so here is a currently-submittable way to add that to production code, from Jens Alfke on the Xcode list:

So the magic invocation I’m putting in my header files (after the #includes) is:

#if __has_feature(nullability) // Xcode 6.3+
#pragma clang assume_nonnull begin
#define nullable
#define __nullable

… interface declarations go here…

#if __has_feature(nullability)
#pragma clang assume_nonnull end

In property declarations you’ll need to make “nullable” the last meta-attribute, otherwise you’ll get syntax errors in earlier versions of Xcode; so for example “(readonly, nonatomic, nullable)” works but “(readonly, nullable, nonatomic)” is a syntax error because in Xcode 6.1 the parser will see two adjacent commas.

[This is working well, but in converting my interfaces I found a nasty compiler bug that I’m about to submit to Apple — if you declare multiple properties on a single line, adding the (nullable) attribute will cause the parser to lock up in an infinite loop:
@property (readonly, nullable) id a, b, c; // don’t do this!
I spent an hour or so with my MBP’s fan running full speed before figuring out which exact line triggered this.]

Lastly, one of the more subtle consequences of Swift 1.2 no-op cleanup is that you can no longer cleanly use ? as a postfix on an optional optional, as for instance when using map on an optional dictionary lookup:

let x:Int? = { $0["a"] }?

The Chris Lattner approved way to rewrite this pattern for 1.2 is

let x:Int? = { $0["a"] } ?? nil

to make it more clear to the reader exactly what the intention is here.

So we’re pretty chuffed with how this Swift thing is coming along; pretty much every undue pain point seems addressed to wide satisfaction around teh intertubes — so if you’ve been holding off on jumping in, NOW might be a very good time to get on that!


Swift: And Xcode 6.3 beta 2 did drop as the gentle rain

New Playgrounds; New Playgrounds Part 2 – Sources; Swift Playground Tip – Using External Code Files; Swift: Using functions to initialize View types

Nullability and Objective-C; Nullability and Inherited Initializers in Objective-C

Swift 1.2 Update (Xcode 6.3 beta 2) – Performance

Swift v1.2 β2 Performance

Changes to the Swift standard library in 1.2 betas 2 and 3;

Xcode 6.3: Wheeeee! Beta threeeeee!

Tips for Upgrading to Swift 1.2 and Xcode 6.3

Friday Q&A 2015-04-17: Let’s Build Swift.Array discusses the new isUniquelyReferenced

Downcasting in Swift 1.2 with the as! Operator

Swift 1.2: Some overlooked goodies

How to Create a NSNumberFormatter Singleton in Swift

Fetched Result Controller delegate not called after swift 1.2 / xcode 6.3 update

This is a behavior change in Swift 1.2: methods in non-Objective-C-derived classes will no longer be implicitly marked @objc even if they match an Objective-C protocol. You can explicitly mark the methods with the @objc attribute if you don’t want to extend NSObject. This is described in the Xcode 6.3 release notes.

Swift Style Guide: April 2015 Update; SlideShareInc / swift-style-guide; github / swift-style-guide; Swift: Don’t do that

Creating ASCII art in functional Swift is very stylistically functional.

A little @autoclosure hacking “Starting in Swift 1.2, autoclosure defaults to noescape … Fortunately, Apple introduced an “escaping” annotation to override this limitation.”

Continue Reading →

Procedural Level Generation

Here’s an interesting set of links from an HN discussion, should you be interested in making a roguelike of your own some day as All True Programmers Are:

Another cheap and very effective technique for procedural level and maze generation is to create a “walker” or series of walkers that start at some point, walk in a direction and then turn at random intervals, leaving a path of corridors and occasionally rooms in their wake. This is how Vlambeer’s Nuclear Throne generates its levels, and there’s a good article from Jan Willem Nijman, it’s developer, here

If you’d like a more academic look into procedural 2d game generation, there’s a nice research paper here, that describes a method and talks about Spelunky a lot (the king of procedural 2d level generation, in my book)…

Additionally, Derek Yu open sourced the code to the original Spelunky, and Darius Kazemi created a great breakdown of its level generation techniques here, also with interactive examples…

The action roguelike genre, particularly the roguelike FPS, is a vital new area being explored by indie game developers. It reminds me of the way 2D platformers were mined, explored, and iterated upon starting around 7 or 8 years ago…

Cool stuff! At least to us old school types who still think ASCII Nethack is TEH BESTEST GAME EVAR!!!1!one!!!


Rooms and Mazes: A Procedural Dungeon Generator

Building a Procedural Dungeon Generator In C#

Procedural Content Generation in Games: A textbook and an overview of current research

The Key Design Elements of Roguelikes

Procedural Dungeon Generation Algorithm

Continue Reading →

A Forest Of Loggers

So since we moved off Lightspeed Pascal as our Macintosh development environment way back in the day, we’ve been toting around this suite of logging, timing, and so forth debugging macros that by this time can be called transparently from .c/.cpp/.m/.mm files in development environments ranging from Lightspeed C through Metrowerks CodeWarrior up to Xcode 6+; but as we gear up to take on our intended New Year’s resolution of shipping a full hand of Swift apps next year … oh wait, there’s no macros in .swift code now! Well, there goes two and a half decades of accumulated cleverness out the window, bah humbug.

Not that it would be too terribly hard to rewrite said suite using NDEBUG and @autoclosure like assert(), but why bother with that when no doubt there’s somebody else’s projects for native Swift logging out there doing that already we can join? And why yes, here’s two that the exemplarily diligent ManiacDev folk have turned up on Github:

XCGLogger looks considerably more active than Swell, so we’ll go with that one. Unless any of you Dear Readers have an excellent reason why not. But long as we’re on the topic, let’s take a look at what Objective-C options checking CocoaPods brings up that we could raid for feature additions … my, there are a lot, aren’t there now?

  • CCLogSystem (5/54/18) “A Log system for iOS.Support print, record and review logs.”
  • CocoaLumberjack (270/4131/705) “A fast & simple, yet powerful & flexible logging framework for Mac and iOS”
  • DLLog (1/2/1) “NSLog-like logging API with support for level and context filtering”
  • GRLogger (1/2/1) “a logger utility for debugging and tracing”
  • LibComponentLogging (5/101/13) “Logging for Objective-C with log levels and log components.”
  • Log4Cocoa (12/80/29) “is a Log4j port for iOS and Mac OS X”
  • MTLog(11/218/24) (ManiacDev) “NSLog replacement for coders!”
  • NALog (1/3/0) “An easy, lightweight, and simple NSLog-based logging tool”
  • NBULog (13/22/5) “Log framework based on CocoaLumberjack…”
  • NSLogger (147/2447/299) “A modern, flexible logging tool”
  • NWLogging (7/14/4) “A minimalistic logging framework for Cocoa”
  • OCLogTemplate (8/9/3) “A flexible logging header for Objective-C”
  • TFLogger (7/2/0) “Dependency free logging library”
  • TULogging (1/7/0) “Better logging that uses ASL log levels”
  • UALogger (11/235/21) “A powerful and flexible logging utility for Mac/iOS apps”
  • WZLog (1/2/0) “A log system for iOS” … and that’s about it not in Japanese.
  • XLFacility (8/97/2) “Elegant and extensive logging facility for OS X & iOS (includes database, Telnet and HTTP servers)”

CocoaLumberjack is pretty much the venerably accepted standard, as the numbers there attest, but some of these othes look interesting too. Particularly that very last one, XLFacility; from the ManiacDev writeup,

Some of the features of XLFacility include:

  • Viewing of logging messages in real-time via Telnet or TCP
  • An HTTP server for viewing real-time log messagess and browsing past logging messages
  • Different logging levels, and macros for easy logging at each level
  • Customizable logging formats
  • An in-app logging overlay that can appear when messages are sent to XLFacility
  • A nice syntax for creating your own custom loggers

With XLFacility you can log to the console, a file, a SQLite database, and you can also view messages in realt-time via Telnet or TCP and there is a built-in http server so you can browse past log messages or see live updates…

That’s some serious feature-laden logging there, that is.


ZHSwiftLogger: “…will use println() for development and use NSLog() for production.”

PrintlnMagic “An alternative for Swift’s println() function along the lines of DLog.”

SwiftLog “Simple and easy logging in Swift.”

Debug Logging In Swift

Teleport-NSLog: Open Source Library Enhancing NSLog Allowing You To Log To A Remote Server

CleanroomLogger: “provides a simple, lightweight and performant logging API written in Swift”

Learn How People Use Your App – an App Analytics Tools Round-up

ARAnalytics : “is a analytics abstraction library offering a sane API for tracking events and user data. It currently supports on iOS: TestFlight, Mixpanel, Localytics, Flurry, GoogleAnalytics, KISSmetrics, Crittercism, Crashlytics, Bugsnag, Countly, Helpshift, Tapstream, NewRelic, Amplitude, HockeyApp, ParseAnalytics, HeapAnalytics, Chartbeat, Yandex Mobile Metrica, and Branch. And for OS X: KISSmetrics and Mixpanel.”

ARAnalyticsLogger: “A bridge between CocoaLumberjack and ARAnalytics,” derived from CrashlyticsLumberjack

Aspect-Oriented Programming and ARAnalytics

Swiftalytics: “A declarative Swift DSL for your view tracking needs.”

Continue Reading →

AWS Mobile SDK v2

In case you’re not on the AWS mailing list like apparently we got onto somehow, there’s a new version of the AWS mobile SDK out, and it looks like it might be worth some serious consideration for your cross platform back end needs:

The AWS Mobile SDK helps you build high quality mobile apps quickly and easily. It provides access to AWS Mobile services, mobile-optimized connectors to popular AWS data and storage services, and easy access to a broad array of other AWS services…

And what are these services? Quite a bit actually:

Amazon Cognito makes it easy to save user data, such as app preferences or game state, in the AWS Cloud without writing any backend code or managing any infrastructure. You can save data locally on users’ devices allowing your apps to work even when the devices are offline. With Amazon Cognito, you can focus on creating great app experiences instead of having to worry about building and managing a backend solution to handle identity management, network state, storage, and sync.

Amazon Mobile Analytics lets you easily collect, visualize, and understand app usage data at scale. Amazon Mobile Analytics is designed to provide aggregated data within 60 minutes of receiving events from an app so that you can act on the data more quickly. With Amazon Mobile Analytics, you get 100 million events per month for free.

Amazon Simple Notification Service (Amazon SNS) makes it simple and cost-effective to push notifications to Apple, Google, Fire OS, and Windows devices, as well as Android devices in China with Baidu Cloud Push. You can also use SNS to push notifications to internet connected smart devices, as well as other distributed services. You get 1 million notifications/month for free.

Amazon Simple Storage Service (S3) provides secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web services interface to store and retrieve any amount of data from anywhere on the web, and the AWS Mobile SDK includes additional functionality to optimize access from a mobile device.

Amazon DynamoDB is a fast and flexible NoSQL database service for all applications that need consistent, single-digit millisecond latency at any scale. It is a fully managed database and supports both document and key-value data models. Its flexible data model and reliable performance make it a great fit for mobile applications.

Amazon Kinesis is a fully managed service for real-time processing of streaming data at massive scale. Amazon Kinesis can continuously capture and store terabytes of data per hour from hundreds of thousands of sources such as mobile app events and website clickstreams. You can also emit data from Amazon Kinesis to other big data services such as Amazon S3, Amazon Redshift, and Amazon Elastic Map Reduce (Amazon EMR).

Haven’t used any of this either v1 or v2 ourselves, but if you feel like trying it, there’s a 12-month free plan; sign up, check it out,

To get started, learn more at and download the iOS or Android SDK. Engage with the AWS developer community on the AWS Mobile forums or our Github Android|iOS repositories. To stay up-to-date, follow us on Twitter at @awsformobile.

and let us know how that went for you!

Continue Reading →

Bezier Pathological Strings

Here’s a handy little Swift library for adding a dab of style to your string rendering:

lvnyk / BezierString: Rendering NSAttributedStrings along arbitrary UIBezierPaths


Take your string and your path and generate a UIImage, draw into a CGContext, or use UIBezierLabel anywhere you’d use a common-or-garden UILabel. Cool beans!

And if you’re not overly familiar with UIBezierPaths, check out some of our other mentions of their care and feeding and applied niftiness:

Bézier Path Construction

Bezier Path Boolean Ops

Bezier PathMove

Core Animating Interfaces

Library: Capture a Signature

h/t: ManiacDev!


How to curve CGMutablePath?mayoff / path-warp: UIBezierPath+Rob_warp.h

Custom UIView Animations with Vector Graphics

Cubic Bezier Curves Under the Hood

Open Source iOS Library That Adds Caching To UIBezierPath For Increased Performance

Mastering the Bézier Curve in Sketch

JAMSVGImage: “Display resolution independent SVGs in iOS.”; timrwood / SVGPath: “Parse SVG path strings into UIBezierPaths in Swift”; The Ultimate Guide to SVG; check out our old SVGKit notes

Shapes: Open Source iOS Library Making It Easier To Create Custom Shaped And Animated Components

Bezier Paths and Gesture Recognizers

Continue Reading →

Prerelease App Store Testing

What, you say, aren’t “prerelease” and “App Store” definitionally contradictory? Why no, no in fact they are not!

How to Test the Final App Binary before It Is Released on the App Store

  1. Manually release the app…
  2. Submit your app for review as usual…
  3. Pending developer release…

… At this point the Promo Codes link appears at the bottom of the app details page.

And apparently promo codes can be requested and work just fine even when the app isn’t technically released yet! Aside from this small caveat:

… when the promo code is for an update, iOS sometimes gets confused. It’s not consistent. But sometimes the App Store app shows an Update button right after the download is complete. It’s not clear to me if tapping the Update button will download the update you really want, or if it will “update” to the latest public release available on the App Store. Sometimes the whole process fails and my update is nowhere to be seen. So don’t be dismayed if need to burn more than one promo code to get the binary you want downloaded onto your device…

Still, it’s pretty awesome to be able to do a final final final test that no showstoppers slipped through into the actual App Store binary and reduce your launch day stress by several orders of magnitude, tisn’t it now?

Continue Reading →

NSFileCoordinated iOS IPC

IOS IPC? For reals? Well, for a “your app group” definition of “P”, yep pretty much:

Sharing data between iOS apps and app extensions

You’ll want to use NSFileCoordinator any time you want to read or write your shared files. You’ll also want to implement NSFilePresenter any time you need to know if a file has changed. These were introduced as companions to iCloud, where both your app and the iCloud daemon might want to access the same file. They’re not iCloud specific, though…

There’s still no full IPC mechanism on iOS. NSDistributedNotification hasn’t made the jump from OS X to iOS and probably never will. But file coordination and presentation can serve the same purpose, as long as the apps use the same app group.

When I was adding file coordination and presentation to my demo app, I realized that they could also be used for notifications between an app and its extensions. If one of them does a coordinated write while the other is using a file presenter for the file, the call to presentedItemDidChange happens almost instantly. Notification is the whole purpose of that method, so it makes sense it would work this way. I want to be notified if a specific file changes, and that’s how I get the notification.

But you don’t need to care about the file contents to be interested in notifications. If you just want a notification, choose a file name and use it as the notification mechanism. Any time one process needs to notify the other, make a change to the file. The other will get a file presenter call, and the notification is complete. It feels sort of like a hack but really this is exactly how the API is designed to work.

Cool beans! That opens up the extension useful problem space a good deal, doesn’t it now?

h/t: Michael Tsai!


Accessing Shared Data from an App Extension and its Containing App

Important: When you create a shared container for use by an app extension and its containing app in iOS 8, you are obliged to write to that container in a coordinated manner to avoid data corruption. However, you must not use file coordination APIs directly for this [UPDATE: in iOS 8.1.x and earlier]. If you use file coordination APIs directly to access a shared container from an extension in iOS 8.0 [UPDATE: in iOS 8.1.x and earlier], there are certain circumstances under which the file coordination machinery deadlocks.

WatchKit Data Sharing: Beware of the NSFileCoordinator and NSFilePresenter

Introducing MMWormwhole

ddeville / LLBSDMessaging: Interprocess communication on iOS with Berkeley sockets

Interprocess communication on iOS with Mach Messages

File Coordination Fixed: “In iOS 8.2 or higher, the obvious approach should now be safe.” as noted above.

Continue Reading →

Demassify View Controllers

Nice writeup here on formalizing pattern names for approaches to avoiding that Massive View Controller problem it’s all too easy to slip into:

8 Patterns to Help You Destroy Massive View Controller

View controllers become gargantuan because they’re doing too many things. Keyboard management, user input, data transformation, view allocation — which of these is really the purview of the view controller? Which should be delegated to other objects? …

Data Source

The Data Source Pattern is a way of isolating the logic around which objects live behind what index paths. Particularly in complicated table views, it can be useful to remove all of the logic of “Which cells are visible under these conditions?” from your view controller…

Standard Composition

View controllers can be composed using the View Controller Containment APIs introduced in iOS 5. If your view controller is composed of several logical units that could each be their own view controller, consider using Composition to break them apart…

Smarter Views

If you’re allocating all of your view controller’s subviews inside of the view controller’s class, you may consider using a Smarter View. UIViewController defaults to using UIView for it’s view property, but you can override it with your own view…


The Presenter Pattern wraps a model object, transforms its properties for display, and exposes messages for those transformed properties…

Binding pattern

In method form, this might be called -configureView. The Binding Pattern updates a view with model data as it changes…

Interaction pattern

Interactions often include an initial user input (like a button press), optional additional user input (“Are you sure you want to X?”), and then some activity, like a network request or state change. The entire lifecycle of that operation can be wrapped up inside the Interaction Object…

Keyboard Manager

Updating the view after the keyboard state changes is another concern that is classically stuck in the view controller, but this responsibility can easily be shifted in a Keyboard Manager. ..


Navigating from screen to screen is normally done with a call to -pushViewController:animated:. As these transitions get more complicated, you can delegate this task to a Navigator object..

h/t: Michael Tsai!

And while you’re contemplating how to split things up into maintainability, also check out

Clean Up The Application Delegate With Initializers

Continue Reading →

Watch Out!

Just in case you were off in rural Bangladesh like us last week, the Apple WatchKit SDK is out:

Developers, Start Designing Apps for Apple Watch

WatchKit Developer Page

Video Overview of WatchKit

Apple Watch Human Interface Guidelines

WatchKit Programming Guide

Lister (for Apple Watch, iOS, and OS X)

Apple Watch Design Resources

WatchKit Development Tips

And here’s a survey of some immediate reactions:

What you need to know about WatchKit

Pretty cool stuff, right?

Initial Impressions for WatchKit

… I am very pleasantly surprised by how capable it is … Rather than just saying we only get Glances and Notifications, we get to build actual, useful watch apps …

WatchKit: Initial Impressions

Overall, WatchKit offers far more than I expected in this initial release … From the new Apple Watch-specific controls, to glances, actionable notifications, deep linking with Handoff, image caching and more — as a developer, this is the kind of stuff that gets me excited!

A day with WATCH

David Smith put it best: there’s a lot more here than most of us expected…

How To Create A “Hello World” WatchKit App and WatchKit: Let’s Create a Table and WatchKit: Page-Based Navigation and WatchKit: Hierarchical Navigation and WatchKit: Accessing Data From Your iOS App and WatchKit: The First Glance at Glances and WatchKit: Let’s Add a Menu [and WatchKit: Customizing the Global Tint and …]

I can’t get enough of WatchKit. Sooooo much to learn!

WatchKit Tutorial with Swift: Getting Started

iOS developers rejoice – WatchKit is finally here!

Apple’s new WatchKit SDK hints at the future of Apple Watch’s apps

WatchKit is here. What does it mean?

Well-nigh euphoric, you people!


Watch Hackathon Live

Hello WatchKit! Learn how to build an Apple Watch app

jblocksom / WristComms: “WatchKit extension / host app communications example.”

Thoughts on WatchKit

Confirmed: Apple Watch Runs iOS

Apple’s San Francisco Typeface

WatchKit Extension Problem: Sharing a Core Data Store Can Lead to Duplicate Entries

johnno1962 / WatchkitCurrency: “Swift Currency Convertor for iWatch with flexible interface.”

frosty / Flipbook: “A Swift tool to render UIViews to image sequences for use with WatchKit…”

azamsharp / WatchNotes: “Notes on your wrist!”

Positioning Tutorial in WatchKit

WatchKit Swift Tutorial – Download Xcode 6.2 Beta and Start Making Apple Watch Apps

David Smith’s As I Learn WatchKit (AILW)

  1. Introducing As I Learn WatchKit (AILW):
  2. Visualizing Watch Apps
  3. Learning in the Dev Forums
  4. Building a basic WatchKit App
  5. Economics of WatchKit Apps
  6. Introducing MMWormhole
  7. openParentApplication:reply:
  8. WatchKit Data Sharing (Video)
  9. Immediacy
  10. Bezel and xScope
  11. Inquisitive #21: Exploit the Constraints
  12. Beta 4 Documentation Changes
  13. A Day Spent Designing a WatchKit UI
  14. WatchKit UI Component Walkthrough (Video)
  15. Ubiquitous Time
  16. Understanding WatchKit Layout (Video)
  17. Guessing the Apple Watch Release Date
  18. Displaying Tabular Data (Video)
  19. Beta 5 Documentation Changes
  20. Tap Distance
  21. WatchCon 2
  22. A few interviews
  23. Prettier Status Bar Trick
  24. Spring Forward Event Announced
  25. #212: Four Phases of a Gold Rush
  26. Adding a Touch of Liveliness
  27. WatchSim
  28. Connected #33: The RoboCop of Apple Watches
  29. Appearance: Mobile Couch #54
  30. Pending an Apple Release
  31. My WatchKit Apps
  32. First WatchKit Review Guideline
  33. Thinking about Load Time

NSHipster’s Watch​Kit

Top 5 Things to Consider When Designing for Apple Watch

How to write a WatchKit Counter App in Swift

WKInterfaceTimer – Add a Countdown to a Swift WatchKit App

WatchKit Data Sharing: Beware of the NSFileCoordinator and NSFilePresenter

Introducing MMWormwhole

WatchKit Resources

WatchKit and Threading

Limitations of Dates and Timers on WatchKit

WatchKit: Open Your iOS App From The Watch

konstantinkoval / WatchKit-Apps : “Tutorials app for WatchKit.”

SpeakerDeck: WatchKit by Jonathan Blocksom

Integrating FontAwesome on WatchKit

How Your Favorite Apps Will Look On The Apple Watch

WatchKit Introduction: Building a Simple Guess Game

Radial Bar Chart Generator

Designing Chronicons: Icon Size

WatchKit Extensions: Communicating with your Parent Application; Communicate Between WatchKit Extension and App

D-32 / AppleWatchSBB: “Apple Watch app to access the SBB timetable”

Bezel: “shows a window that looks like an Apple Watch and projects the contents of the Simulator’s watch window into it.”

Apple Watch wins the wrist war before it starts

Apple Watch. Tesla Car. How Far Can We Drive Them?

WatchKit Delegates and Contexts

WatchKit Settings Bundle

5 Important Design Principles for Apple Watch Apps

Apple Watch apps: What to pay attention to when designing for the wrist

Instagram/IGInterfaceDataTable: “A category on WKInterfaceTable that makes configuring tables with multi-dimensional data easier.”

kenshin03/Cherry: “Mini Pomodoro Timer app designed for the  Watch.”

radianttap/WatchRingGenerator: “iOS app to generate series of PNG images, to be used in WatchKit apps.”

A Set Of Apple Watch Example Projects For Learning WatchKit

Wenderlich tutorials: Getting Started and FAQ and Tables and Network Requests and More Tables, Glances and Handoff

FancyPixel / gulps: “is an open source app for iOS and Apple Watch that lets you keep track of your daily water consumption.”

Tutorial: Sharing Data between WatchKit & your App, with Realm

Create an Apple Watch Game with Xcode and Watchkit

“My Biggest WatchKit Mistake”; More “WatchKit Mistakes”

Watchkit and iOS App Messaging with openParentApplication

Icons for Apple Watch – The Definitive Guide

Design for Wearables: “Learn to design delightful wearable experiences by going step-by-step through the process of designing an  Apple Watch app”:

  1.  Apple Watch Vision & Design Principles
  2. User Research & Discovery
  3.  Apple Watch App Primer
  4. WatchKit App
  5. Glances

“how to use Sketch, After Effects, and Xcode to craft the animation used in the Uber watch app.”

Watchkit: Best Practices for Sharing Data Between Your Watch and iOS App; WatchKit and Sharing App Data

Jared’s Code Signing Tips: Apple Watch Edition

Mike Swanson’s WatchKit Development Tips now does Apple Watch

WatchKit Controller Life Cycle

WatchKit Image Tips

Open Sourcing the Highstreet WatchKit App

WatchKit Connectivity and File Transfers

watchOS-2-heartrate: “watchOS 2.0 healthkit, heartrate streaming, start workout session”

Continue Reading →

Stand Back and Deliver

Now here’s some awesomeness topped with awesome sauce and a side of awesome for reducing your blood pressure:

KrauseFx / deliver: Deploy screenshots, app metadata and app updates to the App Store using just one command.

What, seriously? Apparently so:


  • Upload hundreds of screenshots with different languages from different devices
  • Upload a new ipa file to iTunes Connect without Xcode from any computer
  • Update app metadata
  • Easily implement a real Continuous Deployment process
  • Store the configuration in git to easily deploy from any computer, including your Continuous Integration server (e.g. Jenkins)
  • Get a PDF preview of the fetched metadata before uploading the app metadata and screenshots to Apple: Example Preview (Yes, those are screenshots taken for all screen sizes)

Yeah, we’ve been in deployment-challenged places where we really, seriously, needed that tool…

h/t: iOS Dev Weekly!


@KrauseFx seems to have the mission Make Everything Deployment-Related Work — also check out

KrauseFx / sigh: “Because you would rather spend your time building stuff than fighting provisioning.”

KrauseFx / snapshot: “Create hundreds of screenshots of your iPhone app… while doing something else.”

KrauseFx / frameit: “Want a device frame around your screenshot? Do it in an instant!”

KrauseFx / PEM: “Tired of manually creating and maintaining your push certification profiles?”

KrauseFx / produce: “Create new iOS apps on iTunes Connect and Dev Portal using the command line.”

… and all of the above are now connected into fastlane:


fastlane lets you define and run your deployment pipelines for different environments. It helps you unify your apps release process and automate the whole process. fastlane connects all fastlane tools and third party tools, like CocoaPods and xctool.

So that makes … everything pretty easy, really!

homebrew-cask: “A CLI workflow for the administration of Mac applications distributed as binaries.”

quick-look-plugins: “List of useful Quick Look plugins for developers.”

itc-api-docs: “The unofficial documentation of the iTunes Connect JSON API.”

Notes on the Developer Portal. For Dummies.

Convenient Build Settings

fastlane 1.0

Stencil Xcode Plugin “is an Xcode plugin that provides the ability to create custom file templates and use them in your project to create new files groups.”

Continue Reading →
Page 2 of 99 12345...»