Game Center не аутентифицируется с помощью Swift

Я пытаюсь аутентифицировать локального игрока, используя swift, но каждый раз получаю ложное значение для свойства.authenticated. Вот код, который я использую, он вызывается контроллером основного вида при запуске приложения.

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как ложь Идентификатор пакета в iTunes Connect и info.plist точно такие же, как версия и название приложения. Все включено для Game Center в iTunes Connect и в XCode, но у меня есть ощущение, что это не ошибка кодирования, это ошибка установки где-то в записи приложения, но я не могу найти, где именно.

После дальнейшей обработки я получаю эту ошибку:

Error Domain = GKErrorDomain Code = 15 "Запрошенная операция не может быть завершена, поскольку это приложение не распознается Game Center." UserInfo=0x17006b300 {NSLocalizedDescription= Запрошенная операция не может быть завершена, поскольку это приложение не распознается Game Center.}

Я понятия не имею, почему это так, идентификатор пакета, имя и версии все совпадают...

Любая помощь будет принята с благодарностью.

3 ответа

Решение

Эта проблема была решена Apple - просто позвоните:

GKLocalPlayer.localPlayer()

Ранее проблема заключалась в том, что GKLocalPlayer() не возвращает синглтон GKLocalPlayer, а вместо этого возвращает новый экземпляр GKLocalPlayer.

Если вы работали в Xcode 6 BETA, вы могли бы добавить функцию C или метод Objective-C, который возвращает реальный синглтон GKLocalPlayer, а затем использовать его в Swift. Вот суть моего обходного пути (с плохими соглашениями об именах):

В заголовке Objective-C:

GKLocalPlayer *getLocalPlayer(void);

В реализации Objective-C:

GKLocalPlayer *getLocalPlayer(void) {
    return [GKLocalPlayer localPlayer];
}

В вашем соединительном заголовке:

#import "ThatHeader.h"

Тогда всякий раз, когда вам нужно получить доступ к синглтону GKLocalPlayer в Swift, вы можете просто использовать getLocalPlayer() вместо GKLocalPlayer(), Вероятно, лучше добавить это в метод категории GKLocalPlayer.

Однако в этом больше нет необходимости, как описано выше.

Даже с Xcode 6 Beta 6 на устройстве с iOS 8 beta 5, делающим GKLocalPlayer.localPlayer() доступным, я все еще получал ошибку:

"NSLocalizedDescription = Запрошенная операция не может быть завершена, потому что это приложение не распознается Game Center"

Решение (обнаруженное на форуме разработчиков Apple) состояло в том, чтобы перейти в "Настройки" на устройстве, а затем в "Game Center" и включить "Песочницу" в разделе для разработчиков.

Вы можете использовать это, я создаю простой класс для игрового центра iOS в githubEasy Class Game Center Swift

https://github.com/DaRkD0G/Easy-Game-Center-Swift

Послание из Франции, с Рождеством

Другие вопросы по тегам