chiery'blog


  • Home

  • Tags

  • Categories

  • Archives

Flutter 基于Dio的网络框架

Posted on 2019-08-12 | In Flutter Network | Visitors:

flutter作为跨平台提效方案,确实可以将开发的效率大幅提升,前提是:

  1. 尽量少的桥接
  2. 尽量多的复用

从这两个出发点延伸,接入Flutter后,会承接更多的业务逻辑,增加代码的平台性。基于这个原则,flutter将会承接工程中的主力。网络库的构建,也成了不可缺少的工作。

这篇文章中不在介绍网络选型的逻辑,所有的代码都是基于DIO网络通道构建的。

Read more »

iOS 自定义 VCStack

Posted on 2018-12-27 | In iOS Customer | Visitors:

背景介绍

最近开发的几个工程使用的都是系统的VCStack,即UITabbarController + UINavigationController的方式。这是一个经典的组合,在现实的开发场景中基本已经能够满足需求。但是,最近几期UI稿和UE稿的设计规则,有点超出了这个既有框架的能力

  • 遮罩全屏的半浮层
  • 出栈入栈复杂的动画
  • 跨VC堆栈的pop和push操作

在现有的UITabbarController + UINavigationController结构下,这些功能已经被实现,但是过程较为复杂,不少逻辑现在看来任有优化的空间,基于这个背景,打算写一个自定义的VCStack,解决系统空间的局限性

Read more »

iOS Crash 六

Posted on 2018-08-23 | In iOS Crash | Visitors:

对比KSCrash发现的问题

检测内容对比

从KSCrash github中的描述可以看到,支持的功能更全:

  • Mach kernel exceptions
  • Fatal signals
  • C++ exceptions
  • Objective-C exceptions
  • Main thread deadlock (experimental)
  • Custom crashes (e.g. from scripting languages)
Read more »

iOS Crash 五

Posted on 2018-08-21 | In iOS Crash | Visitors:

之前介绍符号化文件的时候,使用atos命令可以将符号堆栈信息变的可读。方法如下:

atos -o dYSM -arch **arch -l imageAddress stackAddress

在真实的环境中使用的时候需要准备的dYSM文件远远不止archive出来的app二进制文件。奔溃的堆栈中都会出现系统的库,例如:

CoreFundation
UIkit
libdyld.dylib
...
Read more »

iOS Crash 四

Posted on 2018-08-16 | In iOS Crash | Visitors:

多个handler共存带来的坑

在hook crash时,单独的app测试handle方法会生效,但是一旦将测试的代码加入到依赖很多第三方库的工程中,可能这段代码就不再生效了,不过也有别的可能,例如,当前代码有效,别的第三方库中的代码功能失效。导致这一现象出现的原因是,handle句柄没有正常传递。正常使用的规范是:

  • 拿到之前的句柄。

    方式:preHandler = NSGetUncaughtExceptionHandler();
  • 注册自己的handle。

    方式:NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
  • 处理完之后检测之前的handler是否存在,存在就将handle交给 NSSetUncaughtExceptionHandler

    if (preHandler != NULL) {
        NSSetUncaughtExceptionHandler(preHandler)
    }
Read more »

iOS Crash 三

Posted on 2018-08-14 | In iOS Crash | Visitors:

前两章说了crash文件解析的方法和crash文件中包含的内容,基于的条件是拿到当前奔溃的手机,再拿到手机中对应的日志。或者,用户打开了日志上报的功能,统计到的日志被apple收集了。这两种方式都比较被动,而且没有筛选的功能。对于监测app状态来说不是很准确,定位的过程也比较长。

自定义一个crash 收集工具

上面已经介绍了背景,接下来开始自定义工具,先画一个逻辑图来阐述工具具备的功能

一步一步来,首先在客户端收集crash,收集的方式包含两种:

  • NSSetUncaughtExceptionHandler
  • handleSignal

至于hook Unix信号还是 mac内核信号,这个地址中给出了详细的介绍,这里就不在赘述了。工程中的函数如下:

Read more »

iOS Crash 二

Posted on 2018-08-13 | In iOS Crash | Visitors:

上一篇文章中讲述了,如何拿到crash,并且有几种方式来符号化crash文件。但是对文件本身还没有做对应的介绍。本节就来说说crash文件中各个字段对应的意义

Header

每个crash都有这样的header

Incident Identifier: 056AE3FF-0053-4B5F-8C42-5CFD2F4CE9F4
CrashReporter Key:   3c6d6b39fd3e330ce44828e97ab49661480cbb94
Hardware Model:      iPhone10,3
Process:             TestCrash [652]
Path:                /private/var/containers/Bundle/Application/538B29B9-CED1-4969-913B-CB9344F70E94/TestCrash.app/TestCrash
Identifier:          com.lianjia.TestCrash
Version:             1 (1.0)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]
Coalition:           com.lianjia.TestCrash [682]


Date/Time:           2018-08-10 17:43:31.2405 +0800
Launch Time:         2018-08-10 17:43:27.4744 +0800
OS Version:          iPhone OS 11.4.1 (15G77)
Baseband Version:    1.93.00
Report Version:      104

apple 给出的解释如下:

Read more »

iOS Crash 一

Posted on 2018-08-12 | In iOS Crash | Visitors:

初衷

当前客户端中使用的crash收集工具为第三方提供,用到的第三方工具有

  • fabric
  • bugly

第三方工具在使用的过程中,存在的问题:

  • 内聚的功能过多。有的功能我们并不会用到,成为了负担
  • 定制化场景少。对于不同的app,希望错不同的维度来查询对应的结果
  • SDK size 较大

针对上面的这些问题,打算出一套自己的crash工具,工具本省应该具备的功能:

  • 功能单一性
  • 健壮性
  • 定制化产出
Read more »

基于地理位置的AR增强现实

Posted on 2017-03-06 | In 基于地理位置的AR增强现实 | Visitors:

随着支付宝,QQ AR技术的应用,越来越多的团队开始认识到AR的价值,可以说2016年AR技术离我们又进了一步。再往前倒一年,你会发现,其实双11会场也是做过AR红包的,但是当时的红包效果确实不怎么地,界面抖动的太厉害(没有对感应器做深层次的了解)。随之还有QQ火炬接力,当时没有记错的话,QQ的AR是好像2d的,设备要求在水平放置时,才能展示更好的效果。随着研究的深入,产品的效果也是越来越理想,这里介绍两个国内的AR产品。“视+”,基于标记的AR技术,逼格很高,也拥有了很庞大的用户群。”随便走“基于地理位置的AR技术,下面来几张截图:

这次的主题也是基于地理位置的AR实现。

Read more »

MapView适配版本记录实践记录

Posted on 2017-03-01 | In MapView适配版本记录实践记录 | Visitors:

客户端中涉及到了mapView坐标系的转化,有必要在这里先做一下记录。众所周知地球是一个不规则椭圆体,GIS中的坐标系定义由基准面和地图投影两组参数确定,而基准面的定义则由特定椭球体及其对应的转换参数确定。 基准面是利用特定椭球体对特定地区地球表面的逼近,因此每个国家或地区均有各自的基准面。基准面是在椭球体基础上建立的,椭球体可以对应多个基准面,而基准面只能对应一个椭球体。意思就是无论是谷歌地图、搜搜地图还是高德地图、百度地图区别只是针对不同的大地地理坐标系标准制作的经纬度,不存在准不准的问题,大家都是准的只是参照物或者说是标准不一样。谷歌地图采用的是WGS84地理坐标系(中国范围除外),谷歌中国地图和搜搜中国地图采用的是GCJ02地理坐标系,百度采用的是BD09坐标系,而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,为什么不统一用WGS84地理坐标系这就是国家地理测绘总局对于出版地图的要求,出版地图必须符合GCJ02坐标系标准了,也就是国家规定不能直接使用WGS84地理坐标系。所以定位大家感觉不准确很多又叫出版地图为火星地图其实只是坐标系不一样而已。这就是为什么设备采集的经纬度在地图上显示的时候经常有很大的偏差,远远超出民用GPS 10米偏移量的技术规范。
以上参考自:haotsp.com

Read more »
12…4

John Doe

持续、专注

37 posts
25 categories
15 tags
© 2019 John Doe
Powered by Hexo
|
Theme — NexT.Muse v5.1.4