21

During the Apple TV announcement, the developers of Crossy Road demonstrated using an iPhone as a 2nd controller for an Apple tv game:

http://www.macrumors.com/2015/09/09/cooperative-play-for-crossy-road/

My first thought was to implement this using the Multipeer Connectivity Framework. However, it's not supported on tvOS. Is there a good way to connect an iPhone to an Apple TV without Multipeer Connectivity?

Update: It doesn't appear that I can use GameKit because GKPeerPickerController has been removed from GameKit on tvOS.

AaronBaker
  • 1,013
  • 11
  • 15

4 Answers4

10

You can try my library. I built this for my apps maybe helpful for you too.

https://github.com/vivianaranha/TvOS_Remote

Apple TV Project (Receiver)

Step 1: Create a TvOS Project and import the files from RemoteReceiver

libRemoteReceiver.a

RemoteReceiver.h

Step 2: In your ViewController.m file import the RemoteReceiver.h file

#import "RemoteReceiver.h"

Step 3: Inside ViewController.m file add the following code

@interface ViewController () <RemoteReceiverDelegate>
@property (nonatomic, strong) RemoteReceiver *remoteReceiver;
@end

Step 4: Inside viewDidLoad alloc and set the delegate for remoteReceiver

self.remoteReceiver = [[RemoteReceiver alloc] init];
self.remoteReceiver.delegate = self;

Step 5: Implement the following delegate method for messages send from iOS remote app

-(void) didReceiveMessage:(NSDictionary *)userInfo{
    NSLog(@"%@",userInfo);
}

iOS Project (Sender/Remote Control)

Step 1: Create an iOS Project and import the files from RemoteSender

libRemoteSender.a

RemoteSender.h

Step 2: Import the RemoteSender class in your ViewController

#import "RemoteSender.h"

Step 3: Update ViewController.m with the following code

@interface ViewController ()
@property(nonatomic, strong) RemoteSender *remoteSender;
@end

Step 4: Allocate and initialize the remoteSender object

self.remoteSender = [[RemoteSender alloc] init];

Step 5: Implement gestures and methods (Check below for just button code)

- (IBAction)sendSomeInformation:(id)sender {
    NSDictionary *theDictionaryToSendToTV = @{@"name": @"John Smith",@"age": @"35", @"address":@"123 Main St"};
    [self.remoteSender sendInfo:theDictionaryToSendToTV];
}
Gaurav Srivastava
  • 504
  • 1
  • 4
  • 12
vivianaranha
  • 2,781
  • 6
  • 33
  • 47
  • This looks interesting. Is there any chance you could add support to send and receive custom events? Like say a userInfo NSDictionary perhaps. – David Sep 22 '15 at 12:11
  • I can customize to add anything right now. I will make it more useful in a few days. Currently I am working on a multiplayer app of my own – vivianaranha Sep 22 '15 at 16:01
  • This looks great. How can you be sure that you're connecting to the correct Apple TV? I don't see an IDs – AlexKoren Sep 26 '15 at 20:18
  • 1
    Hi! Why is there no arm64 support? – gasparuff Oct 03 '15 at 11:08
  • I'm not able to build any of your example projects, it keeps telling me `Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_RemoteReceiver", referenced from: ` – gasparuff Oct 03 '15 at 11:14
  • I have added the entire source code to github - Please do take a look - I dont want to restrict people from using this - being very busy at work these days – vivianaranha Oct 14 '15 at 03:08
  • 1
    The iPhone never connects to the tv for me, and thus crashes on sendInfo to the sender object. I reported an issue at Github. – Jonny Nov 01 '15 at 21:09
7

I've developed a framework that supports the creation of software-based controllers and directs the input through a MFi profile, allowing you to have a single codebase that handles both software and hardware controllers. Many other features as well:

https://github.com/robreuss/VirtualGameController

NSNetservice is used for connectivity, and all Apple platforms are supported (iOS, OS X, watchOS and tvOS).

All features:

  • Mimics API for Apple's GameController framework (GCController)
  • Device motion support in software controllers
  • Custom controller elements
  • Custom element mapping
  • WiFi-based, with Bluetooth fallback
  • Controller-forwarding
  • Works with Apple TV Simulator
  • Unlimited number of hardware controllers on Apple TV (using controller forwarding)
  • Ability to enhance inexpensive slide-on/form-fitting controllers with motion, extended profile elements and custom elements
  • iCade controller support (mapped through the MFi profiles so they appear as MFi hardware)
  • Easy-to-implement 3d touch on software controllers
  • Leverage on-screen and Bluetooth keyboards using software controllers (including with Apple TV)
  • Support for snapshots (compatible with Apple's snapshot format)
  • Swift 2.1
  • Framework-based
Rob Reuss
  • 1,400
  • 10
  • 20
3

It looks like CFNetwork is available on TvOS. Try this question for help on using CFNetwork.

EDIT: also take a look at CoreBluetooth. I'm working on the same issue - I want to have a companion iPhone app for my TvOS app.

Community
  • 1
  • 1
WolfLink
  • 3,308
  • 2
  • 26
  • 44
0

Well, I'm not sure it qualifies as a "good way", but GKMatchRequest and GKMatchmaker are in there, so maybe that's what they're using.

https://developer.apple.com/library/prerelease/tvos/documentation/GameKit/Reference/GKMatchRequest_Ref/

livingtech
  • 3,570
  • 29
  • 42