Game Center не аутентифицируется с помощью Swift
Я пытаюсь аутентифицировать локального игрока с помощью swift, но каждый раз, когда я получаю ложное значение для .аутентифицируемое свойство. Вот код, который я использую, он вызывается контроллером главного вида при запуске приложения.
func authenticateLocalPlayer(){
var localPlayer = GKLocalPlayer()
localPlayer.authenticateHandler = {(viewController, error) -> Void in
if viewController {
self.presentViewController(viewController, animated: true, completion: nil)
}else{
println((GKLocalPlayer().authenticated))
}
}
}
Он выводит журнал в поле зрения просто отлично, но когда я ввожу логин тестовой учетной записи, он просто возвращает GKLocalPlayer().authenticated
как false. Идентификатор пакета в iTunes Connect и информация.plist точно такие же, как версия и имя приложения. Всё включен для Game Center на iTunes Connect и в Xcode, но у меня такое чувство, что это не ошибка кодирования, это ошибка установки в записи приложения где-то, но я не могу найти, где.
после дальнейшего возиться, я получаю эту ошибку:
ошибка домен=Gkerrordomain код=15 " запрошенная операция не может быть завершена, потому что это приложение не распознается Game Center."UserInfo=0x17006b300 {NSLocalizedDescription=запрошенная операция не удалось завершить, потому что это приложение не распознается Game Center.}
Я понятия не имею, почему это так, идентификатор пакета, имя и версии совпадают...
любая помощь была бы весьма признательна.
3 ответов
эта проблема была решена Apple-просто позвоните:
GKLocalPlayer.localPlayer()
ранее проблема заключалась в том, что GKLocalPlayer()
не возвращает одноэлемент GKLocalPlayer, но вместо этого возвращает новый экземпляр gklocalplayer.
если вы были в бета-версии Xcode 6, Вы можете добавить функцию C или метод Objective-C, который возвращает реальный синглтон GKLocalPlayer, а затем использовать это в Swift. Это суть моего обходного пути (с плохими соглашениями об именах):
в задаче-C заголовок:
GKLocalPlayer *getLocalPlayer(void);
в реализации Objective-C:
GKLocalPlayer *getLocalPlayer(void) {
return [GKLocalPlayer localPlayer];
}
в вашем заголовке моста:
#import "ThatHeader.h"
тогда, когда вам нужно получить доступ к gklocalplayer singleton в Swift, вы можете просто использовать getLocalPlayer()
вместо GKLocalPlayer()
. Вероятно, лучше придерживаться этого в методе категории GKLocalPlayer.
однако это больше не требуется, как подробно описано выше.
даже с Xcode 6 Beta 6, на устройстве с использованием iOS 8 beta 5, что делает GKLocalPlayer.localPlayer () доступен, я все еще получал ошибку:
" NSLocalizedDescription=запрошенная операция не может быть завершена потому что это приложение не распознается Game Centre"
на решение (обнаруженный через форум разработчиков Apple) должен был перейти в "Настройки" на устройстве, а затем в "Game Centre" и включить "песочницу" под секция разработчиков.
вы можете использовать это, я создаю простой класс для iOS game center в github Легкий Игровой Центр Класса Swift
https://github.com/DaRkD0G/Easy-Game-Center-Swift
сообщение из Франции, Счастливого Рождества