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

сообщение из Франции, Счастливого Рождества