应用程序从应用商店崩溃,但在开发版

时间:2016-11-22 14:50:58

标签: swift in-app-purchase release

这是一个问题/答案。我发现了我的问题,我将在这里解释,希望其他人也可以学习,但我也有一些关于为什么的问题。

我在我的应用程序中实现了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?

0 个答案:

没有答案