-
iOS客户端图片处理组件技术方案
背景原有的CDN功能支持用法比较复杂,尤其多个功能组合(例如:Resize+Corner)时,会造成代码逻辑比较复杂,各个业务无法复用,相同逻辑有大量重复代码。业务方在使用API是对传入的ptsize大小不知所措,不同机型对应的ptsize大小固定,不能很好地展示图片内容。技术分析在收集完业务方的各个痛点之后,我主要对以下几点进行优化:1、图片处理统一放到组件内部,对服务端处理过的图片Url进行还原2、组件内部对象初始化懒加载,保证不同Url只初始化一次3、简化api接口,采用链式调用,不...…
-
RxSwift底层原理及结合MVVM架构在项目中的应用
RxSwift 是 ReactiveX 家族的重要一员, ReactiveX 是 Reactive Extensions 的缩写,一般简写为 Rx。ReactiveX 官方给Rx的定义是:Rx是一个使用可观察数据流进行异步编程的编程接口。RxSwift 是 Rx 为 Swift 语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action / 代理 / 闭包 / 通知 / KVO,同时还提供网络、数据绑定、UI事件处理、UI的展示和更新、多线程……RxSwift:...…
-
Masonry
Masonry 实现原理及链式调用分析 Masonry is a light-weight layout framework which wraps AutoLayout with a nicer syntax. Masonry has its own layout DSL which provides a chainable way of describing your NSLayoutConstraints which results in layout code that is m...…
-
iOS模仿系统相机拍照你不曾注意过的细节
距离上次写博客竟然过了一个月了,一方面是最近项目比较忙,另一方面是实在是有点儿懈怠了,强烈谴责一下自己。其实我最近在看一些技术书籍,发现一些好的书真心对自己帮助很大,看书的过程,好多原来模糊的概念、问题,都能感觉恍然大悟。当提笔想总结成一篇文章的时候,发现网上早已经有大量的优秀文章出现,所以就不敢献丑了。今天写的一篇文章,是最近自己项目中用到的,不算什么难点,只是感觉有必要记录一下。需求由于我们APP集成了有道翻译的SDK,需要将拍出来的图片翻译成对应的语言,但是有道的SDK目前还做的...…
-
iOS逆向-ipa包重签名及非越狱手机安装多个微信
前一段时间学了点儿逆向相关的一些东西,但是都是基于越狱手机上的操作,给视频类应用去广告之类的。随着苹果生态圈的逐渐完善、及苹果对自身系统的保护越来越严格,导致现在的iPhone手机并不像以前那样存在大量的越狱用户。前段时间我自己申请了个微信小号,申请小号的目的就是原来微信号好友中乱七八糟的人实在太多,感觉自己的朋友圈都是一些无关紧要的垃圾信息,曾经关闭了一段时间的朋友圈,但是最近遇到了好多技术上很强的同行,还想了解大佬们的动态。于是我就想着申请了个小号,但是麻烦来了,iPhone手机并...…
-
KVO详解及底层实现
什么是KVO??KVO就是NSKeyValueObserving,请看官方文档的解释:大概翻译如下:一种非正式协议,通知其他对象的指定属性发生了改变。简单理解就是,可以监听一个对象的某个属性是否发生改变。那么问题来了,什么是非正式协议??有正式协议吗??麻蛋,本来想找官方文档的,找了半天没找到。从Stackoverflow找到了答案,貌似原来官方文档的链接失效了大概翻译如下:非正式协议:非正式协议是NSObject的一个类别Category,几乎所有的对象都隐含的采用(类别是OC的语言特性...…
-
数据安全及各种加密算法对比
平时开发中不仅会遇到各种需要保护用户隐私的情况,而且还有可能需要对公司核心数据进行保护,这时候加密隐私数据就成为了必要。然而市场上存在着各种各样的抓包工具及解密算法,甚至一些公司有专门的逆向部门,这就加大了数据安全的风险,本文将通过以下几个方面对各种加密算法进行分析对比: Base64编码(基础) 单项散列函数 MD5、SHA1、SHA256、SHA512等 消息认证码 HMAC-MD5、HMAC-SHA1 对称加密 DES ...…
-
使用Cocoapods创建私有库
五一之后,公司要求对代码进行整理,同时进行代码管理、自动化打包等标准化流程,这些东西一直是我想搞的,这次有了公司的支持,操作起来也更顺利了,代码管理、自动化打包会找时间写一篇博客,这次主要记录利用Cocoapods将多个项目中共用的代码抽离出私有库,方便其他项目的引用,也算是组件化的第一步吧。抽离出私有库的时候,参考了很多的博客,遇到了很多的问题,主要参考了这篇博客。为什么要进行代码抽离很多公司不止有一个产品,当项目达到两个及以上的时候,就需要考虑代码的共用(理想情况下)。由于我们公司...…
-
fastlane实现自动化打包
正常产品开发完成之后,我们都需要给测试人员打包,又是测试包,又是生产包的,打一次包需要浪费十几分钟的时间,甚至有时候,你刚打完包,产品过来告诉你某个地方需要微调一下(麻蛋,这个时候是不是想弄死他),但是没办法,只好改完bug,继续打包,就这样可能一上午或者一下午就这样浪费了,所以有一个能够自动化打包的工具不仅能够为我们节省大量的时间,还可以让我们能够装逼。。。。。(这是重点)其实自动化打包的工具有很多,比较流行的有Jenkins和fastlane,原来尝试过Jenkins,感觉这个工具...…
-
Quartz2D实战-画板工具
一直想让自己每天都能进步,但是学习这个事情一直都无法坚持,只有自己感觉到了紧迫感,才会敲起代码,研究自己以前没接触过的知识,写博客的目的就是希望能够和更多的朋友一起讨论,促进交流,共同进步!!!什么是Quartz2DQuartz2D的API是纯C语言的,它是一个二维绘图引擎,同时支持iOS和Mac系统。Quartz2D的API来自于Core Graphics框架,数据类型和函数基本都以CG作为前缀:CGContextRef、CGPathRef等。实际开发中UIKit框架能够帮我们完成大...…
-
(4)OC中消息和消息转发-02
上篇文章讲到,如果通过_class_resolveInstanceMethod和- (id)forwardingTargetForSelector:(SEL)aSelector还是没找到IMP,也就是方法的实现,那我们只能手动添加方法的实现,也就是上篇文章提到的regular forwarding或者Normal Forwarding:我们先看一下方法的调用过程都执行了哪些方法?首先我们把方法实现注释掉。首先在方法调用的地方打一个断点,然后在控制台执行call (void)instrume...…
-
(3)OC中消息和消息转发-01
前一段时间有朋友问了下面的这个问题,我给出的回答是这样的:其实上面回答的方法调用也都是基于以前对runtime的理解,和自己试验出来的结果,但是,回答完这个问题之后,抱着探究到底的精神(其实是这几天产品没提什么需求,有点儿闲),问了自己一个问题:你怎么知道是底层调用的是这几个方法??。。。又是一番查资料,验证问题。。。下面正式开始分析: 首先新建一个Person类,代码如下:Person.h#import <Foundation/Foundation.h>@interface...…
-
(2)NSNumber及Tagged Pointer
根据上一篇文章的总结,我们很容易发现@interface Student : NSObject{ @public int _age; int _no;}一个Student对象在64位架构下占了16个字节,其中isa占8个字节,两个int变量分别占了4个字节,但是这种方式适合所有OC对象吗??哈哈,并不是。。。今天早上有朋友问NSNumber为啥占用8个字节(64bit),请看NSNumber头文件,发现如下代码:@property (readonly) char char...…
-
(1)Objective-C的本质
众说周知,我们平时编写的OC代码,底层都是C/C++实现的我们可以通过一个终端指令,将我们的OC代码转换成C/C++代码xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc 文件名 -o 输出的CPP文件例如:xcrun -sdk iphoneos clang -arch arm64 -rewrite-objc main.m -o main.cpp思考一:OC的对象、类都是基于C/C++什么数据结构实现的??首先看下面代码:#import ...…
-
(7)theos安装
安装签名工具ldid 先确保安装了brew$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 利用brew安装ldid$ brew install ldid修改环境变量 编辑用户的配置文件$ vim ~/.bash_profile 在.bash_profile文件后面加入以下2行export THEOS=~/theosexport P...…
-
(6)脱壳
加壳 什么是加壳? 利用特殊的算法,对可执行文件的编码进行改变(比如压缩、加密),以达到保护程序代码的目的 脱壳 什么是脱壳? 摘掉壳程序,将未加密的可执行文件还原出来(有些人也称为“砸壳”) 脱壳主要有2种方法:硬脱壳、动态脱壳iOS中的脱壳工具 iOS中有很多好用的脱壳工具 Clutch:https://github.com/KJCracks/Clutch dumpdecrypted:http...…
-
(4)Reveal真机调试
Reveal是一款调试iOS程序UI界面的神器 官网:https://revealapp.com 下载:https://revealapp.com/download/ 建议下载至少Reveal4版本,支持USB连接调试,速度快。低版本的只能WiFi连接调试调试环境配置 iPhone上安装Reveal Loader 安装完Reveal Loader后,打开【设置】,选择需要调试的APP找到Mac的Reveal中的RevealServer文件,覆盖iPhone的/Library/RH...…
-
(5)初识Mach-O
APP从开发到安装到手机的过程1 MJRefreshExample.app中的MJRefreshExample文件是iOS中的可执行文件,文件格式是Mach-OAPP从开发到安装到手机的过程2逆向APP的思路 界面分析 Cycript、Reveal 代码分析 对Mach-O文件的静态分析 MachOView、class-dump、Hopper Disassembler、ida等 动态调试 对运行...…
-
(3)Cycript
什么是CycriptCycript是Objective-C++、ES6(JavaScript)、Java等语法的混合物 可以用来探索、修改、调试正在运行的Mac\iOS APP 官网: http://www.cycript.org/ 文档: http://www.cycript.org/manual/ 通过Cydia安装Cycript,即可在iPhone上调试运行中的APPCycript的开启和关闭 开启 cycript cycript -p 进程ID...…
-
(2)逆向环境搭建
Mac远程登录到iPhone 我们经常在Mac的终端上,通过敲一些命令行来完成一些操作 iOS和Mac OS X都是基于Darwin(苹果的一个基于Unix的开源系统内核),所以iOS中同样支持终端的命令行操作 在逆向工程中,我们经常会通过命令行来操纵iPhone 为了能够让Mac终端中的命令行能作用在iPhone上,我们得让Mac和iPhone建立连接 通过Mac远程登录到iPhone的方式建立连接SSH、OpenSSH SSH Secure Shell的缩...…