由于IPV6问题Apple拒绝了iOS应用程序,但崩溃报告表明断言失败

时间:2016-10-25 00:34:42

标签: ios iphone swift

我的iOS应用程序不使用任何网络,并且在我的iPhone上工作正常,但Apple认为由于IPv6不兼容问题而拒绝了它。

2. 1 PERFORMANCE: APP COMPLETENESS
Performance - 2.1


Your app crashes on iPhone running iOS 10.0.3 connected to an IPv6 network when we:

Specifically, we found your app crashes when we tap “Analyze.”

We have attached detailed crash logs to help troubleshoot this issue.

然而,当我象征他们发送的崩溃报告时,它显示一个特定的线程崩溃。回溯在下面。

    Thread 5 name:  Dispatch queue: com.apple.HealthKit.HKHealthStore.client.0x1700f6d00
Thread 5 Crashed:
0   libswiftCore.dylib              0x0000000100273ae8 _assertionFailed(StaticString, String, StaticString, UInt, flags : UInt32) -> Never (__hidden#14874_:167)
1   libswiftCore.dylib              0x0000000100273ae8 _assertionFailed(StaticString, String, StaticString, UInt, flags : UInt32) -> Never (__hidden#14874_:167)
2   PickerTest                      0x00000001000c1d1c type metadata accessor for String? (PyschicBrain.swift:0)
3   PickerTest                      0x00000001000bfe78 PsychicBrain.(isHeartRateInfoAvailableForDates() -> Bool).(closure #1) (PyschicBrain.swift:0)
4   libdispatch.dylib               0x000000018f98d200 _dispatch_call_block_and_release + 24
5   libdispatch.dylib               0x000000018f98d1c0 _dispatch_client_callout + 16
6   libdispatch.dylib               0x000000018f99b444 _dispatch_queue_serial_drain + 928
7   libdispatch.dylib               0x000000018f9909a8 _dispatch_queue_invoke + 652
8   libdispatch.dylib               0x000000018f99b940 _dispatch_queue_override_invoke + 360
9   libdispatch.dylib               0x000000018f99d38c _dispatch_root_queue_drain + 572
10  libdispatch.dylib               0x000000018f99d0ec _dispatch_worker_thread3 + 124
11  libsystem_pthread.dylib         0x000000018fb952c8 _pthread_wqthread + 1288
12  libsystem_pthread.dylib         0x000000018fb94db4 start_wqthread + 4

Stack frame#3(上图)表示函数isHeartRateInfoAvailableForDates()中的闭包失败,这意味着HKSampleQuery失败。

我的问题:我假设这是因为没有找到该间隔的心率数据。在我的手机上,在这种情况下,samples.count()返回0,因此函数返回FALSE。当Apple人员测试它时,显然会出现不同的错误。我已经向Apple询问了控制台日志,但我想知道一种更优雅的错误处理方式。

func isHeartRateInfoAvailableForDates() -> Bool {
    predicate = HKQuery.predicateForSamples(withStart: pvtStartDate, end: pvtEndDate, options: HKQueryOptions())
    guard let sampleType = HKSampleType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) else {
        fatalError("HKSampleType.quantityTypeForIdentifier failed")
    }

let dispatchGrp = DispatchGroup()

// Entering query block
//
dispatchGrp.enter()

let query = HKSampleQuery(sampleType: sampleType, predicate: predicate, limit: Int(HKObjectQueryNoLimit), sortDescriptors: nil) {
    query, results, error in

    guard let samples = results as? [HKQuantitySample] else {
        fatalError("An error occured fetching the user's heart rate: \(error?.localizedDescription)");
    }
    self.pvtSampleCount = samples.count
    // leave group once query results are available
    dispatchGrp.leave()
    }
pvtHealthStore.execute(query)

// Now wait for the query  to complete
//

dispatchGrp.wait(timeout: DispatchTime.distantFuture)

return pvtSampleCount > 0

}

0 个答案:

没有答案