- 博客(132)
- 资源 (6)
- 收藏
- 关注
原创 跨端开发技术储备记录
最近在做跨端开发,需要学习一些前端的开发技能,在此做一个记录,方便后续查看和总结。1、TypeScript学习。2、Flex布局学习。
2022-07-18 15:19:45
333
原创 Markdown相关
最近在做组内的文档建设,团队之前大部分都是用wiki记录,wiki对外的话经常涉及权限问题,另外,wiki的风格和UI整体效果感觉不是很清晰也不够美观。所以,这次打算用Markdown来做文档建设工作。相关资料:1、markdown编辑器介绍几款主流好用的markdown编辑器介绍_黄志千的博客-CSDN博客_markdown编辑器2、markdown教程Markdown 教程 | 菜鸟教程3、官方文档:Markdown 入门基础 | Markdown 官方教程
2021-11-24 18:15:35
231
原创 Pod组件差异化处理方案
最近在做基础库建设及部分业务的重构工作。因为支持的业务方比较多,而且Pod库会在多个App中被使用,那么同一个Pod库如何在多端做差异化处理,以及具体做到什么粒度,在这里简单总结一下。方案:一、预编译宏 使用类似 #if __has_include 等预编译宏,做差异化处理。二、接入层差异化配置 接入层或者适配层做区分。三、端参数区分 在公共库配置端参数,在pod库内部做判断使用。四、配置subspect 区别比较大的话,可...
2021-11-19 21:19:10
2322
原创 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
2021-03-22 14:24:26
2254
原创 iOS线上防Crash处理并上传未发生的崩溃日志,降低线上APP崩溃率
线上APP的崩溃率一直是衡量APP用户体验的重要条件之一,所以,我们很有必要做一些安全防护,让APP尽可能少的产生Crash,提高用户体验。在以前的项目中零零散散做过一些防护,这次专门为平台封装了一个Pod库,供各个业务线直接引用。 其实,在开发过程中我们通过设置Xcode配置项、代码里边做判断、加宏编译等可以发现和避免很多Crash,如代码里边使用respondsToSel...
2020-04-30 17:59:47
2535
5
原创 iOS利用Runtime实现自定义类的序列化和反序列化
最近项目中有一个发帖子的需求,就是类似新浪微博中的发文章。现在要求增加草稿箱的功能,不同的帖子都可以将内容存储到本地。开始我打算用数据库做本地存储,但是,由于文本编辑有富文本内容,对应iOS中的NSAttributedString对象,这种对象存储到数据库没有对应的数据类型,然后就采用了做本地序列化和反序列化来存储内容,也就是归解档。 发帖页面大概是这样的,支持添加标题、封面、文...
2020-04-08 17:12:59
556
原创 iOS中获取光标位置(解决获取光标位置无穷大问题)
获取UITextView光标所在位置的方法://光标的frameCGRect caretRect = [textView caretRectForPosition:textView.selectedTextRange.start];在textViewDidChange代理方法中,使用如上获取光标所在的位置,但是,在使用中发现偶尔会导致获取的光标位置为无穷大(x = +Inf, y = ...
2020-03-17 16:14:47
1949
转载 Flutter高效率UI渲染方式原理解析
我们知道Flutter在UI绘制方面的效率是几乎接近原生的,这点比React Native要优秀很多,因为React Native是通过桥接转换然后去调用各自平台的UI系统(如iOS中的UIKit框架)提供的API来完成绘图。接下来,我们先从硬件绘图说起,也就是我们看到的屏幕上的内容,是如何一步步显示出来的,最后再来介绍Flutter的UI渲染方式的底层实现原理。硬件绘图基本原理提到...
2020-01-19 10:53:26
1886
原创 移动开发跨平台技术简介:Flutter、React Native、Weex、Hybrid
最近在学习Flutter,看到了一篇关于移动开发跨平台技术的总结,感觉写的不错。在此,记录一下,方便之后查看。文章中介绍了:1、原生开发与跨平台技术目前的发展现状。2、Hybrid技术简介(H5+原生混合开发),这是目前跨平台开发最成熟和应用最广的技术。3、React Native、Flutter、Weex框架原理介绍和优缺点比较。4、PC客户端QT原理简介。链...
2020-01-14 16:01:55
1072
原创 关于2020年平台架构待优化事项总结
1、安全、逆向工程:明文字符串加密、防止动态库注入、防止App被二次签名、增加反编译破解难度、现有二次打包方案优化。2、UI线程卡顿监控工具的实现:基于Runloop和UI线程的FPS做到实时监控线程卡顿,并将当前卡顿线程的callstack(堆栈信息)获取,定位到产生卡顿的具体代码。实现逻辑:利用Runloop的CFRunLoopObserverRef监听kCFRunLoopBeforeS...
2020-01-10 14:26:12
1695
原创 iOS13系统适配暗黑模式调研总结
背景:iOS13系统提供了暗黑模式,公司各业务线App打算尝试适配iOS13系统暗黑模式。一、关于图片的适配:1、本地图片适配:Assets中设置(Any,Dark)类型,可设置两种模式下分别需要显示的图片(可兼容iOS低版本系统)。2、网络图片适配:设计人员出图需考虑同时兼容暗黑模式和正常模式(需出一套图,对应两种模式),不建议出两套图。二、关于颜色的适配:UICol...
2020-01-10 14:10:24
1431
原创 iOS13系统App应用图标发生变化的问题
最近我们App的应用图标进行了更新,在iOS13系统上,发现一个奇怪的问题,当点击App的时候App的图标会变回之前旧版的icon图标,当App从前台切换到后台时,也会看到旧版的icon图标,大概过0.5秒左右,才会从旧版的icon图标切换到新版的icon图标。删除应用重新安装还是会存在这个问题。 经过排除项目中确实没有旧版的icon图标了、项目中也没有用到下面这些方法去...
2020-01-02 16:43:19
7203
3
原创 iOS仿微信聊天输入框、评论输入框
最近项目有需求,需要实现一个类似微信聊天输入框的组件,用在全平台的评论功能中。大概需求就是输入的文字占满一行时,自动折行并且增大输入框的高,输入框的高有默认的最大值。在此,记录一下遇到的问题。1、项目中用到了三方库IQKeyboardManager,如果开启IQKeyboardManager的话,在Controller中侧滑会遇到bug,而且会影响其他的页面,这是得不偿失的,所以,最后禁...
2019-12-13 17:32:11
3112
原创 Mac上(iOS项目)用Jenkins做持续集成(CI)注意事项及总结
注意事项:1、安装Jenkins一定要从命令行安装(brew install jenkins),切记不要从Jenkins官网直接下载安装。因为后者会默认安装在Mac的Shared目录下,之后会遇到很多访问权限问题。2、Jenkins默认安装的那些插件其实可以直接跳过,之后自己把需要安装的插件自行安装即可。3、插件可以在插件管理里边直接一键安装,如果安装慢的话也可以自己去下载Jenkin...
2019-12-04 14:19:09
1055
原创 iOS中UICollectionView调用reloadData,导致视图失去第一响应者(失去焦点、键盘收起)的解决办法
需求: 有这样一个需求,在UICollectionViewCell中有一个UITextField控件,在输入的过程中实时判断格式是否正确,如果不正确就如图二展示的效果,也就是需要在键盘弹出的状态下动态调整Cell的高度。 遇到的问题: 我们可能会想到计算Cell高度,然后调用[collectionView reloadData]方法重新布局,但是,调用[collec...
2019-09-23 18:24:25
3870
原创 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 ...
2019-07-24 15:34:41
2095
原创 iOS组件化开发之——使用Cocoapods打私有的Pod库
随着项目和业务的发展,项目中会有很多基础功能模块和通用业务模块可以抽象成独立的组件,这样方便给各个业务线提供共用的基础组件,进行组件化编程,不需要重新造轮子,提高开发效率。因此我们就需要一个方案来合理的管理公共的组件。Spec Repo(配置仓库)的概念 CocoaPods对于一名iOS开发来说再熟悉不过了,它的工作原理就是在GitHub上面有个Spec Rep...
2019-07-24 10:46:09
1934
原创 iOS启动速度优化总结
随着项目越做越大,代码和业务量越来越多,这时候每次启动APP的时候就会花费较长的时间,这对用户来说体验很不好。所以,针对APP启动时间的优化还是很有必要的。 关于APP启动时间的分析和优化可以以main()为分界点,分为main()方法执行之前的加载时间(pre-main time)和main()之后的加载时间。那么,如何定量的测量这两个阶段具体的执行时间呢,下面先给...
2019-07-18 16:03:50
7158
1
原创 WebView性能、体验分析与优化
因为客户端WebView的展示需要经过多方才能完成(从后台到前端),所以,本文针对WebView的性能优化涉及到iOS/Android、Web前端、后台服务器等相关方。WebView性能优化总结:一个加载网页的过程中,native、网络、后端处理、CPU都会参与,各自都有必要的工作和依赖关系;让他们相互并行处理而不是相互阻塞才可以让网页加载更快:WebView初始化慢,可以在初始...
2019-07-10 16:41:07
3048
原创 Mac终端常用命令合集
常用的:command + w 关闭当前窗口command + q 退出终端command + k 清空ctrl + c 结束当前进程ctrl + z 挂起正在运行的进程切换路径和目录相关的:cd (不加参数) 进入root(刚打开终端默认的那个路径)cd (fo...
2019-07-05 15:36:31
2723
原创 iOS App在运行过程中占用系统内存的方法和CPU使用率的计算方法
最近在调研iOS中的OOM(Out-Of-Memory),iOS中存在一些机制,当系统的内存不够用时或者当前APP的使用内存超过了阈值,就会导致系统强杀当前APP,由于强杀当前APP的进程是系统做的事情,所以,当前APP是无法知道是什么时候被强杀的。而且,我们平常使用的通过监测signal信号量来获取Crash的工具也是无法获取OOM这类强杀的。在调研测试过程中,用到了计算当前APP占用...
2019-06-26 16:49:57
4142
原创 Jekins打出来的包iOS9系统无法安装的问题
最近项目Jekins打包,用iOS9系统的手机扫二维码下载,总是下载失败,提示无法安装应用。1、其中,我们可以借助一个第三方工具,来查看安装APP的失败原因:Log Guru (工具)2、安装失败的日志分析:iOS自动化测试之ipa安装失败的日志分析2、一般的解决办法:iOS9无法安装企业版的解决办法最终找到的问题所在,是由于利用Jekins下载的时候需要提供的图...
2019-06-24 18:13:28
265
原创 iOS应用UI线程卡顿监控
地址:http://mrpeak.cn/blog/ui-detect/该文章只是提供一个检测主线程卡顿的一个思路,并不是很完善,项目中有需要的话,可以结合自己的需求进行二次开发。...
2019-06-12 11:59:47
504
原创 面向协议编程介绍 (附Swift和OC语言的区别)
面向协议编程,喵神在博客中有介绍:面向协议编程与 Cocoa 的邂逅 (上)面向协议编程与 Cocoa 的邂逅 (下)Swift和OC的区别、面向协议编程和面向对象编程的优缺点,可以看下面这篇文章:来一次有侧重点的区分Swift与Objective-C通过这几篇文章对面向对象编程和面向协议编程有了更深层次的理解,其中包括面向对象存在的三个困境:1、动态派发的安全...
2019-05-22 15:22:02
1708
转载 iOS 真机访问sandbox(沙盒)目录的各种方法
我一直知道,要做成同一件事,程序员们的方式往往五花八门。所以这次就一个问题在微博上征集答案,果然得到了许多不同方案,和大家分享下。平常调试一直有看日志的需要,我们一般将日志文件存放在 sandbox 的 Document 目录下,之前我如果要查看某台设备上的日志,一般是按如下两种方式:方式一:使用 iTools,Mac 端的 iTools 可以访问真机 App 的完整目录,虽然 iOS 8...
2019-04-22 18:41:48
4535
转载 iOS 代码使用 C++ 的 zero-cost abstraction 特性
不少 iOS 项目里都有 C++ 代码的痕迹,Objective-C 和 C++ 虽然都是 C 的 superset,但二者在语言特性上存在很大差异,Objective-C 的 runtime 使其语言的特性更丰富更易使用,但代价是会增加性能损耗以及编译后的 binary size。很多成熟项目开发到一定阶段,会关注一些关键指标,比如 App size,现在超过 100 M 的 App 比比皆...
2019-04-16 10:36:05
496
原创 iPhone手机屏幕尺寸详细表格、A10和A11处理器介绍
1、屏幕尺寸链接地址:点击查看补充:iPhoneX系列,也就是带刘海屏的一系列手机,屏幕宽高比是一致的。iPhone5、iPhoneSE、iPhone6、iPhone6 Plus等一系列非刘海屏的手机,屏幕宽高比也是一致的。2、关于苹果A10处理器和A11处理器是几核的介绍:苹果A10、A11处理器是几核的介绍...
2019-04-02 14:48:19
3785
原创 iOS中如何正确释放GCD定时器(dispatch_source_t)以及防止Crash?
Dispatch Source Timer 的使用以及注意事项Dispatch Source Timer 是一种与 Dispatch Queue 结合使用的定时器。当需要在后台 queue 中定期执行任务的时候,使用 Dispatch Source Timer 要比使用 NSTimer 更加自然,也更加高效(无需在 main queue 和后台 queue 之前切换)。使用如下:@p...
2019-02-18 15:55:52
18808
原创 iOS实现一段文字中指定的某些文字点击有响应事件或者可以跳转(给字符串添加超链接)
直接上需求,见如下UI图: 需求是点击中间的电话(蓝色字体部分),可以直接拨打电话。对于这种很长的一段文字中间夹着可以有点击事件的文字,可以通过下面这种方式解决:图中所指的这段文字,不用UILabel来展示,用UITextView来展示,如下://富文本- (UITextView *)bottomTextView { if (!_bottomTextView) {...
2019-01-29 16:19:46
1948
原创 iOS安全防护---越狱检测、二次打包检测、反调试
最近在调研越狱设备的检测、防止APP被二次打包、防止反调试以及逆向工程,调研期间做了大量的测试来验证方案的可行性,花费了很多时间。所以,在此将调研结果总结一下,供大家参考。一、越狱环境下,提高App破解难度的方案:1、检测是否被注入,阻止Cycript等的动态库注入。2、在Xcode编译选项中other linker flags中添加-Wl,- sectc...
2019-01-18 19:07:18
8504
4
原创 iOS如何判断APP是在调试器(Xcode上)运行
#include <assert.h>#include <stdbool.h>#include <sys/types.h>#include <unistd.h>#include <sys/sysctl.h>static bool AmIBeingDebugged(void) // Returns true if th...
2019-01-15 11:43:17
1893
转载 深究Xcode的bitcode设置
文章地址:https://blog.csdn.net/u011363981/article/details/71516473
2018-11-08 16:30:03
815
原创 iOS中WKWebView清除cookies
- (void)deleteWebCookiesCache { if (@available(iOS 9.0, *)) {//iOS9及以上 WKWebsiteDataStore *dateStore = [WKWebsiteDataStore defaultDataStore]; [dateStore fetch...
2018-07-23 17:35:53
1994
转载 iOS中Category和Extension 原理详解
(一)Category1、什么是Category?category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的category。category的主要作用是为已经存在的类添加方法。除此之外,apple还推荐了category的另外两个使用场景。可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处。可以减少单个文件的体积可以把不同的功能组织到不同...
2018-07-04 20:20:01
2813
原创 iOS开发SDK时,图片等资源文件访问问题
当SDK中需要加入图片等资源文件的时候,我们需要将图片提供给别人,或者将图片制作成bundle让别人的项目引用,如果只是在SDK的工程中引入文件,那么当别人的项目使用我们的SDK时会找不到图片文件。 有关SDK制作的相关文章: iOS中的静态库与动态库,区别、制作和使用 iOS项目中SDK的开发与调试 IOS SDK开发之--2.创建自己的SDK iOS 封装...
2018-07-03 16:40:43
2855
原创 Block解析
关于block在内存中的位置:OC中,一般Block就分为以下3种,_NSConcreteStackBlock,_NSConcreteMallocBlock,_NSConcreteGlobalBlock。先来说明一下3者的区别。1.从捕获外部变量的角度上来看(注意:MRC下和ARC下_NSConcreteStackBlock和_NSConcreteMallocBlock不一样,ARC下...
2018-06-24 22:52:07
618
利用VC++ GDI 实现的画图以及图像显示程序
2014-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人