iOS支付项目实践专栏- 总目录(持续更新)
文章目录
-
引言
- 第一部分:自定义视图模块
- 1.1 用户协议及隐私政策弹出窗口
- 1.2 电子签名功能模块
- 1.3 商品详情页展示界面
- 1.4 图片上传视图功能(支持删除和新增)
- 1.5 风险商户证明材料查看系统(图片滑动切换功能)
- 1.6 iOS定点缩放弹出窗口界面设计
- 1.7 iOS抽奖转盘算法实现与设计思路
- 1.8 自带OCR识别功能(银行卡/身份证识别)
- 1.9 收银系统中的 iOS 折扣计算工具
- 1.10 联系人管理功能模块
- 1.11 特定字符输入框限制显示数量
- 1.12 商品类目选择预览界面设计
- 1.13 自定义滑块组件开发(iOS 版本)
- 第一部分:自定义视图模块
-
第二章 语音播报与国际化设置
-
对于运行于iOS12.1及其以上版本的设备,在后台运行或被强制关闭时无法执行语音播报功能的问题提供了解决方案
-
APP内的国际化设置配置
-
III 商品模块
-
- 支持打印商品的价格标签及交易收据
- 3.2 提供水平方向弹出菜单窗口的支持
-
-
第IV章iOS安全资源
-
4.1 参数标识
- 4.2 敏感逻辑的防护策略
- 通过使用URLNetworkProtocol实现全面的网络请求拦截
-
V、 逆向
-
- 5.1 IPC
- 5.2 分析如何调用的ptrace,并hook ptrace
- 5.3 进程间的实时通讯方案
-
-
VI、在iOS平台中,每次点击tabBar按钮均会导致界面刷新
-
VII、将HTML字符串与富文本进行相互转换
-
VIII、针对iOS开发效率的工具有待改进
-
- 8.1 封装富文本API功能
-
IX 第X章问答
-
9.1 关于请求参数签名的问题及其解决方法
-
9.2 在下载示例代码至Xcode12环境中为何出现libary not found for -lAXIndicatorView的错误提示?如何解决此问题?
- see also
-
- 什么是API规则、ABI规则?
- 热修复服务
引言
欢迎大家来到#公众号:iOS逆向的《iOS支付项目实践》专栏
本文提供了学习大纲,并且也可作为大家掌握《iOS支付项目实践》这个专栏的学习指南。
文中的超链接都是传送门,请点击即可跳转到相关页面。
本专栏基于实践案例展开,并从基础到高级系统地讲解iOS开发流程。通过演示代码片段快速掌握支付类APP的核心功能,并帮助读者完成从需求分析到代码实现的完整开发流程。
适合iOS入门同学,在开发支付类app场景将使用到的基础功能
本专栏的整体大纲模块
封装富文本API功能
解决压缩后图像模糊的问题
定点缩放弹窗
横向弹出菜单视图
MASConstraint的安装与移除
支持删除与添加
提供价格标签打印模板及小票打印模板并实现自动连接佳博GP-2120TU打印机
iOS APP 内部国际化切换
博主简介
某xxx信息技术服务有限公司拥有 iOS 高级工程师资质, 主导构建了 iOS 支付系统 的核心功能模块, 在 iOS 应用开发方面具有深厚的造诣, 累计拥有 8 年的专业 iOS 开发经验, 曾在多个大型企业如中国移动及xxxxx公司中承担关键技术角色。此外, 该团队成员还是一位专业领域内的 技术专家号, 并热衷于技术分享, 在移动开发者社区活跃, 同时开设个人公众号《iOS 逆向解密》进行内容发布
怎么下载专栏的demo?
目前平台文章和资源没有关联,这个功能还是排期中

