Markdown相关 最近在做组内的文档建设,团队之前大部分都是用wiki记录,wiki对外的话经常涉及权限问题,另外,wiki的风格和UI整体效果感觉不是很清晰也不够美观。所以,这次打算用Markdown来做文档建设工作。相关资料:1、markdown编辑器介绍几款主流好用的markdown编辑器介绍_黄志千的博客-CSDN博客_markdown编辑器2、markdown教程Markdown 教程 | 菜鸟教程3、官方文档:Markdown 入门基础 | Markdown 官方教程
Pod组件差异化处理方案 最近在做基础库建设及部分业务的重构工作。因为支持的业务方比较多,而且Pod库会在多个App中被使用,那么同一个Pod库如何在多端做差异化处理,以及具体做到什么粒度,在这里简单总结一下。方案:一、预编译宏 使用类似 #if __has_include 等预编译宏,做差异化处理。二、接入层差异化配置 接入层或者适配层做区分。三、端参数区分 在公共库配置端参数,在pod库内部做判断使用。四、配置subspect 区别比较大的话,可...
iOS中在dealloc方法中取weakself引起崩溃的问题 iOS中在dealloc方法中取weakself引起崩溃的问题在dealloc方法中,如下代码就会crash:- (void)dealloc{ __weak __typeof(self)weak_self = self; NSLog(@"%@", weak_self);}控制台报错内容如下:objc[4572]: Cannot form weak reference to instance (0x160f6f890) of class XXX. It is possi
iOS线上防Crash处理并上传未发生的崩溃日志,降低线上APP崩溃率 线上APP的崩溃率一直是衡量APP用户体验的重要条件之一,所以,我们很有必要做一些安全防护,让APP尽可能少的产生Crash,提高用户体验。在以前的项目中零零散散做过一些防护,这次专门为平台封装了一个Pod库,供各个业务线直接引用。 其实,在开发过程中我们通过设置Xcode配置项、代码里边做判断、加宏编译等可以发现和避免很多Crash,如代码里边使用respondsToSel...
iOS利用Runtime实现自定义类的序列化和反序列化 最近项目中有一个发帖子的需求,就是类似新浪微博中的发文章。现在要求增加草稿箱的功能,不同的帖子都可以将内容存储到本地。开始我打算用数据库做本地存储,但是,由于文本编辑有富文本内容,对应iOS中的NSAttributedString对象,这种对象存储到数据库没有对应的数据类型,然后就采用了做本地序列化和反序列化来存储内容,也就是归解档。 发帖页面大概是这样的,支持添加标题、封面、文...
iOS中获取光标位置(解决获取光标位置无穷大问题) 获取UITextView光标所在位置的方法://光标的frameCGRect caretRect = [textView caretRectForPosition:textView.selectedTextRange.start];在textViewDidChange代理方法中,使用如上获取光标所在的位置,但是,在使用中发现偶尔会导致获取的光标位置为无穷大(x = +Inf, y = ...
Flutter高效率UI渲染方式原理解析 我们知道Flutter在UI绘制方面的效率是几乎接近原生的,这点比React Native要优秀很多,因为React Native是通过桥接转换然后去调用各自平台的UI系统(如iOS中的UIKit框架)提供的API来完成绘图。接下来,我们先从硬件绘图说起,也就是我们看到的屏幕上的内容,是如何一步步显示出来的,最后再来介绍Flutter的UI渲染方式的底层实现原理。硬件绘图基本原理提到...
移动开发跨平台技术简介:Flutter、React Native、Weex、Hybrid 最近在学习Flutter,看到了一篇关于移动开发跨平台技术的总结,感觉写的不错。在此,记录一下,方便之后查看。文章中介绍了:1、原生开发与跨平台技术目前的发展现状。2、Hybrid技术简介(H5+原生混合开发),这是目前跨平台开发最成熟和应用最广的技术。3、React Native、Flutter、Weex框架原理介绍和优缺点比较。4、PC客户端QT原理简介。链...
关于2020年平台架构待优化事项总结 1、安全、逆向工程:明文字符串加密、防止动态库注入、防止App被二次签名、增加反编译破解难度、现有二次打包方案优化。2、UI线程卡顿监控工具的实现:基于Runloop和UI线程的FPS做到实时监控线程卡顿,并将当前卡顿线程的callstack(堆栈信息)获取,定位到产生卡顿的具体代码。实现逻辑:利用Runloop的CFRunLoopObserverRef监听kCFRunLoopBeforeS...
iOS13系统适配暗黑模式调研总结 背景:iOS13系统提供了暗黑模式,公司各业务线App打算尝试适配iOS13系统暗黑模式。一、关于图片的适配:1、本地图片适配:Assets中设置(Any,Dark)类型,可设置两种模式下分别需要显示的图片(可兼容iOS低版本系统)。2、网络图片适配:设计人员出图需考虑同时兼容暗黑模式和正常模式(需出一套图,对应两种模式),不建议出两套图。二、关于颜色的适配:UICol...
iOS13系统App应用图标发生变化的问题 最近我们App的应用图标进行了更新,在iOS13系统上,发现一个奇怪的问题,当点击App的时候App的图标会变回之前旧版的icon图标,当App从前台切换到后台时,也会看到旧版的icon图标,大概过0.5秒左右,才会从旧版的icon图标切换到新版的icon图标。删除应用重新安装还是会存在这个问题。 经过排除项目中确实没有旧版的icon图标了、项目中也没有用到下面这些方法去...
iOS仿微信聊天输入框、评论输入框 最近项目有需求,需要实现一个类似微信聊天输入框的组件,用在全平台的评论功能中。大概需求就是输入的文字占满一行时,自动折行并且增大输入框的高,输入框的高有默认的最大值。在此,记录一下遇到的问题。1、项目中用到了三方库IQKeyboardManager,如果开启IQKeyboardManager的话,在Controller中侧滑会遇到bug,而且会影响其他的页面,这是得不偿失的,所以,最后禁...
Mac上(iOS项目)用Jenkins做持续集成(CI)注意事项及总结 注意事项:1、安装Jenkins一定要从命令行安装(brew install jenkins),切记不要从Jenkins官网直接下载安装。因为后者会默认安装在Mac的Shared目录下,之后会遇到很多访问权限问题。2、Jenkins默认安装的那些插件其实可以直接跳过,之后自己把需要安装的插件自行安装即可。3、插件可以在插件管理里边直接一键安装,如果安装慢的话也可以自己去下载Jenkin...
iOS中UICollectionView调用reloadData,导致视图失去第一响应者(失去焦点、键盘收起)的解决办法 需求: 有这样一个需求,在UICollectionViewCell中有一个UITextField控件,在输入的过程中实时判断格式是否正确,如果不正确就如图二展示的效果,也就是需要在键盘弹出的状态下动态调整Cell的高度。 遇到的问题: 我们可能会想到计算Cell高度,然后调用[collectionView reloadData]方法重新布局,但是,调用[collec...
Cocoapods相关指令合集(打pod库、.podspec文件中、Podfile文件中) 一、组件化开发打pod库以及.podspec文件中相关指令: 1、添加'本地的私有仓库'(Spec Repo)文件:pod repo add baseSpecs http://***/***/specs.git 2、查看本地的所有repo:pod repo list 3、打开本地配置仓库管理文件夹进行查看:open ~/.cocoapods/repos ...
iOS组件化开发之——使用Cocoapods打私有的Pod库 随着项目和业务的发展,项目中会有很多基础功能模块和通用业务模块可以抽象成独立的组件,这样方便给各个业务线提供共用的基础组件,进行组件化编程,不需要重新造轮子,提高开发效率。因此我们就需要一个方案来合理的管理公共的组件。Spec Repo(配置仓库)的概念 CocoaPods对于一名iOS开发来说再熟悉不过了,它的工作原理就是在GitHub上面有个Spec Rep...
iOS启动速度优化总结 随着项目越做越大,代码和业务量越来越多,这时候每次启动APP的时候就会花费较长的时间,这对用户来说体验很不好。所以,针对APP启动时间的优化还是很有必要的。 关于APP启动时间的分析和优化可以以main()为分界点,分为main()方法执行之前的加载时间(pre-main time)和main()之后的加载时间。那么,如何定量的测量这两个阶段具体的执行时间呢,下面先给...