热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ios崩溃无法定位到具体代码_四个技巧快速定位和解决iOScrashesandbugs

每个app都有性能问题,都有要修复的错误,都会crash。尽管我们已经非常小心了,即使我们的app在设备上运行一切正常,即使

每个 app 都有性能问题,都有要修复的错误,都会 crash。 尽管我们已经非常小心了,即使我们的 app 在设备上运行一切正常,即使所有测试也都通过了我们还是不免会遇到各种无法预料的问题。

因此,我们可以使用一些技巧,通过收集正确的信息,快速定位和修复大多数 bugs 和 crashes。

1. Crash reporting tools

修复崩溃需要深入了解 app 中发生崩溃的情况。最简单的方法是进入Xcode➞Organizer➞Crashes 查看崩溃信息:

f34ed9dd12b86f6da73c3084d5b651c6.png


Xcode 一个很酷的地方是允许我们通过单击右上角的蓝色按钮 “Open in Project...” 直接跳转到导致崩溃的代码。

我们修复崩溃后,还可以在 Xcode 中为崩溃添加注释,然后使用右下角的“标记为已解决(Mark as Resolved)” 按钮将其标记为已解决。

将崩溃报告工具与分析相结合

Xcode 内置的崩溃报告工具已经很好用了,但是,使用 Firebase 或 Instabug 之类的第三方工具会有更多好处。

这些工具使用报告的分析功能,通过显示崩溃之前的执行事件的跟踪轨迹,使我们深入了解 crash 情况。

想了解更多,可以看这里: Fixing crashes with Firebase Crashlytics.

2. 与用户联系

修复常见错误的最有效方法之一就是与客户建立联系。用户使用 app,最清楚crash 情况。

我们可以通过创建 TestFlight 来测试 app 的新版本。

TestFlight 具有内置的报告工具,供用户报告所有发现的错误。用户可以通过截屏,点击“Done”按钮并点击“共享Beta反馈”按钮,添加注释并共享屏幕截图以提供给我们反馈:

b21551b5a057bae72960ed9ed8ad6e2e.png

该反馈将最终显示在 App Store Connect 中的 TestFlight 页面,其中包含各种有用的信息,例如电池信息,磁盘空间,应用程序版本和系统版本等:

b43f21d400dab4e5b93baa11fb351f09.png


以上是一种方式,除此,还有以下方法:

  • 创建 Twitter 或者微博帐户,和用户互动讨论
  • 添加应用内聊天功能
  • 开发带有反馈表的支持页面

3. 允许用户共享诊断报告

某些情况下,您与用户联系,但仍无法解决所报告的问题。您收到了崩溃的信息,但是不知道哪些崩溃与该特定用户报告的问题有关。

所以,我们最好在 app 中提供一个选项,让用户共享 app 的诊断信息。

Collect by WeTransfer ,允许用户在其中报告问题以及诊断报告。

我们可以很轻松地将WeTransfer Diagnostics 这个开源框架添加到我们的 app 中。 它可以创建包含以下内容的报告:

  • 设备信息
  • 系统信息
  • 系统日志
  • 用户默认键

最重要的是,我们还可以轻松地添加自定义见注释,以帮助开发者解决问题。

075ee600ac5b3d640f49ae5b2c0ca0b6.png

该框架的优点在于,我们还可以轻松地自定义将最终出现在报告中的错误:

/// Support logging simple `String` messages.
DiagnosticsLogger.log(message: "Application started")/// Support logging `Error` types.
DiagnosticsLogger.log(error: ExampleError.missingData)

这样可以更轻松地解决特定问题。

显然,我们应该考虑敏感数据和《通用数据保护条例》( GDPR),仅共享能解决问题的信息,避免共享私有数据。

4. 与用户相关的崩溃

大多数崩溃报告工具都允许设置特定用户标识符。这使得我们可以过滤特定用户的崩溃。我们甚至可以将其作为超链接添加到自定义“诊断HTML”报告中:

static var firebaseCrashesURL: String {guard let identifier = Tracker.userIdentifier else { return "Unknown" }return "(identifier)"
}

本示例创建了一个链接,在 Firebase 中直接打开该链接,可以查看特定用户遇到的问题。

注意,请确保对标识符进行哈希处理,使其符合 GDPR 要求,而不是公开获取用户的任何隐私数据。

总结

以上 4 条小技巧,可以帮助我们快速定位错误所在,从而节省开发时间,让我们可以一心用在开发项目功能上去。

2020.10.24 夜
上海 二联家园



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
author-avatar
疯务情堂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有