因此为了防止让付费用户再次进行二次付费的行为,请问您是否愿意关注#公众号:iOS技能?加我微信账号后我可以协助您完成下载流程。
另外由于历史原因造成订阅的专栏可能混杂着别的专利的超链接
不论订阅哪个专栏都可以阅读博主的所有专栏
平台终止了这一订阅模式
全部资源汇总:
<>
精品资源汇总(持续更新)
<>
I、自定义视图
1.1 《用户协议及隐私政策》弹框
demo源码支持中英文切换
demo源码支持中英文切换
1、详细解释:请参考<>
2、功能使用:通过点击右上方的"语言切换"文字来实现中英文切换
《用户协议及隐私政策》 弹框的具体实现步骤如下:
2.1、创建自定义TextView,并支持富文本属性的内容设置(包括下划线NSUnderlineStyleSingle、超链接NSLinkAttributeName 和颜色NSForegroundColorAttributeName 等信息)
2.2、实现代理方法textView:shouldInteractWithURL:inRange,并处理点击超链
1.2 电子签名
主要技术基础是通过旋转特定屏幕实现
<>
功能包括:
- 采集电子签名
- 将签名界面设置为横向布局,并使其他页面转为纵向布局
- 删除重做操作
- 灵活配置提示信息显示位置
- 访问商户协议文件
核心原理是通过旋转特定区域的屏幕布局来完成
具体步骤如下:
执行如下步骤:
- 设置viewWillAppear时显示横向布局
- 设置viewdispose时切换回纵向布局
- 基于块回调机制实现电子签名功能
1.3 商品详情页
商品详情页
商品详情页
1、文章内容:<>
2、应用范围包括商品详情页面以及需要展示多张图片的场景。
3、核心原理如下:
3.1)按照原始图像的比例进行调整;
3.2)通过高度自动调节实现自适应显示。
1.4 上传图片视图的封装【支持删除和添加】
[ 源代码下载页面: ]
1、案例研究:[()
2、主要应用场景包括上传并展示多张图片的场景,请具体参考风险商户处理、发布商品图片等操作流程
3、 在效果图中可清晰观察到相关数据指标的表现情况

4、技术特点:主要基于UITableViewCell 和 cellularView 控制件进行数据展示,并通过构建Masonry组件框架实现视图层次化管理。该应用遵循MVVM模式实现业务逻辑与视图分离。
5、我的其他类似SDK 项目包 https://github.com/zhangkn/KNPodlib

1.5 查看风险商户的证明材料,图片支持滑动切换
iOS查看大图浏览器
可从获取Demo源码:[从下载Demo源码:
场景说明:可浏览多幅图片,例如如查看风险商户的相关证明材料等信息;其中支持通过滑动查看更多图片
文章:<>
主要功能:使用查看器时, 通过左右滑动查看更多张, 并支持通过下滑视图退出查看器

1.6 iOS 常用动画【 定点缩放弹窗】
- 将商品添加商品到购物车的动画
通过平台获取Demo代码,并访问其详细内容。
一、功能模块描述:
功能模块的主要应用场景是实现对当前购物车中商品数量的增加。
二、技术细节:
相关文章链接:
三、学习资源:
添加商品到购物车的动画(将商品图片iconImgV 移动到购
- (定点缩放弹窗)的应用场景:
1、会员详情的右侧下拉操作菜单

2、浏览器的右侧下拉菜单

3、原文:
4、[官方博客详细说明:()
官方代码存储位置
官方GitHub项目链接
具体说明了如何实现
1.7 iOS抽奖转盘:概率抽奖算法 & 转盘算法 & 转盘主视图的实现思路
iOS概率抽奖算法 & 转盘算法
iOS应用中的抽奖系统包含了三种核心功能:随机概率分配机制、轮盘游戏算法以及主显示界面的设计思路。这些功能在平台获取完整的开发示例。
文章:<>
基于CoreGraphics技术开发了自定义转盘的原理:
视频:<>

1.8 自定义相机( 银行卡/身份证识别OCR、矩形边缘识别)
[1、 资源获取:()
2、原理论文:<>
矩形边缘识别
iOS Document Scanner: 矩形边缘识别(基于边缘检测) CIDetectorTypeRectangle
[从下载Demo源码:()
1、应用场景:为了优化用户体验,在OCR场景中将全面应用边缘检测技术
2、原理:通过利用CoreImage框架中的CIDetector技术,在OCR场景中实现边缘检测
3、原理文章:<>
身份证信息识别
可从下载该Demo源码:
该系统能够迅速准确地识别并截取包含姓名、性别、民族、住址及身份证号码的相关证件图像
支持信用卡网银申请、商户 entrance applications以及实名认证等场景中的号码自动生成
本系统的原理包括以下几个方面:
3.1 通过调用第三方库SDK libexidcardios进行识别操作
3.2 设计并添加了一个带有镂空窗口及动态扫描线条的自定义扫描界面
3.3 如果用户将头像放置在该框内,则该帧身份证图像尺寸恰当且完整无缺系统的技术实现细节已详细阐述于下文
- 扫描银行卡:
iOS逆向
[从下载Demo源码:()
本系统主要实现的功能是识别银行卡相关信息(具体信息如银行名称及卡号),并能自动截取相应的银行卡图像
系统的主要应用场景包括支持商户进件及实名认证等业务流程
系统的核心原理包含两部分:
第一部分是开发团队自创的一种新型摄像头,并结合第三方库SDKlibexbankcardios.a和libbexbankcard.a进行功能实现(支持无限次调用该服务完全免费)
第二部分是通过开发团队设计的一体化扫描界面(其中包含一个镂空观察窗口以及往复运动的扫描光标)完成实际操作
关于系统运行原理的具体介绍,请参考[()
如果您未能成功获取到演示代码包,请关注官方公众号【iOS逆向
iOS 自定义相机进行银行卡/身份证信息识别方案
1、从下载demo源码
2、原理:使用自定义摄像头采集银行卡图片,并利用SDK/API实现OCTR技术
3、文章地址:<>
4、应用场景:实名认证、银行卡绑定、信用卡网络申请
5、思路
5.1、付费方案的思路:将CVImageBufferRef转换为UIImage后,即可调用第三方接口进行OCR
<>
5. 2、免费方案的思路:直接利用libexbankcardios.a和libbexbankcard.a这两个第三方库的API来解析CVImageBufferRef中的银行卡号信息
1.9 收银app必备模块:iOS折扣计算器
采用NSDecimalNumber 进行表达式的精准计算(计算字符串数学表达式)
2、背景:曾运用NSExpression来进行表达式计算
3、问题描述:在这一过程中遇到了一个小问题:即无法精确控制小数点后的位数(例如1+65与65+1的运算精度不同)
4、解决方案:采用NSDecimalNumber来进行计算以解决上述精度问题
1.10 通讯录
索引
索引
<>
原理:通过用户输入内容并借助
CFStringTransform进行变换操作,可以轻松地实现实现在一个通用的搜索索引系统中构建信息检索机制的能力。特色:该系统支持多种语言的信息检索功能。
1.11 限定文本输入框输入特定的字符个数

通过获取演示文件:
1、原文:
2、设置特定字符输入框以限定文本字符数量
计算规则中将中文字符计为1个字节、可转ASCII的英文字符计为0.5个字节
特色功能包括针对iOS设备的联想字符串输入限制以及中英文切换时可能出现的问题解决
Demo需求:在风险商户处理界面中设置了一个情况说明字段
5、private repositories : https://github.com/zhangkn/RestrictedInputDemo
技术实现方面则采用了MVVM架构进行开发

1.12 iOS商品类目选择视图
iOS 商品/经营类目选择视图
[获取位置:
文章地址:<>
视频地址:<>
商品经营类目选择视图的应用场景:
1、在发布商品时设置经营类目
2、商户在进件操作中设置经营类目
3、在购物类应用的下单界面进行商品分类筛选
在发布商品的时候,选择类目界面的要求视图分为上下部分。
1、 上端区域:直观地自上而下展示已选分类信息,并按层级依次列出(悬浮显示),点击选定后切换至同级分类供筛选。
2、 下端区域:提供可多选浏览的分类列表。

支持清空数据功能

1.13 iOS 自定义tab滑块
应用场景:商户交易汇总表使用tab滑块进行切换/筛选不同级别的代理商数据
段功能与标签混合显示;(滑块双区间)【应用场景:商户交易汇总表通过tab滑块实现切换与筛选不同级别的代理商数据
————————————————
版权声明:本文为博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:<>
iOS 自定义tab滑块

通过获取Demo下载链接:
访问<>以获取详细信息。
观看视频,请访问<>。
该系统提供一个下拉式筛选组件用于实现不同层级代理商数据在商户交易汇总表中的切换或筛选功能。
应用背景中提到该系统支持通过下拉式筛选组件实现不同层级代理商数据在商户交易汇总表中的切换或筛选功能。
II 语音播报 & 国际化
2.1 iOS12.1以上在后台或者被杀死无法语音播报的解决方案
app处于后台/被杀死的状态仍可进行语言播报
当应用处于后台运行或被强制终止时仍能执行语言播报
当应用处于后台运行或被强制终止时仍能执行语言播报
————————————————
版权声明:这篇文章为博主「#公众号:iOS逆向」的个人原创文章,并遵循CC-BY-SA 4.0授权协议使用,请参考原文出处链接及本声明。1、具体来源链接:
2、[资源下载代码资源包:()
2.2 APP 内的国际化切换
iOS APP 内的国际化切换
在平台获取该iOS APP中的国际化界面切换功能 demo源码示例:<>
文章:<>
原理:
1、基于本地化的定制解析工具类LanguageManager
2、在应用内部实现语言切换的技术:通过销毁根控制器并重新初始化一次
3、指定参数顺序
III 商品模块
3.1 蓝牙打印商品价格标签、交易小票
打印商品价格标签及打印交易小票
生成商品价格标签并输出交易小票
生成商品价格标签并输出交易小票
1、应用场景:打印商品价格标签、打印交易小票
2、特色功能: 实现自动连接最近使用的打印机、统一处理蓝牙状态
3、原理文章:<>
4、解决的问题:人民币¥符号乱码的问题
private
3.2 支持展开折叠的弹出菜单(横向)
文章:博客文章;视频:直播视频;下载地址:下载链接;疑问解答,请关注公众号:iOS逆向
1.支持展开折叠的弹出菜单的实现思路:
1.1 在keyWindow中添加弹出视图,在主窗口中添加蒙版(主要原因在于在屏幕空白处点击以隐藏弹出视图)。
1.2 当显示时, 动画自右上方向左下方延伸;当隐藏时, 则反之(显示过程中, x,y 坐标逐渐增大)。
1.3 内部视图采用了RecyclerView来进行布局。
1.4 view的frame坐标是基于当前被点击菜单按钮对应的商品cell的位置进行计算并完成坐标的转换。
2.水平方向弹出菜单视图的应用场景:
2.1节中描述了门店商品支持的功能模块:通过侧向展开视图(包括上下架操作、打印功能、编辑功能及同步至网络平台)实现对展示视图的灵活管理;该模块还提供了侧向关闭展示视图的选择权

2.2、网店商品目前只包含下架功能:展开折叠视图:(包含上/下架商品功能)

- 竖向弹出菜单视图
快捷入口:会员功能模块上方右侧的竖向下拉式菜单(弹出式设计)

IV 、iOS安全资源
4.1 参数签名
请求参数按照ASCII码从小到大排序、拼接、加密
将请求参数按照ASCII码由小到大排序后连接,并加密
将请求参数按照ASCII码由小到大排序后连接,并加密
1、可从获取完整的 demo 链接:[()
2、访问文章:[()
3、应用场景:保障请求参数的安全性以防止遭受篡改或人为更改
4.2 敏感逻辑的保护方案
案例:js根据key从本地方法获取设备及签名信息 (完整demo)
在本地实现中对签名方法的封装,在C语言层面上实现了该功能,并将函数名称巧妙地隐藏于结构体字段中。通过函数指针形式嵌入到结构体内,在编译完成后仅保留地址信息而去除了具体的名称与参数表描述内容。这种优化策略不仅降低了逆向工程的成本,还提升了攻击的难度。
2021-04-14 17:28:28.762113+0800 SignWithjsKey[23919:2084235] getGyqAppParams: {"api_version":"v1.1.4","appid":"3","time":"1618392508","operator":"中国电信","user_id":"https:\/\/kunnan.blog..net\/","vn":"1.0","device_id":"b8eeff0f1612d4b9fba63ba7b47dbf27","channel":"default","device_name":"iPhone8,1","os":"iOS","sign":"b2ad581d2e30730f3aed506fc7593957","openudid":"0dce01d7424ac836d33ef49e20019e920e847e96","token":"#公众号:iOS逆向","root":"1","idfv":"-D089-4021-82A9-65D8E400C711","height":"1334","width":"750","xyz":"0.006973,0.007675,-1.009369","os_version":"14.0","network":"no_network","vc":"1","idfa":"-3693-4940-BEAD-93C59E53FA55"}
通过获取示例代码包的链接:
应用背景:signing function
原理:通过优化手段来增强代码的安全性, 一种常用方法是将函数名隐藏在内部结构体中, 并以成员形式存储为函数指针. 最终生成后, 只保留地址信息, 同时去除了名称和参数表, 进一步提升了逆向工程的成本以及潜在攻击的难度.
文章:
4.3 基于NSURLProtocol拦截所有网络请求

[通过获取 demo资源: ()
文档:
应用场景:
2.1. 定制化的HTTP头信息
2.2. 根据需要为iOS设备配置代理IP和端口,并实现特定隧道IP与端口下的流量转发
2.3. 实现报文级的安全加密机制:通过[NetworkProtocol]动态绑定[NaturalLanguageProtocol]类以完成数据包级别的加密解密操作使用[ClassLoader]注入自定义[NaturalLanguageProtocol]类
- 原理:基于[NaturalLanguageProtocol]拦截HTTP/HTTPS通信
实现了一套完整的iOS底层网络请求拦截系统(适用于网页及AJAX等非WKWebView场景);
- 特色功能:针对DNS劫持问题提供全面解决方案;采用本地地址解析策略以避免DNS被劫持的风险(即直接从本地或指定服务器解析域名)。
V、 逆向
5.1 IPC
Inter process Communication
Inter process Communication
ASO项目使用的技术
1、官方下载链接:<>
2、相关文章:《Kun Nan的技术博客》- 文章标题
3、目标:希望能够在自己的deb文件中自带RocketBootstrap组件,并避免每次部署时都需要从BigBoss源进行更新。
4、相关阅读:[iOS AppStore Search optimize【ASO项目使用的技术
5.2 分析如何调用的ptrace,并hook ptrace
通过平台获取完整的演示文稿:[从下载完整Demo: ()
1、下载资源
2、个人仓库
3、文章:文章标题
4、“去掉ptrace思路”:
当程序运行时,在终端中使用debugserver *:1234 -a BinaryName运行后发现进程出现segmentfault 11错误时,则说明程序内部调用了ptrace。
验证是否调用了ptrace的方法是:在终端中执行debugserver -x backboard *:1234 /BinaryPath(其中/BinaryPath是完整路径),然后设置符号断点b ptrace并执行命令c,观察到ptrace第一行代码的位置后,在命令行中输入p $lr查找函数返回地址,并根据image list -o -f的 ASLR 偏移信息计算出原始地址。最后在 IDA 中找到调用ptrace的代码,并分析其调用方式。
开始对ptrace进行钩获。
5.3 进程间的实时通讯方案
local socket(解决扩展和容器应用的实时通讯问题)
1、下载地址:<>
2、原理文章:<>
通过Local Socket方案搭建服务端与客户端以实现通信效果。
3、应用场景:应对扩展及容器化应用中的实时通信需求
VI、iOS中tabBar按钮再次点击实现界面刷新
<>
iOS中tabBar按钮再次点击实现界面刷新
- 本文首发
<>
- 本文的demo 案例功能:
1、访问首页时建议用户再次点击tabBar以刷新界面数据
2、在刷新界面数据的同时建议用户旋转该图片
在上获取详细的下载地址示例链接:...
1、官方链接:
2、主要应用场景:该应用主要应用于其首屏功能区,并适配于其首屏功能区。该应用也适配于其首屏功能区,并支持在其首屏功能区运行。
3、核心特性:该应用的核心特性在于动态调整图标,在更新数据期间进行动态图标旋转变换。
<>
VII 、HTML字符串与富文本互转
1、下载链接:
2、文章具体内容位于:
3、应用场景描述:场景描述中展示返回内容时可以通过UILabel元素实现展示返回内容时

VIII、iOS开发效率工具
8.1 封装富文本API
封装富文本API
封装富文本API功能
1、原理文章:
借助block的优势与方法特性,在iOS平台中实现链式编程模式
2、功能:主要对...进行了封装处理以提升开发效率
3、下载地址:<>
IX、Q&A
9.1 请求参数签名相关问题及对应解决方案
<>
9.2 如何在安装完成后,在Xcode 12环境中编译时遇到编译错误:libAXIndicatorView无法找到?请指导解决方法

原因:无法获取 CocoaPods项目中的AXIndicatorView类。因为AXWebViewController项目依赖于该组件。


- 解决方法: 你更新 pod ‘AXWebViewController’ 即可。
1、仅更新指定的AXWebViewController相关资源包(Pod),其余资源包则不进行处理:
pod update AXWebViewController --verbose --repo-update
2、pod update操作会处理所有类资源包,并获取并使用最新版本的资源包内容
该文介绍了cocoapods这一高度可配置的构建工具及其在iOS开发中的应用优势,并详细说明了其主要功能特点及使用场景等信息
文章首先概述了cocoapods的基本概念及其在构建过程中所发挥的关键作用,并强调了其作为高度可配置构建工具的独特之处
接着文章深入探讨了cocoapods在iOS开发中的具体应用场景及操作流程,并通过实例展示了其高效便捷的特点
最后文章对cocoapods与传统构建工具相比的优势进行了全面对比分析,并总结了其在现代开发环境中的重要地位
exit 0% ➜ retail git:(develop) ✗ cat ~/bin/knpod
#!/bin/sh
#该命令只安装新添加的库,已更新的库忽略
pod install --verbose --no-repo-update
#该命令只更新指定的库,其它库忽略
#pod update 库名 --verbose --no-repo-update
exit 0% ➜ retail git:(develop) ✗
see also
iOS逆向
博主(
新兴才俊):
<>订阅号:解析iOS逆向技术(iosrev)

dto(Data Transfer Objects): 接口返回的原始数据
什么是API规则、ABI规则?
在编程中对一个函数的功能进行定义实现和使用时都需要遵循统一的标准规范
这些标准包含两个主要层面的要求:
一是规范性要求即对功能实现的具体方式作出规定
二是评价性要求即对功能实现的质量标准作出规定
- 高级语言层面上的规范被称为API规范;
- 在机器指令层面则由多种操作系统的差异及不同CPU架构导致的不同指令集与程序构造方式的存在,并因此,在系统层面的规则被称为ABI规范。
