【问题标题】:Crash in StoreKit's finishTransactionStoreKit 的 finishTransaction 崩溃
【发布时间】: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


【解决方案1】:

在finishTransaction描述中写着:

在事务中调用 finishTransaction(_:) 购买状态抛出异常

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多