有什么方法可以在生产环境中使用数据集调试应用程序?

Any way to debug app with dataset in production environment?

我在 Production Environment 中的 CloudKit 数据集比 Development 大一些,可能存在其他奇特的差异。

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

这是一个线程问题,所以如果不检查 Xcode 中的线程,它确实可以做任何事情。任何想法?我正在使用核心数据到本地存储。

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

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

当应用程序进入后台时,在某个时候它会被 iOS 杀死,因为你的线程不会回答 -applicationDidEnterBackground,然后你会得到一个回溯你所有的线程。

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

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

我打赌你甚至不需要符号化。