iOS开发-iOS如何本地调试JS 文章目录前言Charles代理HTTPS代理设置WKWebView的缓存机制本地映射html 资源请求远端映射映射到远端映射到本地服务器Safari的调试功能前言最近在排查问题时,遇到Html网页问题,总结下调试经验Charles代理HTTPS代理设置关于 charles 的 https 代理设置,这里简单说明下:打开 Charles,选择上侧菜单栏,选择 SSL Proxying ,安装证书到手机 Mobile Device根据弹框提示,打开网址下载证书,并信赖,然后配置wifi在同一网
iOS开发-逆向注入SDK(三)MonkeyDev注入打包 文章目录MonkeyDev使用注入SDKMonkeyDev强大的工具集,MonkeyDev ,使用它行了!安装教程见 Wiki使用拿着之前通过 frida砸壳 的 ipa包,先创建一个 MonkeyDev 工程。这里以 qqmusic 为例将砸壳的 ipa 放到 qqmusic/TargetApp/ 下,然后拖拽至工程文件中。设置主工程的证书,dylib的不用设置提示 Showing All Messages Signing for "qqmusicDylib" requir
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
iOS开发-逆向注入SDK(一)iOS越狱 越狱这里采用使用 iphone 5S, iOS 12.4.9 为例,进行 非完美越狱非完美越狱:重启手机越狱失效,需要再进行越狱,越狱也不麻烦,点几下就行了,不过不关机就行了哈i4助手安装 i4助手(爱思助手) https://www.i4.cn/ 是个很好的软件,如果你的手机变砖了,正好可以使用它刷机。不过被密码锁定的手机不行。如果你的iphone已经开机就黑,选择合适的固件版本,进行刷机这里对其功能不做进一步说明,低版本可以直接完美越狱,我们这里仅使用它来方便访问越狱文件以及安装a
iOS开发-NSThread子线程autoreleasepool的问题 前言对于 NSThread 开启的子线程,我们需要在 main 函数中创建一个autoreleasepool,当我们从其他线程跳转到该线程执行时,对象是如何释放的呢?主线程是由于runloop的循环,在beforeWait时,触发主线程的autoreleasepool的pop和push操作来释放的,而子线程并没有自动添加这些observer,那么如何释放的?探索跳转到我们线程执行任务的方法如下,使用了performSelector:系列的方法。OBJC_EXTERN void _objc_autor
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>
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
iOS开发 - OCLint的自定义规则编写 文章目录通过Xcode显示Warning方案的选择简易Rule编写brew安装Aggregate 添加脚本规则编写通过Xcode显示Warning方案的选择前面已经说过如何添加自定义的规则rule以及Xcode调试:iOS开发 - OCLint自定义规则的编译与Xcode调试一般来说,我们都有这样的需求:想在写代码的时候,就能分析出代码问题,并及时进行修改。虽然OCLint能够分析单个文件,但没有Xcode插件,像 Analyze 这样的实时分析可能并不好实现,这里我们就选择编译一次然后在项目中提示
iOS开发 - 创建自定义的brew仓库oclint-0.15 文章目录背景创建仓库brew create创建tap使用参考文档背景项目需要使用 oclint 0.15 版本,并添加一定的规则 rule ,这里oclint 0.13版本之后就没有再更新了,两个版本由于clang版本不同,不能共用,如果让每个人去拉包,然后替换,太繁琐了,这里创建一个brew库用于快速集成。在 Homebrew 的架构下,至少有 4 层概念Keg(酒桶):安装好的脚本、软件等;Cellar(酒窖):所有用 Homebrew 安装在本地的脚本、软件组成的集合;Formula(配
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,
iOS开发 - NSHashTable与Runloop所造成的强引用问题 文章目录概述Runloop Observer的问题AutoreleasePool界面更新概述首先,我来描述一下这个问题,NSHashTable 是OC中用于弱引用对象的NSMutableSet 类型,在项目使用中,我们发现调用其 allObjects 方法会造成强引用关系,导致对象不会释放。具体情况如下:我们监听了主线程的 Runloop 并在 kCFRunLoopBeforeWaiting | kCFRunLoopExit 时触发,由于我们需要统计 UITableViewCell 的信息,所以我们将
iOS开发 - Runloop的mode是如何切换的 文章目录问题探索Runloop的mode是如何切换的mode切换时会退出吗?问题Runloop的mode是如何切换的?Runloop的mode切换时,上一个mode是需要退出吗?探索Runloop的mode是如何切换的UITableView滑动时,Runloop会进行切换mode,由kCFRunLoopDefaultMode切换为UITrackingRunLoopMode,根据源码,切换mode实际是调用CFRunLoopRunSpecific 这个函数SInt32 CFRunLoopRu
iOS开发-NSMapTable NSHashTable NSPointerArray的使用 文章目录NSMapTableNSDictionary的局限性NSMapTable优势配置参数 OptionsMemory OptionARC下MRC下Personality optionsUsage快捷生成自定义配置NSHashTableNSHashTable 优势配置参数UsageNSPointerArrayNSPointerArray 特性创建Usage对于工程中使用的弱引用集合的特性进行整理,有些点还是容易忘记NSMapTable NSHashTable NSPointerArray 是iOS中用
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
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(...) \
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
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
iOS开发-FBRetainCycleDetector中的深度优先搜索DFS 文章目录图有向图图的实现方式遍历广度优先搜索 BFS深度优先搜索 DFSFBRetainCycleDetector的应用最近复习 FBRetainCycleDetector 源码的时候,需要的图的查询方法,深度优先搜索,这里记录下,便于系统复习。这里仅仅为分析FBRetainCycleDetector实现原理,采用深度优先搜索DFS图图由顶点(vertex)和边(edge)组成,通常表示为...