So... I Wrote an AppleTV app (and then another)

In what was certainly a record for me, I really did finish and release the app I mentioned in my last post!

tvOS Small Icon Combined
Dolphin Patrol — Get it on the App Store today - it’s free!

I was one of the lucky ones who got an AppleTV developer unit, and for the first time, wanted to be in the App Store on Day One. My development environment consisted of a cheap HDMI monitor that replaced my normal second monitor, hooked up to the AppleTV. I had quickly realized that if I wanted to use the GameController-based APIs, the simulator just wasn’t going to cut it. Overall, I think using the external monitor has worked out well. Only a few times during development did I unplug it from my smaller monitor and hook it up to the family TV. This was worth doing to make sure the game elements were sized appropriately and to be sure I wasn’t letting anything get cut off from the overscan areas, which were different between the TV and monitor.

What Worked

  • Dolphin Patrol was written in 100% Swift 2.0. There was definitely a learning curve associated with this, and more time looking up Swift goodies in the iBooks, Stack Overflow, GitHub, and ericasadun.com. But overall, I believe it ended up saving me time, and I really love writing in Swift. I have been following Swift since it came out, and have written a few sample projects (and a great tutorial from Apple too), but this was the first time committing to it for the entire app. I didn’t use a lot of low-level C APIs, which I think helped.
  • DemoBots. Apple’s sample code was a life saver. I used it to come up with an entirely SpriteKit based solution (at least at first). DemoBots is a beast of a sample app, but it had all of the goodness I needed in there to learn how to use the GameController API. Since from the beginning I knew I wanted to support multiplayer, learning GameController was a requirement.
  • This silly little game controller I had picked up months ago from Meh. My thought at the time was to use it to play iOS games that supported Game Controllers (I never really found one), but it was invaluable for multiplayer and compatibility testing.
  • XCode + Swift was relatively stable. My biggest issue was sometimes a build wouldn’t go across to the AppleTV to run, but just building it again (?) seemed to push it along.
  • Thanks to some enterprising developers on Apple’s developer’s forums, we got a nice little group of testers together to help test each other’s AppleTV apps prior to launch. It wasn’t a lot of time, but it was valuable, particularly since the Apple Developer Forums were just about the only place you could discuss AppleTV development prior to launch.
  • Physics is fun. Some of the most fun I had developing the app involved tweaking the PhysicsWorld constants in the game. Springs can get pretty crazy.
  • Six weeks from start to finish. Completely a new record for me. The motivation of a Day One launch was a huge factor.

What Didn’t

  • Testing a multiplayer game is hard. If you are a solo indie developer, make sure you have some willing family members who will help you test your game. I generally lost to my kids when we played against each other. Playing with a Siri Remote in one hand and a game controller in the other was just about impossible.
  • Entering passwords and email addresses on a newly installed AppleTV is a pain. I wish this process had been easier, particularly since each new beta of tvOS required a clean install.
  • TestFlight was great to have, but came really too late to be a huge help on Day 1.
  • I didn’t end up doing EVERYTHING in SpriteKit. I eventually figured out how to mix and match SpriteKit-based scenes with more traditional UIViewController-based screens. This game me the best of both worlds.
  • Art is hard. The theme of my game was mostly determined by where I could get reasonably priced artwork. I then supplemented with my own meager-but-growing Sketch and Affinity Designer skills. I wish I had spent more time on the icon - the next version will improve that, since the icon is really the only way an App Store user may see your app, during a search.
  • App Store discovery - this has been discussed endlessly already in the developer community, but still, pretty disappointing to be there on Day One and have no way for people to find your app.
  • Charging for the app. I went free after about a week. (I feel like I’m in good company.) Downloads increased accordingly. I didn’t understand how promo codes worked for AppleTV, and initially thought they weren’t supported. However, I now think that you can give them out and redeem them on the iOS app store, and the app will just show up on your AppleTV app store. I have yet to verify this, though. I might have lasted longer as a paid app if I could have given away promo codes - I still would not have made money, but there was at least the chance.

The Future

  • I’m still adding features to Dolphin Patrol. One of the most important is an iOS client app that will act as a bluetooth game controller for multiplayer. I have the bluetooth code up and running, but it will take a bit of work to make the gameplay feel natural. Bluetooth programming is a bit of a pain. I think that apps that are either universal (not currently in my plans) or are at least visible on the iOS app store have a better chance of being discovered.
  • While I was blocked a bit contemplating how to add Game Center Achievements to Dolphin Patrol, I tried my hand at writing another app. I felt like I was on a roll, and my Swift learning curve has ramped up nicely. So, after about 3 days, I have another app sitting in the review queue on iTunesConnect. Not a game, and completely different from my last app, but I really enjoyed writing it and seeing how quickly something could come together. Announcement will be here if it gets approved! Writing AppleTV apps is quite fun, and kind of addictive. I’ve got two more ideas in mind, but also have a set of Mac and iOS apps that have been neglected for far too long. (AlphaBaby, BabyProof, AlphaTalk, and Tapscape, for the curious!)


© 2010-2016 Little Potato Software   Follow littlepotatosw on Twitter        Site Map     Privacy Policy     Contact Me