我正在尝试使用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
返回为false。 iTunes Connect和info.plist中的软件包标识符与版本和应用程序名称完全相同。在iTunes Connect和Xcode上为Game Center启用了所有内容,但我感觉这不是编码错误,这是应用程序记录中的设置错误,但我不能在我的生活中找到哪里。
经过进一步的修补,我收到了这个错误:
错误Domain = GKErrorDomain Code = 15“无法完成请求的操作,因为Game Center无法识别此应用程序。” UserInfo = 0x17006b300 {NSLocalizedDescription =无法完成请求的操作,因为Game Center无法识别此应用程序。}
我不知道为什么会这样,包ID,名称和版本都匹配......
非常感谢任何帮助。
答案 0 :(得分:11)
此问题已由Apple解决 - 只需致电:
GKLocalPlayer.localPlayer()
以前,问题是GKLocalPlayer()
没有返回GKLocalPlayer单例,而是返回一个新的GKLocalPlayer实例。
如果您使用的是Xcode 6 BETA,您可以添加一个返回真实GKLocalPlayer单例的C函数或Objective-C方法,然后在Swift中使用它。这是我的解决方法的要点(具有错误的命名约定):
在Objective-C标题中:
GKLocalPlayer *getLocalPlayer(void);
在Objective-C实现中:
GKLocalPlayer *getLocalPlayer(void) {
return [GKLocalPlayer localPlayer];
}
在您的桥接标题中:
#import "ThatHeader.h"
然后,只要您需要访问Swift中的GKLocalPlayer单例,就可以使用getLocalPlayer()
而不是GKLocalPlayer()
。将它粘贴在GKLocalPlayer类别的方法中可能是个更好的主意。
但是,如上所述,不再需要这样做。
答案 1 :(得分:10)
即使使用Xcode 6 Beta 6,在使用iOS 8 beta 5的设备上,使GKLocalPlayer.localPlayer()可用,我仍然会收到错误:
“NSLocalizedDescription =无法完成请求的操作 因为Game Center无法识别此应用程序“
解决方案(通过Apple的Dev论坛发现)是转到设备上的“设置”,然后进入“游戏中心”并在开发者部分下启用“沙盒”。
答案 2 :(得分:0)
你可以使用它,我在github上为iOS游戏中心创建了一个简单的类 Easy Class Game Center Swift
https://github.com/DaRkD0G/Easy-Game-Center-Swift
来自法国的消息,圣诞快乐