3 TuGeLe

尚未进行身份认证

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

等级
TA的排名 3w+

使用配置文件的apk安装编译分析

众所周知JVM执行的是.class字节码,而Android的Dalvik或ART是不能直接运行.class文件,运行的是编译生成的dex文件,并且不同版本的Android在运行时对dex的编译策略也存在着变化。在Android4.4之前Android虚拟机是Dalvik,在Android2.2到Android4.4时期,其执行的时候采用的是JIT编译,当App运行时,每当遇到一个新类,JIT编译器...

2020-02-27 07:05:46

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

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

2020-02-19 17:58:20

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

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

2020-01-16 14:48:55

iOS weak关键字实现原理

在iOS中,使用weak关键字能够对内存对象进行弱引用,基于这个特性,使用weak关键字能够解决许多问题,例如delegate中对象的循环持有问题、Block对对象的强引用导致的对象无法及时释放问题。为何weak关键字能够实现对内存对象的弱引用,今天我们就来探究一下。首先在分析weak关键字实现原理之前,先介绍一下相关的数据结构,这些数据结构其中一部分可能在其他地方有所提及,但本文只列出与we...

2020-01-07 20:41:09

非越狱砸壳方式总结及坑

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

2019-12-24 18:39:03

几种Cocoa开发中的IPC方案

​ iOS系统相对于Android系统来说非常的封闭,每个应用的活动范围被严格地限制在各自的沙盒中,也许这是为了保证系统的安全性,避免恶意的应用去偷取其他应用的隐私信息。不过这同时也就阻碍了系统中应用之间或者与Extension间某些必要的跨进程通信。​ Unix系统提供很多进程间通信的渠道,比如pipe、FIFO、共享内存、消息队列、信号等方式,但是iOS非越狱系统都对这些层级的API加了权限...

2019-12-24 17:53:06

iOS CALayer动画原理分析

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

2019-12-05 20:49:06

iOS代码混淆初探

iOS代码混淆初探在没有对应用的代码做过特殊处理的情况下,一般应用的代码中的类名和方法都是明文的。在逆向分析中,通过class-dump获取MachO可执行文件中的所有类、定义的方法和属性,就能很快的从名字入手猜到这个方法是做什么用的,所以类名和方法名的混淆就特别重要了。方法一:运用宏定义的方式进行混淆这是一种比较简单又方便的做法,我们只需要在release打包时将现有工程里面的类名和方法名...

2019-09-18 11:35:55

应用的构建过程与签名

应用的构建过程与签名一、引言在逆向开发的过程中,一些常用逆向工具和逆向分析的技巧已经被我们所熟知和运用,但其中所用到的理论基础往往容易被忽略。理论基础的储备能够拓宽逆向分析的思路,并在遇到问题时很快的找到原因和应对的方法,从而使得逆向开发的过程变得轻松。下面从基础的包结构、包构建以及包安装进行解读。二、应用包的格式苹果的应用包主要是ipa格式的,其本身就是zip的压缩包,右键“归档实用工具...

2019-09-18 11:29:11

Cocoa编码规范

介绍Cocoa编码规范开发一个Cocoa framework,插件或者其他具有公开API的可执行文件时,需要采取与那些应用开发不同的方法和约定。你产品的初始客户端是开发者,非常重要的一点就是不要让他们为你的编程接口感到困惑。以下便是API的命名约定,能够帮助你让你的接口保持一致和清晰,这些对于你来说,迟早排得上用场。同样还有比较特殊的针对更重要的与框架有关的编程技术,例如,版本标注、二进制兼容性...

2019-03-18 20:25:13

WWDC2018 session 225

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

2019-03-11 17:29:33

synchronized实现原理及缺陷分析

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

2019-03-11 17:28:22

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

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

2019-03-06 16:58:04

NSTimer精准度及影响因素分析

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

2019-03-04 21:02:27

WWDC2018 session 221

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

2019-01-25 21:28:24

+initialize方法的调用时机

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

2019-01-23 16:04:44

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

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

2019-01-22 18:16:55

ffmpeg减少编译包体积技巧

ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。其实ffmpeg只是对该框架的通俗称呼,该框架本质上为libav,ffmpeg也只是基于libav开发的一套工具。libav框架可以编译在其他平台进行使用,在下载的源码中,包含有configure程序来进行编译工作,但是单纯的运行该程序进行编译,编译生成的包体积是非常大的,所以我们需要进行一些配置来减小编译包...

2019-01-17 20:37:19

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

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

2018-12-26 22:13:35

WebDriverAgent自动化框架

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

2018-12-19 04:44:42

查看更多

勋章 我的勋章
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。