Delegates and Navigation Controllers

Using Delegates with Navigation Controllers

Get the nav controller first.

TVML tvOS 10

So there’s an updated TVML Catalog sample code project out.

Instead of having js files that make an XML file, it’s just a straight XML file now. Makes much more sense to me to have it this way.

TVML Catalog: Using TVML Templates
Another thing they’ve changed is they suggest using Ruby instead of Python.
ruby -run -ehttpd . -p9001

I think this might  be to get around the fact videos locally didn’t work with Python, I still need to test this.

In most of my previous files I was using template=”.xml.js” whereas now they use documentURL=”.xml” so one to check on.

I’ve also amended a couple of files to get video playback working, the documentcontroller.js was the place to add it.

A useful dub dub video to watch is the following.

WWDC 212 – Developing tvOS Apps Using TVMLKit: Part 1
The video/slides do cover a basic example:
// Setting up a TVMLKit JS Video Player
var video = new MediaItem(‘video’, ‘https://example.com/video.m3u8‘);
video.title = ‘My Great Movie’;
video.description = ‘An extensive description…’;
video.resumeTime = 10.0; // seconds
 
var playlist = new Playlist();
playlist.push(video);
 
var player = new Player();
player.playlist = playlist;
player.play(); // Present the player

 

The AudioVideo sample code hasn’t been updated yet and there isn’t an example of video playback in the above Catalog sample, the WWDC video was handy though. I like the embedded player in a lockup.

TVMLAudioVideo: Audio and Video Playback on tvOS
Check out the new MediaContent docs:

MediaContent

https://developer.apple.com/library/prerelease/content/documentation/LanguagesUtilities/Conceptual/ATV_Template_Guide/CompoundMultimediaElements.html#//apple_ref/doc/uid/TP40015064-CH46-SW2

Using iTMSTransporter to upload Game Centre Achievements

I’m currently creating a game Movem, and I wanted to add some Game Center achievements. I’d done this before in another app I’m making for Kernowland Quizzes (still in development). There are only a couple of achievements there so wasn’t much hassle to create them manually but here I want 1 for each of the 50 levels. This would be a big pain to do.

So I turned to twitter and asked @KrauseFx as I thought he might know.

Researching a little I found the app should be in either Xcode or App Transporter. Some SO answers said it was under the MacOS folder but I found it to be now just under itms in the Contents folder.

/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/ bin
=>
/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/itms/bin

Now to find some information about the app itself, lets look to iTunesConnect Resources and Help under Apps.

Open the terminal and navigate to the above folder:

./iTMSTransporter -m diagnostic

Next we want to download the information we have on an app so we can use the lookupMetadata flag.

./iTMSTransporter -m lookupMetadata -u # -p # -apple_id # -subitemtype GameCenterAchievement -destination "#"

Replace the #s with your actual inputs.

This will download a file “AppleID.itmsp”, if you double click this it will open in Application Loader, you don’t want this, instead Right+Click and Show Package Contents:

Show Package Contents.png

There’s a file called “metadata.xml”, open this in your editor of choice, Xcode works fine since it’s just XML.

I’m interested in the Game Center info so scroll down:

<game_center>
    <achievements>
        ...
    </achievements>
</game_center>

Within here are a couple of achievements I’ve already created, from research errors can occur if you remove these and re-upload so either leave them in and only make additions to the file or remove them from iTunesConnect and run lookupMetadata again.

I needed at least one already created so I had a template to work with.

I created a playground as this would be the quickest way to create what I needed

for i in 1...50 {
    print(blah \(i))
 }

Now I just needed to replace the number with \(i) in all the places necessary and show the console.

Copy and paste that back into the “metadata.xml” and I’m ready to upload.

First thing to do is verify the file.

./iTMSTransporter -m verify -f "#/[AppleId].itmsp" -u # -p #

Now I can upload.

./iTMSTransporter -m upload -f "#/[AppleId].itmsp" -u # -p #

There was one thing that was missing, the image file:

ERROR: The file Game_20Center_20Level.png is from the list of files requested by Apple, but it was not found locally.

To fix this I just renamed the file I’d uploaded in iTunesConnect to match the above and added it to the PackageContents folder and all was good.

I’d originally tried the “lookupMetadata” without the -subitemtype flag but got an error when trying to upload,

ERROR ITMS-10001: "Multiple items in this package use the same vendor ID. Use unique vendor IDs for the items [leaderboard, achievement] and resubmit the package." at Software/SoftwareMetadata
...
<main> DBG-X: The error code is: 1102

 


Learn more about Game Center in Chapters 25 and 26 of 2D iOS & tvOS Games by Tutorials from Ray Wenderlich.

Links
https://twitter.com/AlexHedley/status/718513616132161536
https://twitter.com/KrauseFx/status/718526581950427136

http://itunespartner.apple.com/en/apps/guides
https://help.apple.com/itc/transporteruserguide/

http://stackoverflow.com/questions/11205998/ios-game-center-achievement-upload
http://bou.io/UploadingScreenshotsWithITMSTransporter.html
http://www.cyrilchandelier.com/having-fun-with-itmstransporter

What’s New in iTunes Connect

WWDC 2013 – Session 306 – iOS, OS X

http://web.archive.org/web/20150216153821/http://realmacsoftware.com/blog/mastering-itunes-connect-transporter

Movem progress

I’ve made some progress on my movem game

Main Menu

Level select parsed from the plist

HUD updating with Moves, Pushes and Level

Movem Level Editor

I’ve been working a little more on my Movem port, and there are over 50 levels, so I thought I’d make a level editor, one to speed up creating the levels, one because it’s flipped using the code from boxxle and two because I could then create my own levels.

Screen Shot 2016-03-19 at 22.11.37.png

True I still need to create a sokoban solver to make sure

I used one to create a solution for another iOS game once: https://www.youtube.com/watch?v=9IodB2OrpuE

 

I used the following as a starting block for my level builder:

Code

http://www.knowstack.com/minesweeper-game-for-mac-os-written-in-cocoa-objective-c/

Movem iOS game

So I found an implementation of an iOS Sokoban game

https://github.com/kennycason/swift_boxxle

It’s a year old so my first step was to update it.

I ran the Xcode updater then got to the left over errors.

@nonobjc
var isPaused: Bool = false

Touches Began

override func touchesBegan(touches: Set<UITouch>?, withEvent event: UIEvent?)
let touch = touches!.first

CheckForWin

func checkForWin()
if ~isBoxOnGoal(box)
if !isBoxOnGoal(box)

I swapped out some images

Then i wanted to tile a background sprite

I found http://www.spritekitlessons.com/tile-a-background-image-with-sprite-kit/ then I converted it

padNumber

let digits = countElements(String(number))
let digits = String(number).characters.count

Links

https://alexhedley.wordpress.com/2011/06/14/rw-beginning-iphone-programming-finished/
https://alexhedley.wordpress.com/2015/01/25/ios-maze-game-tutorial-initial-setup/

Apple Public Beta

Signed up for the Public beta, shouldn’t it be this easy for devs or am I just being lazy?

https://beta.apple.com/

You install a certificate, which then requires a restart, really!
 
You’re advised to make a backup.

Archive an iOS backup with iTunes

https://support.apple.com/HT203282

Then you can install the update over the air (OTA), very simple.

It installs a nice Feedback app: