自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

TuGeLe的博客

开放协作 追求卓越 知行合一 不忘初心

原创 iOS UIGestureRecognizer与原生响应机制处理流程分析

之前在组内分享的时候,曾提到过在iOS事件响应机制中,当原生触摸事件与手势搭配时,相关方法的调用顺序。之前是将手势也理解至响应者链中,后来发现理解有误,所以在此进行一些总结。 UIGestureRecognizer与原生触摸事件均为处理用户点击事件,所以两者必然存在着紧密关联,所以在探究UIGes...

2020-02-19 17:58:20

阅读数 13

评论数 0

原创 深入了解iOS中的OOM(低内存崩溃)

在iOS开发过程或者用户反馈中,可能会经常看到这样的情况,用着用着就崩溃了,而在后台查看崩溃栈的时候,找不到崩溃日志。其实这大多数的可能是系统产生了低内存崩溃,也就是OOM(还有一种可能是主线程卡死,导致watchdog杀掉了应用),而低内存崩溃的日志,往往都是以JetsamEvent开头的,日志...

2020-01-16 14:48:55

阅读数 196

评论数 0

原创 iOS weak关键字实现原理

在iOS中,使用weak关键字能够对内存对象进行弱引用,基于这个特性,使用weak关键字能够解决许多问题,例如delegate中对象的循环持有问题、Block对对象的强引用导致的对象无法及时释放问题。 为何weak关键字能够实现对内存对象的弱引用,今天我们就来探究一下。 首先在分析weak关键字实...

2020-01-07 20:41:09

阅读数 15

评论数 0

原创 非越狱砸壳方式总结及坑

一、引言 大家都知道,在进行非越狱开发的过程中,需要对第三方应用的包进行重签名,并向MachO文件实行相关自定义库的注入操作,而这些都离不开需要对原始的二进制进行砸壳,原因是AppStore上的应用在开发者提交上去的时候都进行了加密。 虽然对于版本要求不高的应用可以通过PP助手直接下载已经砸壳的应...

2019-12-24 18:39:03

阅读数 84

评论数 0

原创 几种Cocoa开发中的IPC方案

​ iOS系统相对于Android系统来说非常的封闭,每个应用的活动范围被严格地限制在各自的沙盒中,也许这是为了保证系统的安全性,避免恶意的应用去偷取其他应用的隐私信息。不过这同时也就阻碍了系统中应用之间或者与Extension间某些必要的跨进程通信。 ​ Unix系统提供很多进程间通信的渠道,比...

2019-12-24 17:53:06

阅读数 28

评论数 0

原创 iOS CALayer动画原理分析

一、引出问题 在开始分析原理之前,我们先来看一个问题: 我们都知道 UIView与 CALayer之间的关系,通俗的来说,UIView内部封装了一个 CALayer, 其中 CALayer负责展示UI,而 UIView负责处理交互事件。 其中 UIView的所有UI信息都会对应到 CALayer上...

2019-12-05 20:49:06

阅读数 36

评论数 0

原创 iOS代码混淆初探

iOS代码混淆初探 在没有对应用的代码做过特殊处理的情况下,一般应用的代码中的类名和方法都是明文的。在逆向分析中,通过class-dump获取MachO可执行文件中的所有类、定义的方法和属性,就能很快的从名字入手猜到这个方法是做什么用的,所以类名和方法名的混淆就特别重要了。 方法一:运用宏定义的方...

2019-09-18 11:38:55

阅读数 109

评论数 0

原创 应用的构建过程与签名

应用的构建过程与签名 一、引言 在逆向开发的过程中,一些常用逆向工具和逆向分析的技巧已经被我们所熟知和运用,但其中所用到的理论基础往往容易被忽略。理论基础的储备能够拓宽逆向分析的思路,并在遇到问题时很快的找到原因和应对的方法,从而使得逆向开发的过程变得轻松。下面从基础的包结构、包构建以及包安装进行...

2019-09-18 11:30:24

阅读数 22

评论数 0

翻译 Cocoa编码规范

介绍Cocoa编码规范 开发一个Cocoa framework,插件或者其他具有公开API的可执行文件时,需要采取与那些应用开发不同的方法和约定。你产品的初始客户端是开发者,非常重要的一点就是不要让他们为你的编程接口感到困惑。以下便是API的命名约定,能够帮助你让你的接口保持一致和清晰,这些对于你...

2019-03-18 20:25:13

阅读数 99

评论数 0

翻译 WWDC2018 session 225

一、引言 Session 225 《A Tour of UICollectionView》从三方面来对 UICollectionView进行讨论,分别是 Layouts、 Updates以及 Animations。 在正式开始讨论之前,先了解一下 UICollectionView的三个重要概念: ...

2019-03-11 17:29:33

阅读数 48

评论数 0

原创 synchronized实现原理及缺陷分析

@synchronized是 Objective-C中提供的一个用来快速加锁操作的关键字,该篇文章就深度分析一下该关键字的实现原理,并从中找出一些使用中的注意实现以及使用缺陷。 一、使用方式 @synchronized关键字的使用十分简单,如下: - (void)testSynchronized ...

2019-03-11 17:28:22

阅读数 138

评论数 0

翻译 在Xcode中更快构建项目(WWDC 2018 session 408)

WWDC 2018 session 408: ++Building Faster in Xcode++ 引言 这个session主要讲的是如何在Xcode中构建的更快。基于不同的项目本身的配置及复杂性,有很多机会可以让您对其进行改造。在某些情况下,可以显著的提高您的构建内容的运行情况。接下来会从...

2019-03-06 16:58:04

阅读数 118

评论数 0

原创 NSTimer精准度及影响因素分析

项目中经常会遇到需要定时循环执行某些方法的场景,例如发送短信倒计时需求,此时NSTimer就派上用场了,关于NSTimer的用法在此就不做多的解释,这里要讨论的是NSTimer真的可以准确完成定时触发的功能吗? 一、NSTimer是否是精准的? 首先我们先看一下苹果官方对于NSTimer的定义: ...

2019-03-04 21:02:27

阅读数 139

评论数 0

翻译 WWDC2018 session 221

该篇博客记录了观看WWDC Session201《TextKit Best Practices》的内容以及一些理解。 一、关键概念(Key concepts) 1. TextKit框架组成 TextKit框架无需导入,因为UIKit和AppKit中所有文本控件都是建立在TextKit之上的。 Te...

2019-01-25 21:28:24

阅读数 174

评论数 0

原创 +initialize方法的调用时机

+initialize方法的调用时机 一个类或者它的子类收到第一条消息(手写代码调用,+load方法不算)之前调用,可以做一些初始化的工作。但该类的+initialize的方法调用,在其父类之后。 Runtime运行时以线程安全的方式将+initialize消息发送给类。也就是说,当一个类首次...

2019-01-23 16:04:44

阅读数 348

评论数 0

原创 +load方法的执行顺序你了解么?

可能+load方法应该是每个iOS开发同学都非常熟悉的方法,而且面试中+load方法相关的面试提也是非常常见,但你了解的+load方法真的跟实际上的一样么? 看文章之前先思考几个问题 +load方法在什么时候? +load方法是如何执行的? 一个类的+load方法会执行几次? 类和分类的+l...

2019-01-22 18:16:55

阅读数 551

评论数 0

原创 ffmpeg减少编译包体积技巧

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 其实ffmpeg只是对该框架的通俗称呼,该框架本质上为libav,ffmpeg也只是基于libav开发的一套工具。 libav框架可以编译在其他平台进行使用,在下载的源码中,包含有configure程序来进行编...

2019-01-17 20:37:19

阅读数 723

评论数 0

原创 合成GIF时的透明处理与优化

在与图片相关的开发中难免会遇到gif的处理,由于gif这种格式的局限性,可能合成的gif文件和自己预想的出现明显差别。在我们的项目中就曾长期受到,透明图片合成gif后,透明位置变成黑色的问题困扰,我们就将bitmap添加一个白色的不透明背景,但是显而易见,这不是根本上解决问题的方法。

2018-12-26 22:13:35

阅读数 661

评论数 0

原创 WebDriverAgent自动化框架

WebDriverAgent是适用于iOS 的WebDriver服务器实现;它允许启动和终止应用程序,点击和滚动视图或确认屏幕上的视图状态。这使其成为应用端到端测试或通用设备自动化的完美工具。它通过链接XCTest.framework和调用Apple的API来直接在设备上执行命令。 安装配置W...

2018-12-19 04:44:42

阅读数 1703

评论数 1

原创 Runloop机制解析及应用

- Runloop学习背景 在调研卡顿监控的过程中,接触到了Runloop机制及其用法,其中一种方案是通过监听每次Runloop循环的时间来判断是否出现时间的阻塞,并同时dump出正在执行的调用栈来定位执行时间较长的函数,进一步进行优化。同时还有通过开启另外的线程给主线程发送消息,看主线程Run...

2018-12-19 04:43:40

阅读数 117

评论数 0

原创 [CocoaPods]podspec文件中的resource和resource_bundle

相信基本上所有的iOS开发同学针对于CocoaPods都不陌生。即便没有用过,也是久闻大名如雷贯耳。作为Objective-C和Swift中非常流行的依赖管理工具,它拥有超过10000个公有程序库,通过一份Podfile文件和pod install命令就能帮助开发者方便的管理工程依赖。 随着组件化...

2018-12-17 14:49:20

阅读数 2257

评论数 1

原创 iOS易引起内存泄漏原因总结

最近通过Analyze及Leaks等工具对项目进行了内存泄漏问题的检测及修改,现对遇到的易造成内存泄漏的问题进行一些总结,每点中都列举了会造成内存泄漏的代码书写方式,并对其原因进行分析,最后给出了相关的解决方案。 接下来就开始进行总结: 一、 循环引用 循环引用是在iOS可能引起内存泄漏的主要原因...

2018-12-10 21:06:11

阅读数 456

评论数 0

原创 探究Xcode New Build System对于构建速度的提升

在Xcode9发布的时候,Apple在Build System上提供了新版本的构建系统(New Build System),具体可见WWDC2017,不过令人失望的是,该新特性的讲解很简短,短到只在一页PPT上露脸,在这短短的时间里,苹果讲述了该构建系统的优点:降低构建开销,尤其可以降低大型项目的...

2018-12-07 18:35:03

阅读数 2489

评论数 1

原创 iOS中mmap的应用

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,wr...

2018-11-26 20:55:51

阅读数 573

评论数 0

原创 Android程序架构优化

最近一段时间,看到了一些Android项目组件化相关的文章,同时,因工作需要对Java Spring框架进行了初步的学习,他贯穿整个应用系统的面向接口编程思想来解决业务逻辑和其他各层的松耦合问题的方案让我感受颇深,尤其是其通过控制反转(IoC)技术促进低耦合,面向切面的编程思想等,使程序员能够编写...

2018-10-31 10:11:59

阅读数 488

评论数 1

原创 OCLint从安装到使用

OCLint是什么,引用官方对于OCLint的介绍:OCLint is a static code analysis tool for improving quality and reducing defects by inspecting C, C++ and Objective-C code ...

2018-10-24 20:01:50

阅读数 520

评论数 0

原创 利用CocoaPods创建基于SVN的私有库

CocoaPods简介 CocoaPods是专门为iOS工程提供第三方依赖库的管理工具,通过CocoaPods,我们可以更方便的管理每个第三方库的版本,而且不需要我们做太多的配置,就可以直观、集成和自动化的管理我们项目中使用的第三方库。 CocoaPods将所有依赖的库都放在一个名为Pod的项...

2018-10-18 19:28:47

阅读数 255

评论数 0

原创 动态调试及LLDB技巧集合

学习背景:在非越狱逆向开发的过程中,我们可以从界面(Reveal)、类与方法(class-dump)、或者网络(Charles)等方面及一个应用的功能点入手去寻找一些需要实现功能的入口线索。但是在未知源代码的情况下,想要精确定位一个功能点的实现位置及实现原理,就需要结合静态分析和动态调试来分析程...

2018-09-29 14:10:51

阅读数 1382

评论数 1

原创 函数式编程初探引发的思考

在了解Spring 4.X时,作者提到Spring 4.X全面支持Java 8.0的Lambda表达式。开始初步了解函数式编程,说到其是一种编程范式,由此而联想到语言及程序设计思想,他们之间的区别和关系是什么,特此做了以下梳理。 一、什么是编程范式 所谓编程范式,指的是计算机编程的基本风格或典范模...

2018-09-25 12:30:50

阅读数 93

评论数 0

原创 探究Objective-C中关联对象原理

一、实际问题 1.提出问题 首先,一切都要从一个问题开始:在Objective-C中,能否在Category中为类添加属性及对应的实例变量? 该题的答案是:不能。 2.分析解答 为什么不能通过Category来为Objective-C的类添加属性及对应的实例变量呢?原因在于在编译完成之后,类的内存...

2018-09-20 18:00:27

阅读数 156

评论数 0

翻译 WWDC2018 session 220

High Performance Auto Layout 本视频主要是介绍了在使用Auto Layout中的一些注意事项,以及Auto Layout的原理,和iOS 12中对Auto Layout性能的优化。 Auto Layout原理 Auto Layout需要依赖一个个的约束,最终UIV...

2018-09-17 20:41:01

阅读数 121

评论数 0

原创 在Cocoa框架中使用Swift的一些注意事项

虽然说Swift是作为一种全新的语言被推出的,但是不可避免的需要借助于Apple生态来对它进行推广,在推广的过程中,就不可避免的需要被使用在Cocoa设计模式中,所以我们今天来总结一下当Swift被使用在Cocoa设计模式中时需要注意的一些事项。 在我们开始讨论之前,我们先来了解一下Swift与...

2018-09-13 19:39:26

阅读数 276

评论数 0

翻译 WWDC2018 session 202

What’s New in Cocoa Touch 该文档主要是了解下Cocoa Touch的一些新特性。主要包括三部分,Framework updates、API enhancements、Siri shortcuts,下面针对这三部分逐一介绍。 Framework Updates F...

2018-09-10 17:44:04

阅读数 204

评论数 0

原创 iOS导航栏自定义按钮响应区域优化

iOS 11中,系统重构了导航栏,UINavigationBar的层次结构发生了变化,同时影响了按钮UINavigationItem的布局位置以及响应区域。而针对于不同的系统,我们很多时候可能都需要做导航栏按钮的响应区域的优化。 本文会针对两个case来做导航栏响应区域的优化。 case ...

2018-09-05 15:50:26

阅读数 1365

评论数 4

原创 RxJava解析

RxJava解析 RxJava的核心思想是通过链式调用使得异步代码调用变得简洁方便。看了网上其他一些介绍RxJava调用的文章时,对其使用和实现原理还是理解不到位,最后通过分析源码的调用弄明白了链式调用和线程切换的实现方式。本文章的内容分为三个部分: 一、基本的调用方式 二、链式调用 三、...

2018-08-31 16:16:22

阅读数 137

评论数 0

原创 非越狱逆向开发总结文档(含iOS Extension)

在经过越狱开发之后,我开始了接触非越狱开发。 相比之下,他们之间有很多相似点:比如都是通过砸壳以后的IPA包去dump头文件来进行分析,分析代码逻辑之后去hook对我们有用的类做一些自己的事情,封装成动态库后注入到包内的二进制Mach-O文件中,在程序dyld的时候加载到程序的内存中运...

2018-08-20 23:32:29

阅读数 497

评论数 0

原创 颜色量子化(K-Means聚合算法以及八叉树的运用)

颜色量子化,又可以理解为图像主要颜色提取或者由图像生成调色板。归根结底,就是对一组颜色进行筛选处理,进而选择出其中具有代表性的N个颜色。 下面我们从两个应用场景来对该主题进行讲述: 一、图像主要颜色提取 假设场景 现在假设一种场景:从一张图片中提取n个主要颜色。 该场景下颜色的量子化...

2018-08-16 17:27:46

阅读数 983

评论数 0

原创 iOS app main方法之后做的操作

在iOS开发中,我们都知道,程序的入口是main()函数,位于main.m中。通常情况下,main()函数中的代码是不需要修改的。那么,main()函数中做了哪些操作呢? main函数的实现 在Xcode中新建一个工程之后,Xcode会自动的帮我们生成main.m以及main()函数,ma...

2018-08-12 20:42:21

阅读数 483

评论数 0

原创 dyld在app启动过程中的作用

在前面的文章中介绍过,app启动过程中,首先是操作系统内核进行一些处理,比如新建进程,分配内存等。在iOS/Mac OS系统中,操作系统内核是XNU。在XNU完成相关的工作后,会将控制权交给dyld。dyld,即动态链接器,用于加载动态库。dyld是运行在用户态的,从XNU到dyld,完成了一次内...

2018-08-12 19:39:58

阅读数 1194

评论数 0

原创 XNU加载Mach-O和dyld

我们知道,操作系统是电脑、手机上最基本的软件,任何其他的软件都必须在操作系统的支持下才能够运行。同理,软件的启动也必须在操作系统的支持下才能够运行。对于iOS系统来说,操作系统内核是XNU(X is not Unix),那么在一个app的启动过程中,XNU发挥了什么作用呢?本篇文章,我们来探究一下...

2018-08-09 21:11:29

阅读数 392

评论数 0

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