Updated README to point to InfoQ article
Creating a new Swift/SceneKit project

Using File -> New -> Project menu in Xcode will allow a new
project to be created. This template was instantiated from the
iOS -> Application -> Game template, with the Swift language,
SceneKit support and targeted to Universal devices (both iPhone
and iPads).

This template was generated from Xcode 6.1 with Swift 1.1, and
later versions of Xcode may vary.

Note that a build error may be seen "Copy SceneKit Assets Error"
for "ship.dae". This does not appear to affect the build and in
any case will be removed in the next step, so don't worry about
it if you see this message.
Removing the ship from the template

Since the example won't need the ship or explicit lighting, remove
them from the project. This is a blank state which can be used to
add new content in the future.
Adding a white cylinder

A cylinder can be added to the scene by creating a geometry (which
represents the shape) and then adding to a node (which is the item
that gets drawn on screen).

When run this will display a white shadowless cylinder, which
doesn't look like a 3d shape, because it doesn't have any material
or lighting.
Adding lighting and colour

To colour the tree trunk, the colour needs to be set with a
material. This could use a pre-calculated image to give a bark-like
effect, but in this case a solid brown colour will be used from
the UIColor's built-in colour range.

To show, the cylinder needs to have lighting added. Although lights
can be individually added and coloured, using the automatic lighting
provides an easy way to get started.
Adding a cone

The tree's leaves can be represented as a cone, which is added to
the top of the trunk. The leaves colour will be green and is set
as before, but the Y position of the leaves are moved to be at the
top of the trunk itself.

Note that the leaves are added to the trunk node, rather than the
root node. This allows the tree to be moved and the leaves will
automatically follow it to different locations.
Finishing it off

By stacking multiple cones on top of each other, and positioning
them relative to the base of the tree, a tree can be built.

Note that the cones are actually overlapping with each other; the
cone below penetrates the bottom of the cone above. This could be
modified by using a modified version of SCNCone:

  SCNCone(topRadius:1, bottomRadius:3, height:2)

This would result in a closer fit without overlaps, but the top
cone would need to be handled differently. To simplify the code
example used the cropping approach was not used and is left as
an exercise for the reader.
Adding presents

A present is represented as an SCNBox, which gets added as a node
to the tree. They are positioned next to the tree and coloured blue
to stand out from the tree colours.
Refactoring a ChristmasTree class

To make the Christmas tree more re-usable, it is extracted to
a separate ChristmasTree class. This can then be added in place
of the existing direct code that was used in the prior version.
Planting a forest

By looping through a set of indexes (using a stride to step
through by a certain amount each time) and repositioning each
tree allows a forest to be built.
Rotating the tree

All the trees look the same, but by rotating the tree around the
center it will add a bit of difference to each planted tree.
Generating a random integer of up to 180 degrees (and then
converting to radians by mupltiplying by pi/180).
Adding colour

To change the colours of presents, an array of standard colours
will be defined as a global constant. When a present is created
a random number is used to choose a colour from the array.