我的iOS应用程序现在在AppStore中,每次向游戏中心报告分数时都会崩溃。但是,当我使用沙箱用户进行测试时,一切都很好。
调用[GKScore reportScores:whileScreeningChallenges:withEligibleChallenges:withCompletionHandler:]
时似乎崩溃了
这是崩溃日志:
Incident Identifier: 35E9C678-9B45-4EB7-8766-A81A173C72E1
CrashReporter Key: 8b3897a8e6fd37ad36fe1788e6862b87f6591db1
Hardware Model: iPhone6,2
Process: Arithmetic [11729]
Path: /private/var/mobile/Containers/Bundle/Application/C487E7B5-E8B9-41BD-9A8D-BAC8BB4260EC/Arithmetic.app/Arithmetic
Identifier: com.cqmh.Arithmetic
Version: 1 (1.0.5)
Code Type: ARM-64 (Native)
Parent Process: launchd [1]
Date/Time: 2015-02-24 17:39:35.401 +0800
Launch Time: 2015-02-24 17:38:24.644 +0800
OS Version: iOS 8.1.3 (12B466)
Report Version: 105
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000001000d49e4
Triggered by Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 Arithmetic 0x00000001000d49e4 Arithmetic.AppDelegate.(application (Arithmetic.AppDelegate) -> (ObjectiveC.UIApplication, didFinishLaunchingWithOptions : [ObjectiveC.NSObject : Swift.AnyObject]?) -> Swift.Bool).(closure #2) (AppDelegate.swift:0)
1 Arithmetic 0x00000001000d49f4 reabstraction thunk helper from @callee_owned (@owned ObjectiveC.NSError!) -> (@unowned ()) to @callee_owned (@in ObjectiveC.NSError!) -> (@out ()) with unmangled suffix "_constprop0" (AppDelegate.swift:28)
2 Arithmetic 0x000000010012299c partial apply forwarder for reabstraction thunk helper from @callee_owned (@in ObjectiveC.NSError!) -> (@out ()) to @callee_owned (@owned ObjectiveC.NSError!) -> (@unowned ()) (Default.swift:0)
3 GameCenterFoundation 0x000000018dbb8f30 __94+[GKScore reportScores:whileScreeningChallenges:withEligibleChallenges:withCompletionHandler:]_block_invoke168 + 40
4 libdispatch.dylib 0x0000000195f153a8 _dispatch_call_block_and_release + 20
5 libdispatch.dylib 0x0000000195f15368 _dispatch_client_callout + 12
6 libdispatch.dylib 0x0000000195f1997c _dispatch_main_queue_callback_4CF + 928
7 CoreFoundation 0x0000000185181fa0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 8
8 CoreFoundation 0x0000000185180048 __CFRunLoopRun + 1488
9 CoreFoundation 0x00000001850ad0a0 CFRunLoopRunSpecific + 392
10 GraphicsServices 0x000000018e24f5a0 GSEventRunModal + 164
11 UIKit 0x00000001899deaa0 UIApplicationMain + 1484
12 Arithmetic 0x00000001000d4334 main (AppDelegate.swift:0)
13 libdyld.dylib 0x0000000195f3ea04 start + 0
以下是我用来与游戏中心交互的swift代码:(我已经确保成就ID与itunesConnect中的ID相同。)
func reportScore() {
if !GameCenterEnabled {
return
}
var score = GKScore(leaderboardIdentifier: LeaderboardIdentifier)
score.value = Score
GKScore.reportScores([score], withCompletionHandler: { (error) -> Void in
if error != nil {
println(error)
}
})
}
func updateAchievements() {
if !GameCenterEnabled {
return
}
/*
Horizontal_Mode_Conquered
Vertica_Mode_Conquered
Master_Hybrid_Mode
*/
var order = LevelNameAndCompleteGamesDictionary[FormulaType.Horizontal.typeName()]!
var percent = Double(order.accomplishedGamesCount) / Double(order.targetGamesCount)
var achievement0 = GKAchievement(identifier: "Horizontal_Mode_Conquered")
if percent < 1.0 {
achievement0.percentComplete = Double(percent) * 100.0
} else {
achievement0.percentComplete = 100.0
}
order = LevelNameAndCompleteGamesDictionary[FormulaType.Vertical.typeName()]!
percent = Double(order.accomplishedGamesCount) / Double(order.targetGamesCount)
var achievement1 = GKAchievement(identifier: "Vertica_Mode_Conquered")
if percent < 1.0 {
achievement1.percentComplete = Double(percent) * 100.0
} else {
achievement1.percentComplete = 100.0
}
order = LevelNameAndCompleteGamesDictionary[FormulaType.Cross1H1V.typeName()]!
percent = Double(order.accomplishedGamesCount) / Double(order.targetGamesCount)
var achievement2 = GKAchievement(identifier: "Master_Hybrid_Mode")
if percent < 1.0 {
achievement2.percentComplete = Double(percent) * 100.0
} else {
achievement2.percentComplete = 100.0
}
var achievements = [achievement0, achievement1, achievement2]
GKAchievement.reportAchievements(achievements, withCompletionHandler: { (error) -> Void in
if error != nil {
println(error)
}
})
}
问题似乎得到了解决。我认为问题是由更改项目名称引起的。(我已经改过一次了)。因此,我通过重新创建一个新项目并导入所有旧代码来解决这个问题。然后一切都好了。
现在我的应用程序在应用商店中更新了,崩溃的问题消失了。