-
设备信息
目录 获取手机设备信息:https://www.cnblogs.com/gongyuhonglou/p/11133866.html iOS 设备型号(包括iPhone XS、XR):https://www.jianshu.com/p/1c13ac174b2f 行者常至,为者常成!…
-
指纹登录
参考文章:iOS指纹/密码鉴定 参考文章:iOS 指纹登录(TouchID)集成方案目录 TouchId与FaceId 指纹登录TouchId与FaceIdTouchId与FaceId苹果做了整合,共用一套API接口,使用起来也很方便,主要有两种安全策略LAPolicyDeviceOwnerAuthenticationWithBiometricsLAPolicyDeviceOwnerAuthentication具体的说明,就不再赘述,看文章开头的两篇参考文章,说的很详细。下面贴出...…
-
iOS重签名与防重签
目录 重签名 防重签有了前两篇 iOS签名原理、 iOS签名与验签逻辑 的理论与实践介绍,我们来看看如何对一个APP进行重签名和防止重签名。重签名一、指令实现当我们拿到一个xxx.ipa包,想要在未授权的设备上安装或者修改包内容后在设备上安装时,这时会因为验签失败导致无法安装,这时我们就需要对这个包解压得到xxx.app然后进行重签名。要对一个APP签名需要三个东西:Code Signing Entitlements:yyy.entitlements文件,提供APP的权限Cod...…
-
iOS签名与验签逻辑
参考文章:代码签名探析 参考文章:iOS代码签名及授权文件目录 签名逻辑 xcode签名配置 验签逻辑签名逻辑iOS的签名需要用到两对儿公私钥,一对儿由苹果公司提供,公钥内置在iPhone设备内,私钥在苹果后台。另一对儿由开发者提供,公钥最终会被签名成证书,私钥存储在开发者的Mac电脑内,通过xcode编译APP时会对APP进行签名,安装到手机时会进行验签,从而达到对安装包的管控。 详细内容请参阅上篇博客iOS签名原理当我们的项目编译完成后,在Products文件夹内会看到...…
-
iOS签名原理
参考文章:iOS App签名的原理 参考文章:OpenSSL与公钥私钥证书签名的千丝万缕目录 目的 最简单的实现 新的需求 加点东西 最终流程 上面的步骤对应我们平时具体操作和概念是这样的 我们平时的操作iOS的签名机制很复杂,各种证书,Provision Profile,entitlements,CertificateSigningRequest,p12,AppID,这篇文章从概念出发,一步一步推出为什么会有这么多概念,希望能有助于理解iOS的App签名的原理。 目的...…
-
background modes
参考文章:ios background modes 参考文章:后台模式 background modes目录 运行状态 background modes运行状态应用的运行状态分为以下五种:Not running 应用还没有启动,或者应用正在运行但是途中被系统停止。Inactive 当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁...…
-
(-lstdc++.6.0.9)找不到问题
参考文章:Xcode10: -lstdc++.6.0.9 not found目录 -lstdc++.6.0.9 解决方案-lstdc++.6.0.9xcode10已经废弃了libstdc++.6.0.9和libstdc++库,使用libc++库来替代。所以在xcode10中编译工程时,若工程中用到了libstdc++.6.0.9和libstdc++库,那么编译器就会报链接错误。ld: library not found for -lstdc++.6.0.9 clang: e...…
-
nil,Nil,NULL,[NSNull null]
参考文章:https://blog.csdn.net/wzzvictory/article/details/18413519目录 NULL nil Nil [NSNull null] 总结首先要说明的是,nil、Nil、NULL三个关键字和NSNull类都是表示空,只是用处不一样,具体的区别如下:NULL一、声明位置stddef.h文件二、定义#undef NULL#ifdef __cplusplus# if !defined(__MINGW32__) &&...…
-
objc编译调试
参考文章:iOS_objc4-756.2 最新源码编译调试目录 objc objc编译 objc调试objc编译很多小伙伴在探索底层的时候经常很苦恼,只能靠猜测!稍微灵活一点的小伙伴会通过 Apple 提供的源码来辅助看一下,但是很显然这不太直观!如果能够直接编译调试,像我们自己的代码直接 LLDB 调试,流程跟踪。那简直不要太爽。可以跳转下面的地址,下载苹果提供的源码 苹果官方开源代码列表按照参考教程一步一步的进行编译调试。 iOS_objc4-756.2 最新源码编译调试...…
-
查看内存段的简单方法
目录 objc查看所属内存段int age = 18;int main(int argc, const char * argv[]) { @autoreleasepool { int a = 10; NSLog(@"数据区:age %p",&age); NSLog(@"栈区: a %p",&a); NSLog(@"堆区: Obj %p",[[NSObject alloc]init]);...…
-
Crash分析(三):crash文件符号化
参考文章:iOS实录14:浅谈iOS Crash(一) 参考文章:crash文件符号化攻略 参考文章:Xcode崩溃日志分析工具symbolicatecrash用法目录 文件准备与验证 符号化 atos简单使用 symbolicatecrash使用文件准备与验证符号化需要有dSYM(符号表)文件,crash文件。我们创建一个Person类,在.h文件内声明-(void)test;方法,但并不实现。执行下面代码Person * person = [[Person alloc]...…
-
Crash分析(二):crash文件
参考文章:iOS实录14:浅谈iOS Crash(一) 参考文章:crash文件符号化攻略 参考文章:Xcode崩溃日志分析工具symbolicatecrash用法目录 什么是crash文件 crash文件的结构 crash文件的UUID什么是crash文件当程序运行崩溃的时候,系统会把运行的最后时刻的运行信息记录下来,存储到一个文件中,这个文件就是Crash文件。如何获得crash文件?1、将出错的手机连接Xcode,xcode->Window->Devices...…
-
Crash分析(一):dSYM文件
参考文章:iOS 使用dSYM分析友盟错误日志 参考文章:iOS crash解析目录 什么是dSYM文件 dSYM文件的作用 dSYM文件的UUID什么是dSYM文件Xcode编译项目后,我们会看到一个同名的dSYM文件,dSYM是保存16进制函数地址映射信息的中转文件(符号表),我们调试的symbols都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的dSYM文件。我们可以从两个地方找到dSYM文件: 1、在release环境下,工程编译完成后,在下面目录下...…
-
copy与mutableCopy
目录 copy与mutableCopy copy修饰符 自定义对象实现copy方法copy与mutableCopy浅拷贝:简单的指针拷贝,不会产生新的对象。 深拷贝:内容拷贝,会产生的新对象。代码段一:NSString * str1 = [NSString stringWithFormat:@"test"];NSString * str2 = [str1 copy];//浅拷贝NSMutableString * str3 = [str1 mutableCopy];//深拷贝[s...…
-
自动释放池
参考:iOS-自动释放池AutoreleasePool 参考:iOS 内存管理(四): 自动释放池详解目录 自动释放池介绍 自动释放池查看 autorelease 对象在什么时候释放 autorelease 对象详解自动释放池介绍一、介绍以下摘自苹果官方文档: 在引用计数(相对于垃圾回收)环境中,自动释放池包含了接受autorelease消息的对象, 当池子倾倒的时候,会对里面的每一个对象发送release消息。 因此对一个对象发送autorelease消息而不是...…
-
TaggedPointer
目录 TaggedPointer NSNumber NSString 源码TaggedPointer从64bit开始,iOS引⼊了Tagged Pointer技术,用于优化 NSNumber、NSDate、NSString等小对象的存储。在没有使⽤用Tagged Pointer之前, NSNumber等对象需要动态分配内存、维护引⽤计数等,NSNumber指针存储的是堆中NSNumber对象的地址值使用Tagged Pointer之后,NSNumber指针里⾯存储的数据变成了:Ta...…
-
内存分布
参考文章:(深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)目录 内存分布 代码演示内存分布一 内存分布图如下二 分段说明text段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。data段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存...…
-
定时器封装
目录 定时器封装定时器封装MJTimer.h文件#import <Foundation/Foundation.h>@interface MJTimer : NSObject+ (NSString *)execTask:(void(^)(void))task start:(NSTimeInterval)start interval:(NSTimeInterval)interval repeats:(BOOL)repeats ...…
-
定时器存在的问题
目录 定时器的循环引用 定时器的偏差问题定时器的循环引用一、如何产生了循环引用@interface ViewController ()@property (nonatomic, strong) NSTimer * timer;@property (strong, nonatomic) CADisplayLink *link;@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; ...…
-
锁
目录 NSLock NSCondition SemaphoreNSLockself.countLock = [[NSLock alloc] init];- (void)__countMinus {[self.countLock lock];[super __countMinus];[self.countLock unlock];}NSConditionself.countLock = [[NSCondition alloc] init];- (void)__countMinus {[...…