- 博客(567)
- 资源 (5)
- 收藏
- 关注
转载 iOS动态库与静态库的理解与创建
库(Library)是一个可供使用的各种标准程序、子程序、文件以及它们的目录等信息的有序集合。所谓程序库,一般来说就是软件作者为了实现发布方便或替换方便又或者是二次发布方便这个目的,所制作的一组可以单独与应用程序进行静态链接或动态链接的二进制可重定位目标码文件。说到底,一个库就是一个文件而已。这个库(文件)可以是在编译时由编译器直接链接到可执行程序之中,也可以在运行时根据操作系统的运行环境按需要动态加载到内存之中。
2025-03-23 15:47:03
55
原创 Swift实现嵌套json字典重排序并输出string
在网络请求或接口签名中,通常要求将参数按照一定规则拼接成字符串。一个常见的做法是对字典的 key 进行排序,然后按照 “key=value” 的格式拼接,多个参数之间以特定符号(例如)连接。如果参数中包含嵌套的字典或数组,则需要递归展开。这样的处理不仅可以保证字符串的唯一性,同时也方便后续的加密或签名操作。比如:a=1&b=2下面的算法不仅支持简单的键值对,还能够递归处理嵌套结构,使得所有数据都能被有序地转换为字符串形式,从而满足不同业务场景下的参数签名需求。
2025-03-23 11:48:46
325
原创 Swift 二分法求函数的近似解
在实际开发中会遇到一些工程问题,需要求解复杂函数方程的问题。使用传统的数学方法比较难以处理。本文将使用。:其基本思想是。
2025-03-23 09:17:35
707
转载 iOS动态库与静态库的配置与使用
由于OC语言符号链接的基本单位是类,静态库链接时首先会链接本类,而Category是运行时才会被加载的,因此会被静态链接器直接忽略掉,通过-ObjC命令是告知链接器链接所有的OC代码。,将 XPSSO.dylib 的 INSTALL_PATH 设置成 @rpath,然后在编译 softA.app, softB.app 时分别指定 @rpath 为 @loader_path/../dylib, @loader_path/../Frameworks,问题得到了解决。如果依赖的是动态库,则走动态链接的流程。
2025-03-18 00:04:23
67
转载 Podfile 中 use_frameworks! 的作用
在执行pod init之后, podfile中就会自动生成,其中podfile有 use_frameworks!配置,默认是打开的。# 不使用先放结论静态静态框架(.framework✅⚡️ 快❌动态动态框架(.framework✅🐢 慢✅动态动态框架(.framework✅🐢 慢✅不使用静态静态库(.a❌⚡️ 快❌。
2025-03-17 23:35:09
57
转载 静态库中的类别符号(-ObjC\-all_load\-force_load)
xcode 选择target -> buildSetting -> Other Linker Flags先说结论,Other linker flags一些选项其中,是一个静态库项目,我们将头文件和暴露出来供外部使用.工程是主项目.中的代码为:中代码为:中代码为:中内容为:这主要是为了生成link map文件.此时,项目会发现没有任何问题.然而,运行时发现项目崩溃:根据网上资料,可以很容易的查到,这是因为编译成可执行文件的时候,没有链接导致的.解决方法是在中添加.它的含义是:可
2025-03-17 23:07:14
23
转载 iOS 集成SQLCipher使用
SQLCipher 是一个加密的 SQLite 数据库引擎,它允许开发者将数据以加密的方式存储在 SQLite 数据库中。使用 SQLCipher,我们可以通过设置密码或密钥来保护数据库中的所有数据。即使恶意用户获取了数据库文件,没有正确的密码也无法读取其中的数据。
2025-02-23 16:35:19
35
转载 Xcode15 Swift 制作 XCFramework
在制作xcframework的过程中,踩了许多坑,于是我就重新梳理出了一套流程,按着我的步骤来,保你免掉血一次通关。前置条件:M1,Xcode14 或者 Xcode15XCFramework是Apple在Xcode 11中引入的一种跨平台打包格式。它被设计用于在不同的苹果平台(如iOS、macOS、watchOS等)之间共享和使用代码。XCFramework可以包含多个Framework,以支持不同平台和不同的设备架构。它支持二进制兼容性,可以在不同的Xcode版本和不同的平台之间进行共享和使用。
2025-02-17 17:46:57
121
转载 iOS应用砸壳原理
要想破解别人的App,第一步就是拿到ipa包进行砸壳砸壳也称作软件脱壳,顾名思义,就是对软件加壳的逆操作,把软件上存在的壳去掉(即解密)。
2025-02-03 20:29:52
385
转载 iOS-MachO文件介绍
本篇文章主要分析MachO文件(也称作二进制可执行文件),相信大家在平时开发中都会碰到MachO文件这个概念,但是大部分人不清楚是个什么东西,本篇文章就和大家一起来具体分析它的由来以及它的内部结构。
2025-02-02 21:48:42
288
转载 iOS 禁用抓包实践
目前就看到这些,综合起来说,公钥锁定这种方式是最安全的通信方式,配置成本也很低。参考文档iOS 禁用抓包实践 | fanthus's bloghttp://zhaoxincheng.com/index.php/2021/03/14/ios系统抓包入门实践之短链/(opens new window)iOS 禁用抓包实践 | fanthus's blog。
2025-01-14 12:07:27
68
转载 Swift 中 defer使用
延迟执行的操作会按照它们声明的顺序从后往前执行——也就是说,第一条 defer 语句中的代码最后才执行,第二条 defer 语句中的代码倒数第二个执行,以此类推。打印结果中,第一个if中的代码及里面的defer最先执行,方法中的defer最后执行,由此可以看出,代码块中其他能够执行的代码先执行,最后执行defer的内容;我们可以看到最后一个defer没有执行,所以defer定义的位置很重要,如果没有执行defer定义的代码,在代码块结束前不会执行defer中的内容。defer 2 中的内容。
2024-12-02 12:18:18
168
转载 iOS-公钥锁定TrustKit
这里采用公钥锁定的方式,则需要获取证书公钥的摘要hash,该值由服务器端提供,提取证书的摘要hash并查看base64的格式,示例:bAExy9pPp0EnzjAlYn1bsSEGvqYi1shl1OOshfH3XDA=,这就是我们将要进行证书锁定的指纹(Hash)信息。证书锁定(SSL/TLS Pinning)顾名思义,将服务器提供的SSL/TLS证书内置到移动端开发的APP客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。2、常用的第三方SDK。
2024-11-17 13:15:54
122
转载 RSA 加密、解密(服务器给公钥,剩下的自己搞)
但是,其中有一个参数algorithm, 服务器那边用的是none,在Swift的定义中根本没有和这个none的定义,怎么尝试都是失败,后面换成的不推荐的方法,吐槽一下苹果这个SecPadding的枚举定义,在OC中有11个值定义,怎么到Swift中只剩10个了。我遇到的问题是,太相信苹果了,使用Swift写的代码,用的是系统的推荐方法,后台只是给了一个公钥字符串,然后加密解密就自己搞吧。以下是类的具体代码,有兴趣的可以copy下来看一下。好吧我承认,前两篇文章对于我的项目没有任何帮助,
2024-10-28 11:27:12
425
转载 布丰投针计算圆周率:Python实现
如图,由于y可以取0到d/2的任何数,因此针中点的所有可能性(所有y)构成长为d/2的线段。随着θ的变化,该可能性并不会变化,因此所有可能性形成面积为的粉色矩形。布丰投针问题:设我们有一个以平行且等距木纹铺成的地板,随意抛一支长度比木纹之间距离小的针,可统计出针和其中一条木纹相交的概率,根据这个概率可以得出圆周率。随着θ的变化,该可能性变化,因此所有可能性形成面积为S2的蓝色图形。例如,方法二中π的来自于 S1,更本质地说,是来自于针与平行线夹角的积分上限(范围)。这两件事,有一点点的关系么?
2024-10-21 21:40:40
207
原创 快速上手 iOS Protocol Buffer
本文主要介绍在 iOS 开发中如何。更多关于 Protobuf 的介绍和相关的功能 api,读者可自行。Protocol Buffer(简称 Protobuf)是一种由Google开发的语言中立、平台无关的序列化数据结构的方法。它允许你定义结构化的数据,并提供一种高效且灵活的方式进行数据序列化和反序列化。
2024-08-16 10:13:28
1109
原创 ios生成随机颜色
写demo,太需要这个随机颜色了,每次都懒得写,从网上找,但是找出来的又都是良莠不齐,还需要再修改。是在懒得修改,就找了一个合适的,从自己的博客找,减少筛选代码的成本。
2024-06-23 15:48:52
566
转载 iOS了解崩溃和崩溃日志(Understanding Crashes and Crash Logs)
当App发生crash时, attached的debugger会暂停App的运行,并定位的crash位置。详细看一下crash栈,这里是App启动入口这里是crash的具体位置发生crash时,debugger会收到signal,然后暂停App的运行,显示crash的调用栈如果当前没有attached的debugger,系统会吧crash堆栈信息dump到一个log文件中release版本的app发生crash时,log文件的调用栈只有地址信息xcode符号化后的crash log。
2024-05-12 23:59:35
1685
原创 Swift 使用枚举协议CaseIterable遍历枚举所有值
CaseIterable是一个用于迭代枚举案例的协议。它为一个枚举自动合成了所有的案例。请记住,这个协议不能应用于关联值的情况。这个协议使你能够使用一个名为allCases的计算属性来访问案例,该属性在一个集合数组中返回所有的案例。在上面的例子中,使用map()函数来迭代这些案例。同时,我们在map()函数的执行块中为每个案例返回rawValue。Swift的CaseIterable接口使得列举一个没有相关值的枚举的每个案例变得简单。
2024-05-12 22:04:59
956
1
转载 iOS QQ音乐客户端动图优化实践
YYAnimatedImageView 只解码第一帧, 并保留动图的 NSData, 在背景线程解码帧. 但即使这样, 不断加载动图时, 低端机上依旧有性能问题. 在用户快速滑动或是数据刷新的场景, YYAnimatedImageView 会丢弃前一张图的所有帧数据, 下次展示这张图又会从头解码, 造成额外的 CPU 消耗, 在此继续做如下优化.QMAnimatedImageView 提供了下采样接口, 开启设置后, 如果能够省一半以上的内存, 动图帧就会被自动压缩为适应屏幕的尺寸.
2024-05-12 15:39:16
381
转载 iOS 内存管理研究
iOS 的内存管理有以下几个特点:文档较少,系统提供的接口也较少,因此大家自己生产的轮子较多,需要多做实验才能得到可靠的结论。多利用 Instruments 也会发现一些之前忽略的点内存问题的暴露有一定延时性,OOM 在本地很难复现,需要投入大量时间测试,同时配套相应的监控系统技术变化较慢,操作系统这一层的知识在过去和未来的很长一段时间都不太会改变,或只是微调,值得花时间来研究经典的时空取舍问题,在资源有限的设备上,如何平衡 CPU/GPU 和内存的开销,来达到性能最大化。
2024-05-12 15:25:30
148
转载 iOS单个应用程序的最大可用内存
设备:(单个APP最大值/设备内存总量/总量百分比)iphone - ios app maximum memory budget - Stack Overflow
2024-04-03 12:19:09
1828
原创 iOS 包含行间距计算富文本size
需求上是文字固定宽度,最多显示3行,超过3行尾部打点展示。在一次开发过程中,发现带有行间距的富文本计算高度,会有不准确的情况,富文本内容明明很长,但是计算出的高度只有不到20像素,导致整个cell的高度计算异常。测试后发现,系统的5个枚举中,只有 byWordWrapping和byCharWrapping 计算准确,带有截断方式的case,计算都是错误的。这时候算出来的size高度只有17像素,真实显示到屏幕上Label的高度是58像素。好吧,系统这个样子,我们也没有办法,最后采用的方式。
2024-01-27 12:06:25
1679
1
原创 树结构实战,获取文件夹大小
而我们需要分析磁盘的占用空间,无法避免需要读取,但是期望只通过一次文件IO操作,来获取到所有某个目录下所有文件夹的信息。所以需要一种方式可以仅进行一轮磁盘操作,就能获取到对应目录下的所有信息。
2024-01-20 23:28:09
594
转载 swift Codable 的用法和原理
Codable 也可以代表苹果为 Swift 开发的一套编解码系统,从 Swift 4 开始引入,包含了 Encoder 和 Decoder 协议和他们的两个实现 JSONEncoder、JSONDecoder 和 PropertyListEncoder、PropertyListDecoder。其中 Codable 及其相关协议放在了标准库中,而具体的 Encoder、Decoder 类放在了 Foundation 框架中。
2024-01-01 17:01:26
1092
转载 swift动态成员查找 @dynamicMemberLookup
通过调用people.info.job可以访问Info的属性值。但是,如果你想直接通过people.job 而不是people.info.job 调用它怎么办?这只是一个用于讲解动态成员查找的简单案例,但在实际开发中,在特定场合可以发挥作用,正常的场景我们最好不要这么做。如果类、结构体有对应的属性, 会优先查找属性, 属性查找不到 才会到dynamicMemberLookup 流程。既然是动态查找,如果两个属性类型不同,怎么办?和泛型的逻辑类似,通过类型推断来选择对应的方法。
2023-12-18 13:25:35
321
原创 iOS使用CoreText完成txt阅读器
CoreText是一个高效处理字符和字形转换和进行文字排版的框架。通过学习使用coretext,计算分页并渲染,找出最核心逻辑,做了一个只展示核心原理的最简demo。
2023-12-10 18:03:49
1596
转载 iOS 富文本属性
常见的富文本key不是那么好找,所以直接封装成一个方法。调用方法比去找对应的键还是要方便一些:对NSMutableAttributedString的分类进行方法扩展。因富文本属性这些对应的。
2023-12-09 19:04:40
808
原创 leetcode 41. 缺失的第一个正数
给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。
2023-11-26 16:42:04
676
原创 Swift 常用类别整理
比如视图宽度 = 数量 * 单个元素宽度 + 元素之间间距, 数量一般为Int, 而元素宽度,元素之间间距一般为CGFloat,生成最终宽度一般为CGFloat,计算过程中涉及到类型强制转换。如果担心重载的影响范围太大,可以将重载运算符的声明范围定在 internal 或者 不写,这样也不用担心影响到三方库或者系统库的调用,影响范围已知且可控。按照正常的开发习惯,可以在Swift中通过重载常见的运算符,支持Int和CGFloat之间的互相运算,比如下面的写法。
2023-11-12 13:14:34
421
转载 iOS 使用Masonry出现约束警告定位视图
在使用Masonry时候,有时候虽然界面显示正常,但是log里面会出现如下类似的警告。链接:https://www.jianshu.com/p/838b012f12a0。可以显示出控件的名字,一目了然就可以看到有问题的控件约束,修改即可。MASAttachKeys(控件XX), 可以传多个控件。2. 初始化控件XX 下面 添加 代码。1.通过断点找到有问题的控件XX。3.run,看log。
2023-11-08 14:31:37
723
原创 三门问题-Swift测试
当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。第一次选的空门(概率2/3),之后主持人开另一个空门,换门,得到汽车。第一次选的汽车(概率1/3),之后主持人开一个空门,换门,失败。参赛者挑山羊一号(1/3),主持人挑山羊二号。参赛者挑山羊二号(1/3),主持人挑山羊一号。参赛者挑汽车(1/3),主持人挑羊一号。
2023-09-24 12:17:30
489
转载 iOS 适配SceneDelegate的坑: scheme 和 Universal Link 在调试时的踩坑记录
在你使用SceneDelegate的时候不管你是scheme还是Universal Link 都会在冷启动的时候不走代理函数。解决办法有两种:1.你可以不用SceneDelegate这个文件。这样就可以避免问题的出现。毕竟现在的APP好像并没有强制开发者只用SceneDelegate;2.在无数次的测试的时候我们会发现在APP冷启动的时候都会走SceneDelegate的我们可以对这个函数做做文章。在中有两个属性,一个是另一个是。
2023-09-16 19:24:59
1176
转载 iOS Universal Link起源
说起 Universal Link(通用链接),对于有过 iOS 开发的同学,一定有用上过。目前在申请微信分享或登陆时,需要配置 Universal Link 链接。苹果 WWDC 2015 提出的 iOS 9 的新功能。方便地通过打开一个 https 链接来直接启动 App (手机有安装 App 的情况下)。实现 web-app 的无缝链接时,能够提供极佳的用户体验。但是,反过来说,为什么需要 Universal Link?最后,我们从产品的角度来总结一下URL Scheme和的功能发展。
2023-09-16 18:00:55
468
转载 MVC的一个常见的误用
APP的各种架构,其实所想要解决的问题本质在于,是把 “用户操作,数据变更,UI反馈”, 这部分代码分成不同的职责类,每个类负责一部分工作。分多少类,每个类的职责有何差异,就是不同框架的区别。根据数据驱动,数据流动的方式就产生了不同的框架,MVC,MVVM,VIPER等。如何避免把 Model View Controller 写成 Massive View Controller 已经是老生常谈的问题了。
2023-08-13 14:40:26
108
转载 YYCache思路
很早之前看过YYCache,对于内存缓存一开始是没看懂的,但是后面学过了LRU算法之后,加上自己的实际实践之后,内存缓存已经完全明了。对于磁盘缓存,确实虽然多次看了源码,但是一致不明所以,直到自己使用SQLLite实现磁盘缓存的功能,回头在看YYCache的思路,才恍然大悟。以下是YYCache的思路,其实是对原文的精简。YYCache (通常一个缓存是由内存缓存和磁盘缓存组成,内存缓存提供容量小但高速的存取功能,磁盘缓存提供大容量但低速的持久化存储。
2023-08-13 10:24:18
256
原创 OSLog与NSLog对比
意识大概是说,NSLog会向ASL写log,同时向Terminal写log,而且同时会出现在Console.app中(Mac自带软件,用NSLog打出的log在其中全部可见);因此,为了线程安全,每次调用NSLog时,它都会打开一个新的asl客户端连接,发送消息,然后关闭连接。因此,为了线程安全,每次调用NSLog时,它都会打开一个新的asl客户端连接,发送消息,然后关闭连接。意思就是ASL是个系统级别的log工具,syslog的替代版,提供了一系列强大的log功能。而asl就是对应应用层的用NSLog。
2023-08-05 17:17:31
1786
转载 iOS Universal Link 简介
(通用链接)是什么?这是Apple在iOS9推出的一种能通过HTTPS链接直接启动手机APP(手机有安装APP的情况)的链接。当你的应用支持(通用链接),在用户点击一个链接时可以跳转到你的网站并获得无缝重定向到对应的APP,且不需要通过Safari浏览器。如果你的应用不支持的话,则会在Safari中打开该链接。说起,我们不由就会想起URL Scheme,以为在出来之前iOS这边使用的一直都是URL Scheme进行APP之间的跳转,当然在Safari中也可以通过scheme://跳转APP。
2023-07-16 17:38:01
1304
ios swift 直播动画demo
2018-07-04
NSArray越界崩溃解决方法
2018-05-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人