I wrote a space-themed iOS derivative of Sokoban many years ago, which I sadly never put up on the app store. I wanted to build more levels, free-to-play mechanics, and got sidetracked and never finished the project. This is what an early build looked like, before I built in a better input mechanism:
I ended up finding it cumbersome for each move to require a tap, so I built a mechanism whereby you could draw your movements on screen and queue them up.
http://cl.ly/image/0c222O3I020Q (a whole bunch of stuff is broken in this dev screenshot).
I wrote a rather simplistic clone (no sound!) just to learn some Z80 assembly and GameBoy hardware low-level programming, back in 1997 (http://www.student.nada.kth.se/~d94-ebr/rel_sw/gb/sokoban/do...).
It's the first (and only!) program I've written for the GameBoy, so don't expect too much.
"so I built a mechanism whereby you could draw your movements on screen and queue them up." - I actually feel the same way when I play other Sokoban games, that's an interesting idea. :)
A few suggestions:
1) You may have better results with your pixel art if you change the filteringMode of your SKTextures to SKTextureFilteringMode.NearestNeighbor instead of .Linear.
2) You might want to store SKTextures in your imageDict instead of full SKSpriteNodes. It seems you aren't reusing those nodes, just the textures.
3) Maybe use a plist file to store the level data instead of hard-coded array constants? It's a little more flexible once you abstract the data outside of your source code.
Thanks for taking time to read through the code!