自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CaicaiNo.1

生活需要激情,就像鱼需要水

  • 博客(157)
  • 收藏
  • 关注

原创 Mac公证脚本-Web公证方式

macos web 公证脚本流程

2024-02-20 21:07:19 1216

原创 iOS开发-iOS如何本地调试JS

文章目录前言Charles代理HTTPS代理设置WKWebView的缓存机制本地映射html 资源请求远端映射映射到远端映射到本地服务器Safari的调试功能前言最近在排查问题时,遇到Html网页问题,总结下调试经验Charles代理HTTPS代理设置关于 charles 的 https 代理设置,这里简单说明下:打开 Charles,选择上侧菜单栏,选择 SSL Proxying ,安装证书到手机 Mobile Device根据弹框提示,打开网址下载证书,并信赖,然后配置wifi在同一网

2021-04-19 22:57:43 1360

原创 iOS开发-逆向注入SDK(三)MonkeyDev注入打包

文章目录MonkeyDev使用注入SDKMonkeyDev强大的工具集,MonkeyDev ,使用它行了!安装教程见 Wiki使用拿着之前通过 frida砸壳 的 ipa包,先创建一个 MonkeyDev 工程。这里以 qqmusic 为例将砸壳的 ipa 放到 qqmusic/TargetApp/ 下,然后拖拽至工程文件中。设置主工程的证书,dylib的不用设置提示 Showing All Messages Signing for "qqmusicDylib" requir

2021-03-23 11:06:39 2394 2

原创 iOS开发-逆向注入SDK(二)frida砸壳

文章目录下载app使用frida完成 iOS开发-逆向注入SDK之iOS越狱 之后 ,我们开始砸壳app下载app手机安装了 爱思极速版 后,我们可以不经过 appstore 下载,因为是砸壳,选择一些不需要登录的app为好,选择微信,登录后可能会被封号。使用fridafrida算是比较无脑的一个,简单,所以这里选择用它。下拉 frida-ios-dumpgit clone https://github.com/AloneMonkey/frida-ios-dump下拉仓库。cydia

2021-03-22 21:49:56 913

原创 iOS开发-逆向注入SDK(一)iOS越狱

越狱这里采用使用 iphone 5S, iOS 12.4.9 为例,进行 非完美越狱非完美越狱:重启手机越狱失效,需要再进行越狱,越狱也不麻烦,点几下就行了,不过不关机就行了哈i4助手安装 i4助手(爱思助手) https://www.i4.cn/ 是个很好的软件,如果你的手机变砖了,正好可以使用它刷机。不过被密码锁定的手机不行。如果你的iphone已经开机就黑,选择合适的固件版本,进行刷机这里对其功能不做进一步说明,低版本可以直接完美越狱,我们这里仅使用它来方便访问越狱文件以及安装a

2021-03-22 21:16:57 657

原创 iOS开发-NSThread子线程autoreleasepool的问题

前言对于 NSThread 开启的子线程,我们需要在 main 函数中创建一个autoreleasepool,当我们从其他线程跳转到该线程执行时,对象是如何释放的呢?主线程是由于runloop的循环,在beforeWait时,触发主线程的autoreleasepool的pop和push操作来释放的,而子线程并没有自动添加这些observer,那么如何释放的?探索跳转到我们线程执行任务的方法如下,使用了performSelector:系列的方法。OBJC_EXTERN void _objc_autor

2021-02-04 00:10:29 1317 1

原创 iOS - 关于对App跳转方法的hook

文章目录App的跳转方法hookApp的跳转方法实现app跳转有urlscheme以及universal Link(deep link) 跳转。url schemeapplication:openURL:options:是最新的方法,其他两个都废弃了- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id&gt

2020-12-04 17:57:04 982

原创 iOS开发-关于iOS13.4的UITextMultiTapRecognizer问题记录

UITextMultiTapRecognizer 在 iOS 13.4上,点击 UITextField 时,会由UITextMultiTapRecognizer 触发事件。通过 hook UIApplication的sendAction:to:from:forEvent:- (BOOL)growing_sendAction:(SEL)action to:(id)target from:(id)sender

2020-09-22 17:53:45 391

原创 iOS开发 - OCLint的自定义规则编写

文章目录通过Xcode显示Warning方案的选择简易Rule编写brew安装Aggregate 添加脚本规则编写通过Xcode显示Warning方案的选择前面已经说过如何添加自定义的规则rule以及Xcode调试:iOS开发 - OCLint自定义规则的编译与Xcode调试一般来说,我们都有这样的需求:想在写代码的时候,就能分析出代码问题,并及时进行修改。虽然OCLint能够分析单个文件,但没有Xcode插件,像 Analyze 这样的实时分析可能并不好实现,这里我们就选择编译一次然后在项目中提示

2020-07-20 17:40:52 1541

