这是一个问题/答案。我发现了我的问题,我将在这里解释,希望其他人也可以学习,但我也有一些关于为什么的问题。
我在我的应用程序中实现了IAP,并在沙盒模式下对所有这些进行了测试,所有内容都按计划运行,没有任何崩溃。我最终将我的应用程序上传到了应用程序商店,在获得批准后,我从我的设备中删除了开发版本并安装了应用商店版本。此时,当我尝试在我的菜单中测试我的删除广告 IAP时,应用程序在加载VC时崩溃。
所以我在Xcode中看了我的设备日志...
Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000100054a34
Termination Signal: Trace/BPT trap: 5
Termination Reason: Namespace SIGNAL, Code 0x5
Terminating Process: exc handler [0]
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 Connectify 0x0000000100054a34 specialized SettingsTableViewController.(viewDidLoad() -> ()).(closure #1) (SettingsTableViewController.swift:40)
1 Connectify 0x0000000100054e00 partial apply for SettingsTableViewController.(viewDidLoad() -> ()).(closure #1) (SettingsTableViewController.swift:0)
2 Connectify 0x00000001000283d0 thunk (IAPHelper.swift:0)
3 Connectify 0x000000010002b990 specialized IAPHelper.productsRequest(SKProductsRequest, didReceive : SKProductsResponse) -> () (IAPHelper.swift:0)
4 Connectify 0x0000000100028738 @objc IAPHelper.productsRequest(SKProductsRequest, didReceive : SKProductsResponse) -> () (IAPHelper.swift:0)
5 StoreKit 0x000000019ae39dbc __34-[SKProductsRequest _handleReply:]_block_invoke + 512
6 libdispatch.dylib 0x000000018d229200 _dispatch_call_block_and_release + 24
7 libdispatch.dylib 0x000000018d2291c0 _dispatch_client_callout + 16
8 libdispatch.dylib 0x000000018d22dd6c _dispatch_main_queue_callback_4CF + 1000
9 CoreFoundation 0x000000018e34bf2c __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
10 CoreFoundation 0x000000018e349b18 __CFRunLoopRun + 1660
11 CoreFoundation 0x000000018e278048 CFRunLoopRunSpecific + 444
12 GraphicsServices 0x000000018fcfe198 GSEventRunModal + 180
13 UIKit 0x00000001942642fc -[UIApplication _run] + 684
14 UIKit 0x000000019425f034 UIApplicationMain + 208
15 Connectify 0x0000000100021248 main (AppDelegate.swift:16)
16 libdyld.dylib 0x000000018d25c5b8 start + 4
这让我相信它与IAP有关。此代码位于viewDidLoad
的{{1}}。
SettingsTableViewController
但我无法破译崩溃日志以确定问题所在,只是它可能与这段代码有关。
重新审核
所以,不知所措,我让我的妻子从商店下载应用程序并测试此崩溃。它没!没有崩溃。就在这时,我想尝试从开发门户中删除我的设备。当然,这已经解决了。
结论/问题
如果您正在使用IAP,它们可以在调试版本测试中使用,但不能在同一设备上的生产版本中使用。在开发门户中禁用您的设备,然后从商店重新安装。
1)Apple如何决定何时应该对IAP进行沙盒处理?它是基于证书吗?是否将设备ID注册为开发设备?
2)为什么这个IAP代码在我的开发设备上的调试版本中工作,而不是发布版本? (直到我在DevPortal中禁用该设备)
3)可以从崩溃日志中收集哪些信息可以更准确地指出这个问题?
更新
在谈到Swift时,我更多地了解了products = []
Products.store.requestProducts{success, products in
if success {
self.products = products!
for i in 0...products!.count - 1{
print("Index \(i): \(products![i].productIdentifier)")
}
if !IAPHelper.canMakePayments() || Products.store.isProductPurchased(Products.RemoveAds){
self.cell1.textLabel?.textColor = UIColor.gray
self.cell1.isUserInteractionEnabled = false
self.cell1.accessoryType = .none
self.cell2.textLabel?.textColor = UIColor.gray
self.cell2.isUserInteractionEnabled = false
self.cell2.accessoryType = .none
}
}else{
print("Not success")
}
}
,我认为它最有可能与EXC_BREAKPOINT (SIGTRAP)
中的索引越界异常相关阵列。具体来说,正如崩溃报告所说,这一行......
Products
但是为什么for i in 0...products!.count - 1{
只是products
只是因为开发设备从生产服务器请求IAP?