【发布时间】:2015-09-15 10:28:46
【问题描述】:
我们一直在 iOS 9 iPhone 6 上测试使用 Xcode 6.4 编译的应用,在完成应用内购买时出现无法解释的崩溃。
当在paymentQueue:updatedTransactions: 回调中调用finishTransaction: 时,我们会出现这个崩溃:
#0 0x0000000199eb8158 in objc_release ()
#1 0x0000000100cfc1d8 in +[TLStoreKitSource tlsw_finishTransaction:] ()
#2 0x0000000100402914 in -[InAppPurchaseHelper paymentQueue:updatedTransactions:] at VDPremiumSettingsWebViewController.m:105
#3 0x000000018a7746cc in __NotifyObserverAboutChanges ()
#4 0x00000001851947ec in CFArrayApplyFunction ()
#5 0x000000018a774648 in -[SKPaymentQueue _notifyObserversAboutChanges:sendUpdatedDownloads:] ()
#6 0x000000018a775150 in -[SKPaymentQueue _processUpdates:trimUnmatched:sendUpdatedDownloads:] ()
#7 0x000000018a775c58 in -[SKPaymentQueue _updatePaymentsForMessage:] ()
#8 0x000000018a7744f8 in __44-[SKPaymentQueue _handleMessage:connection:]_block_invoke ()
#9 0x00000001022a5d70 in _dispatch_call_block_and_release ()
#10 0x00000001022a5d30 in _dispatch_client_callout ()
#11 0x00000001022ab780 in _dispatch_main_queue_callback_4CF ()
#12 0x0000000185268258 in __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ ()
#13 0x00000001852660c0 in __CFRunLoopRun ()
#14 0x0000000185194dc0 in CFRunLoopRunSpecific ()
#15 0x00000001902e8088 in GSEventRunModal ()
#16 0x000000018a86ef60 in UIApplicationMain ()
#17 0x000000010006c338 in main at main.m:17
#18 0x000000019a6ca8b8 in start ()
Enqueued from com.apple.root.default-qos.overcommit (Thread 16)Queue : com.apple.root.default-qos.overcommit (serial)
#0 0x00000001022b032c in _dispatch_barrier_async_f ()
#1 0x000000018a77444c in -[SKPaymentQueue _handleMessage:connection:] ()
#2 0x000000019a8e130c in _xpc_connection_call_event_handler ()
#3 0x000000019a8df0b4 in _xpc_connection_mach_event ()
#4 0x00000001022a5e2c in _dispatch_client_callout4 ()
#5 0x00000001022aa39c in _dispatch_mach_msg_invoke ()
#6 0x00000001022b2a0c in _dispatch_queue_drain ()
#7 0x00000001022a93fc in _dispatch_mach_invoke ()
#8 0x00000001022a5d30 in _dispatch_client_callout ()
#9 0x00000001022b4f38 in _dispatch_root_queue_drain ()
#10 0x00000001022b4600 in _dispatch_worker_thread3 ()
#11 0x000000019a8ad478 in _pthread_wqthread ()
#12 0x000000019a8ad028 in start_wqthread ()
我认为这个问题并不是 StoreKit 特有的,因为购买在示例代码上效果很好。我怀疑我们这方面会产生令人讨厌的副作用。
我认为找到调用了哪个对象objc_release 可能会解决问题。但是,我不知道如何使用汇编代码找到它。
有人遇到过这种崩溃吗?关于如何找到问题出在哪里的任何提示?
有关信息,这里是回调代码:
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
for (SKPaymentTransaction *transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
break;
case SKPaymentTransactionStateFailed:
if (self.purchaseErrorBlock) {
self.purchaseErrorBlock(transaction.error);
}
[queue finishTransaction:transaction];
break;
case SKPaymentTransactionStatePurchased:
if (self.purchaseSuccessBlock) {
self.purchaseSuccessBlock();
}
[queue finishTransaction:transaction];
break;
case SKPaymentTransactionStateDeferred:
[queue finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[queue finishTransaction:transaction];
break;
}
}
}
【问题讨论】:
-
Enable
NSZombies查找错误。 -
已经试过了。我没有关于该对象的信息。只有消息是
EXC_BAD_ACCESS (code=1, address=0x100000000),调试控制台没有。
标签: ios debugging crash ios9 storekit