Я бы не рекомендовал NSKeyedArchiver
для такой простой задачи, потому что он добавляет накладные расходы PLIST поверх этого и управление версиями класса.
Упаковка:
NSUInteger index = <some number>;
NSData *payload = [NSData dataWithBytes:&index length:sizeof(index)];
Отправить:
[session sendDataToAllPeers:payload withDataMode:GKSendDataReliable error:nil];
Распаковать (в обработчике получения GKSession):
NSUInteger index;
[payload getBytes:&index length:sizeof(index)];
Swift
var i = 123
let data = NSData(bytes: &i, length: sizeof(i.dynamicType))
var i2 = 0
data.getBytes(&i2, length: sizeof(i2.dynamicType))
print(i2) // "123"