原创 iOS开发 - 创建自定义的brew仓库oclint-0.15

文章目录背景创建仓库brew create创建tap使用参考文档背景项目需要使用 oclint 0.15 版本,并添加一定的规则 rule ,这里oclint 0.13版本之后就没有再更新了,两个版本由于clang版本不同,不能共用,如果让每个人去拉包,然后替换,太繁琐了,这里创建一个brew库用于快速集成。在 Homebrew 的架构下,至少有 4 层概念Keg(酒桶):安装好的脚本、软件等;Cellar(酒窖):所有用 Homebrew 安装在本地的脚本、软件组成的集合;Formula(配

2020-07-16 13:00:42 529

原创 iOS开发 - NSUUID的重复概率问题

文章目录概述探索概述对于 [[NSUUID UUID] UUIDString] 产生的字符串有可能重复吗?概率是多少?code代码时是否需要考虑?探索根据 NSUUID的苹果官方说明 阐述:UUIDs (Universally Unique Identifiers), 也被称作 GUIDs (Globally Unique Identifiers) 或者 IIDs (Interface Identifiers), 是128位值. NSUUID创建的uuid符合RFC 4122 version 4,

2020-07-13 12:46:16 2492

原创 iOS开发 - NSHashTable与Runloop所造成的强引用问题

文章目录概述Runloop Observer的问题AutoreleasePool界面更新概述首先,我来描述一下这个问题,NSHashTable 是OC中用于弱引用对象的NSMutableSet 类型,在项目使用中,我们发现调用其 allObjects 方法会造成强引用关系,导致对象不会释放。具体情况如下:我们监听了主线程的 Runloop 并在 kCFRunLoopBeforeWaiting | kCFRunLoopExit 时触发,由于我们需要统计 UITableViewCell 的信息,所以我们将

2020-07-03 10:13:23 766

原创 iOS开发 - Runloop的mode是如何切换的

文章目录问题探索Runloop的mode是如何切换的mode切换时会退出吗?问题Runloop的mode是如何切换的?Runloop的mode切换时,上一个mode是需要退出吗?探索Runloop的mode是如何切换的UITableView滑动时,Runloop会进行切换mode,由kCFRunLoopDefaultMode切换为UITrackingRunLoopMode,根据源码,切换mode实际是调用CFRunLoopRunSpecific 这个函数SInt32 CFRunLoopRu

2020-07-01 15:12:13 1561

原创 iOS开发 - OCLint自定义规则的编译与Xcode调试

OCLint的编译基于版本 oclint version 0.15OCLint 需要自定义规则的话需要自己编译

2020-06-23 19:53:41 1909

原创 iOS开发-NSMapTable NSHashTable NSPointerArray的使用

文章目录NSMapTableNSDictionary的局限性NSMapTable优势配置参数 OptionsMemory OptionARC下MRC下Personality optionsUsage快捷生成自定义配置NSHashTableNSHashTable 优势配置参数UsageNSPointerArrayNSPointerArray 特性创建Usage对于工程中使用的弱引用集合的特性进行整理,有些点还是容易忘记NSMapTable NSHashTable NSPointerArray 是iOS中用

2020-06-18 15:18:16 1897

原创 iOS开发 - method swizzle方式的选择

文章目录1 method swizzle方式的选择1.1 错误的swizzle方式1.2 正确的swizzle方式1.3 案例1 method swizzle方式的选择1.1 错误的swizzle方式根据 right-way-to-swizzle 文章的阐述,当我们进行方法交换时,实质是交换了objc_method结构体中的IMP函数指针struct objc_method SEL method_name OBJC2_UNAVAILABLE; char *meth

2020-06-16 19:26:22 480

原创 RAC中宏的使用-预编译确定函数参数个数

RAC中宏的使用-预编译确定函数参数个数对于RAC框架中的宏定义,预编译期确认参数个数/** * Returns the number of arguments (up to twenty) provided to the macro. At * least one argument must be provided. * * Inspired by P99: http://p99.gforge.inria.fr */#define metamacro_argcount(...) \

2020-06-09 20:34:11 394

原创 iOS开发-Audio Unit错误之CrashIfClientProvidedBogusAudioBufferList

类似堆栈如下:* thread #10, name = 'AURemoteIO::IOThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x201862df8) * frame #0: 0x00000002276974e4 AudioToolbox`CrashIfClientProvidedBogusAudioBufferList + 64 frame #1: 0x00000002277ed378 AudioToolbox`Audio

2020-05-17 12:52:20 1316

原创 iOS开发-NSObject的alloc函数执行

文章目录前言流程callAllocallocWithZone对流程的影响_class_createInstanceFromZone方法init和new前言探索下alloc的方法执行流程debug来调试runtime源码,执行以下逻辑:NSObject *objc1 = [[NSObject alloc] init];id __weak objc2 = objc1;id __weak objc3 = objc2;流程callAlloc调用 callAlloc// Calls [cls a

2020-05-10 16:58:38 382

原创 iOS开发-FBRetainCycleDetector中的深度优先搜索DFS

文章目录图有向图图的实现方式遍历广度优先搜索 BFS深度优先搜索 DFSFBRetainCycleDetector的应用最近复习 FBRetainCycleDetector 源码的时候,需要的图的查询方法,深度优先搜索,这里记录下,便于系统复习。这里仅仅为分析FBRetainCycleDetector实现原理,采用深度优先搜索DFS图图由顶点(vertex)和边(edge)组成,通常表示为...

2020-05-01 12:06:38 538

原创 iOS开发-MLeaksFinder原理学习

文章目录内存泄漏原理MLeaksFinder 是WeRead团队开源的iOS内存泄漏检测工具,用于检测内存泄漏内存泄漏app内存有3中Leaked memory: 应用程序未引用的内存不能再次使用或释放(也可以使用Leaks仪器检测到)Abandoned memory: 应用程序仍然引用的内存没有任何用处Cached memory: 仍然被应用程序引用的内存,可以再次使用以...

2020-05-01 10:15:57 1707

原创 iOS开发-GCD技术

GCD是iOS开发中常用的线程技术

2020-04-29 23:33:06 908

原创 iOS开发-线程死锁

文章目录线程死锁互斥锁和自旋锁iOS的常见的锁线程死锁线程死锁的4个必要条件:互斥:一个资源每次只能被一个进程使用占有且等待:一个进程本身占有资源(一种或多种),同时还有资源未得到满足,正在等待其他进程释放该资源不可抢占:别人已经占有了某项资源,你不能因为自己也需要该资源,就去把别人的资源抢过来循环等待:存在一个进程链,使得每个进程都占有下一个进程所需的至少一种资源。进程和线程的...

2020-04-29 16:48:04 687

原创 iOS开发-weak引用以及sidetable表

文章目录__weaksidetable对象的释放__weakid obj = [[NSObject alloc] init];@autoreleasepool { id __weak obj1 = obj; NSLog(@"%@",obj1);}括号内的代码编译器会转化为:id obj1;objc_initWeak(&obj1,obj);id tmp = objc_l...

2020-04-28 23:28:18 2392

原创 iOS开发-class_ro_t和class_rw_t的区别

文章目录class_ro_tclass_rw_tclass_rw_t生成时机分类方法加载到class_rw_t的流程class_ro_tclass_ro_t存储了当前类在编译期就已经确定的属性、方法以及遵循的协议,里面是没有分类的方法的。那些运行时添加的方法将会存储在运行时生成的class_rw_t中。ro即表示read only,是无法进行修改的。struct class_ro_t {...

2020-04-27 23:26:57 5697

原创 iOS开发-一个 NSObject 对象占用多少内存空间

一个 NSObject 对象占用多少内存空间?在64位CPU中,NSObject 对象占用大小为16字节,其中8字节为指针大小,8字节为实例对象结构体所占大小。在32位CPU中,NSObject 对象占用大小为8字节,其中4字节为指针大小,4字节为实例对象结构体所占大小。可以参考唐巧的 深入理解Tagged Pointer故所以当4个字节就能表示的值,要用8个字节来存储时,就会很浪费内...

2020-04-27 20:52:31 1258

原创 日常学习-关于GSIMap结构

文章目录数据结构解析数据结构最近研究NSNotification源码碰上了一个GSIMap结构体,发现其结构很有意思,即* A rough picture is include below: * * * This is the map C - array of the buckets * +---------------+ ...

2020-04-27 00:31:25 421

原创 iOS开发-关于block块的实现

文章目录block的结构体没有引入变量的block引入变量的block引入常量引入block引入 __attribute__((NSObject)) 变量引入__block前缀变量访问__block的变量(声明范围内)访问__block的变量(block内)引入的__attribute__((NSObject)) __block 变量block 的释放block 嵌套Object-C扩展block...

2020-04-26 17:32:28 209

原创 iOS开发-NSNotification源码原理学习

文章目录问题1. 实现原理对于addObserver方法,为什么需要object参数?都传入null对象会怎么样addObserver源码逻辑2.通知的发送时同步的,还是异步的3. NSNotificationCenter接受消息和发送消息是在一个线程里吗?如何异步发送消息4.NSNotificationQueue和runloop的关系5.如何保证通知接收的线程在主线程6.多次添加同一个通知会是...

2020-04-25 18:13:28 1217 3

原创 iOS开发-airpods的音频event适配

文章目录单耳机拿下iOS 7.1 BeforeMPRemoteCommandCenter双耳机取下对于airpods的适配,主要适配其单耳机拿下pause,以及恢复和双耳机取下等情景的适配。单耳机拿下对于这些事件,airpods单耳机拿下属于pause事件Event,我们使用MediaPlayer框架。iOS 7.1 Before在iOS 7.1之前,系统提供了#import <...

2020-04-21 16:11:47 1304 1

原创 iOS开发-对多个对象进行消息转发

文章目录目的实现目的参考NSProxy的实现,那么我们需要通过对多个消息的转发如何做呢?如何存储对象,强引用集合对象已经不可取,会使得对象引用计数+1,所以可以采用OC中弱引用集合 NSPointerArray参考以下文章:http://www.isaced.com/post-235.htmlhttps://www.jianshu.com/p/9d1c34999f3e通过消...

2020-04-19 00:46:24 423

原创 iOS开发-KVO下的isa-swizzling

文章目录前言探索1. 引用问题2. KVO原理前言对于KVO技术,开发中使用较多,能够监听值的改变。探讨下KVO的技术实现,KVO接口如下:@interface NSObject(NSKeyValueObserverRegistration)/* Register or deregister as an observer of the value at a key path relat...

2020-04-18 15:48:54 343

原创 iOS开发-isKindOfClass和isMemberOfClass

文章目录前言源码前言isKindOfClass和isMemberOfClass多多少少都用过isKindOfClass 方法调用者是传入的类的实例对象,或者调用者是传入类的继承者链中的类的实例对象,则返回YES。isMemberOfClass:returns YES if the receiver is an instance of the specified class.方法调用者...

2020-04-18 12:25:17 321

原创 iOS开发-关于+load和+initialize

文章目录执行时机loadinitializemethod swizzle最近面试遇到这样的问题,一般来说我们会在+load和+initialize进行method swizzle,那么两个方法差异在哪里执行时机load+load方法是在main函数之前被调用,先调用类的+load,再调用分类的+load,且每个+load方法只执行一次。这里的只执行一次是值得是每个文件中执行一次,因为类要...

2020-04-18 11:17:25 437

原创 iOS开发-main函数之前app做了哪些事

文章目录main之前1.加载可执行文件(App 的`.o `文件的集合)2.加载动态链接库,进行 rebase 指针调整和 bind 符号绑定;3.Objc 运行时的初始处理,包括 Objc 相关类的注册、category 注册、selector 唯一性检查等;4.初始化,包括了执行 +load() 方法、attribute((constructor)) 修饰的函数的调用、创建 C++ 静态全局变...

2020-04-16 22:45:22 857

原创 iOS学习笔记-KVC技术

文章目录https://developer.apple.com/library/archive/documentation/General/Conceptual/DevPedia-CocoaCore/KeyValueCoding.htmlhttps://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Key...

2020-04-16 01:36:12 195

原创 日常学习-wiki文档的编写

文章目录文本内容标题链接图片文字高亮代码文字格式列表有序列表无序列表分割线表格下拉列表引用Side BarfooterUML图对于wiki文档的编写,这里将常用的都举例,不记得时就过来看看对于wiki语法我们一般选择 markdown,因为其功能最多,也是最常用的。这里都以markdown进行说明。文本内容标题这里当标题为title# title 一级标题## title 二级级标...

2020-04-13 20:48:12 6860 1

原创 音视频开发-RTP协议

文章目录RTP/RTCPRTP协议RTCP 协议附图基于WebRTC的音视频直播框架,使用RTP/RTCP,这里记录下。RTP/RTCP一般情况下,在实时互动直播系统传输音视频数据流时,我们并不直接将音视频数据流交给 UDP 传输,而是先给音视频数据加个RTP 头,然后再交给 UDP 进行传输。为什么要这样做呢?以太网的 MTU 最大传输单元 为 1500字节 约为1.5K,意味着传输一个...

2020-04-11 20:39:38 747

原创 iOS开发-如何解决静态库的冲突问题

文章目录问题静态库Fat文件thin文件.a文件的构成解包将.o合并为.aduplicate问题各个架构的支持问题iOS中进入静态库经常会出现 dulipcate symbols 的问题。分享下我的处理以及经验。静态库在 iOS 中静态库有.a和framework文件。下面讲解如何对静态库解包和处理冲突的问题。Fat文件首先需要了解的是,一般来说我们拿到的静态库都是Fat文件,我们都...

2020-04-08 12:44:45 1784 1

原创 iOS开发-dispatch_once相关

文章目录使用场景原理关于dispatch_compiler_barrier性能测试使用场景dispatch_once 能够保证代码块只执行一次,即使在多线程使用时。一般来说我们如果要保证代码只执行一次,就是进行加锁,通过修改一个变量值0 -> 1 来判断这段代码是否执行过。在iOS中dispatch_once经常被用来创造单例对象,或者进行方法交换swizzle method例如 ...

2020-04-07 20:58:45 772

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除