iOS Tech Talk in Berlin


I went to the iOS Tech Talks in Berlin! I had learnt quite a bit about Xcode and it’s shenanigans. Such simple things as click and drag a breakpoint away form that side bar to get rid of it, or to use command + shift + O to quickly find files in a project and open them. Even with the Xcode cheat sheet in front of me I rarely use some of those shortcuts. So learning some of the most employed by developers working for Apple proved useful in the first few days after the talks.


Objective-C tips:

While I was there I asked about some Objective-C specifics, and learnt that NS_OPTIONS can be combined with bitwise operators, and NS_ENUM can’t. And that the difference between a class extension and a class category is that class extensions are used to add properties and class categories are used to add instance methods. Example.

And I was shown how to use the gesture recognisers, after asking the developers to show me I quickly realised they didn’t really know either. A few minutes afterwards they were called away and let me have a go with it. I managed to be able to draw a simple X shape, it was surprisingly easy to get working using Xcode’s Interface Builder and implementing a gesture in your SpriteKit game is done with relative ease.


Game Development Tips and Tricks:

In Flickety Flick, a game I made during my internship year, I used GameCenter for achievements and leaderboards, I’ve also used GameCenter to make matchmaking, and during those matches I wanted players to know who they were fighting with so I sent over their profile picture and profile nickname by ‘hand’, and I was curious if there was a better way. There was! One of the guys who helped develop GameCenter explained me how to use the method called loadPlayersForIdentifiers:withCompletionHandler: to retrieve opponents name and how to show their profile picture using the loadPhotoForSize:withCompletionHandlerinstance method. They’ve also told me that I could decide to use my own networking solution inside GameCenter, they pointed out that I should set GKMatchTypeHosted to the Match object.

When your game needs to download or upload something from/to a website, use NSUrlSession to do it, since this will be done asynchronously and won’t block your app/game from continuing play.
What f your game needs to store persistent data? Then you will need to follow Apple’s guidelines regarding data storage, else your app and/or game will be rejected.
And I’ve asked about what and why with data collection/gathering: As long as you don’t collect personal data such as IMEI or the device ID. In short: actual privacy information as described in their privacy policy. Be sure to ask for permission!


Human Interface Tips and Tricks:

Apple Human Interface Design principles:

Clarity, being internally consistent.

Deference,  the user interface elements shouldn’t compete with each other, for games this means that user interface elements shouldn’t interfere with other user interface/game elements. While secondary elements shouldn’t be dominant.

Depth: Present the player/user with feedback (Highlight the choice, play a short audio click, etc)


Make sure to read the human interface guideline provided by Apple, since that will help you create a more accessible and future proof game/app. And where possible use Apple components, as the user/player is used to how iOS works.
In other words: UI elements could look different, but they behave the same to their ‘plain’ iOS counterpart, this also means that you need to design for direct manipulation instead of on-screen controls. And if you really want a button on the screen, it’s still best to try to find a way to use a gesture instead.
During this talk the speaker that spoke about these principles also spoke  the best minimum size of a button and how Apple uncovered it, which is 44×44 pixels, and that adding highlights to your buttons if the finger completely covered it would easily add more feedback.
The speaker had talked about most of the different types of message boxes. Such as that alert message boxes shouldn’t have a close button, but rather any button on it should close (dismiss) it. Same goes for pop-over message boxes. When using page controls like a previous- and next-button it’s a good idea to switch those out with swipe controls.

He was short about ads: don’t bug or trick your player with ads of other apps and/or games (you made).
Timing audio feedback precisely is an important task too, and should be done carefully.

Game Development specific tip: When showing a progress indicator, use it as an opportunity to entertain or educate the player. Give them some measure of the progress and a way to bail out. When using a tutorial to teach your player how to play the game they shouldn’t be asked to memorise a picture with actions, instead they should be playfully, but progressively, introduced.


Distribution Tips and Tricks:

Get rid of unused assets in the app bundle, compress larger assets (if you can).
When a user/player is done with your app/game, don’t ask for feedback right away. Let them use/play the app/game a few times first.

Last but not least: Watching some of the WWDC video’s are worth your while, for sure. (The ones you might be interested in, depending on your work field).