在生产环境中使用数据集调试app的任何方法?

时间:2015-03-26 09:03:55

标签: ios deadlock cloudkit

CloudKit中的Production Environment数据集略大于Development,可能存在其他奇特的差异。

在生产模式下使用我的应用程序时有一个讨厌的deadlock。是否可以以任何方式调试客户端?或者我应该尽可能多地记录并发送出去?

这是一个线程问题,因此如果不检查Xcode中的线程,它实际上是做任何事情。任何的想法?我正在将Core Data用于本地存储。

3 个答案:

答案 0 :(得分:5)

  1. 回滚源代码中的更改,以便能够运行app。
  2. 将记录从生产环境同步到本地核心数据存储。
  3. 在Xcode Device菜单中从容器中复制sqlite数据库。
  4. 使用相同模型创建临时项目,并使用数据库填充它。
  5. 设置临时项目以使用以前的CloudKit容器。
  6. 在仪表板中重置开发环境。
  7. 从临时项目上传所有记录。
  8. 使用原始源代码运行原始项目。

答案 1 :(得分:0)

我建议使用崩溃报告服务。虽然有一些选择,但我和Crashlytics合作,我对他们提供的报告非常满意,总是帮助我修复生产中的错误。

答案 2 :(得分:0)

当应用程序进入后台时,某些时候它会被iOS杀死,因为你的线程没有回复-applicationDidEnterBackground,然后你将获得所有线程的回溯

如果你想要一个更好的机会来触发kill(如果锁定的线程不是主线程),你可以在工作线程中获取后台任务(- beginBackgroundTaskWithExpirationHandler:):如果它们在某些时候被锁定他们永远不会释放后台任务,他们会触发杀戮。

现在只需等待iOS调度程序杀死你的应用程序并抓住堆栈跟踪。在那里,您应该能够通过查看所有线程的回溯来找到罪魁祸首,并确定哪些被锁定在互斥锁()函数中。

我打赌你甚至不需要为此做出符号化。