Skip to content

iOS 类型别名 agent/src/ios/lib/types.ts ​

types.ts 把 Frida ObjC 桥返回的动态对象收窄为一组 TypeScript 类型别名(NSDictionary、NSString、NSFileManager、NSBundle、NSUserDefaults、NSHTTPCookieStorage、NSURLCredentialStorage、NSArray、NSData、NSMutableDictionary 等),供各模块在参数与变量标注时复用,统一类型表达。

📋 模块概览 ​

项目值
文件路径agent/src/ios/lib/types.ts
平台iOS
导出 RPC无(类型库)
依赖frida-objc-bridge

🎯 解决的问题 ​

  • 给 ObjC 动态对象提供统一的类型别名,避免每个模块各自写 ObjCTypes.Object | any。
  • 兼顾类型提示与运行时弹性:所有别名都是 ObjCTypes.Object | any,既能在 IDE 里提示 $className / objectForKey_ 等成员,又不阻止任意方法调用。
  • 集中维护 CoreFoundation 类型(CFDictionaryRef / CFTypeRef)的标注。

🏗️ 导出的方法 ​

符号说明
NSDictionary / NSMutableDictionaryFoundation 字典类型别名
NSStringFoundation 字符串别名
NSFileManager / NSBundle / NSUserDefaultsFoundation 管理类别名
NSHTTPCookieStorage / NSURLCredentialStorage网络/Cred 存储别名
NSArray / NSData集合/数据别名
CFDictionaryRef / CFTypeRefCoreFoundation 桥接类型

⚙️ 实现要点 ​

全部别名都落到 ObjCTypes.Object | any,any 是关键——Frida ObjC 桥对象的方法是动态分派的,TS 无法静态枚举,any 让任意 .method_() 调用合法:

ts
// agent/src/ios/lib/types.ts:3-12
export type NSDictionary = ObjCTypes.Object | any;
export type NSMutableDictionary = ObjCTypes.Object | any;
export type NSString = ObjCTypes.Object | any;
export type NSFileManager = ObjCTypes.Object | any;
export type NSBundle = ObjCTypes.Object | any;
export type NSUserDefaults = ObjCTypes.Object | any;
export type NSHTTPCookieStorage = ObjCTypes.Object | any;
export type NSURLCredentialStorage = ObjCTypes.Object | any;
export type NSArray = ObjCTypes.Object | any;
export type NSData = ObjCTypes.Object | any;

binarycookies.ts 用 NSData 标注从 NSArray 取出的元素(实际是 NSHTTPCookie,源码 :29),类型注释仅为开发提示,运行时不约束。filesystem.ts 用 NSStringType 别名(局部 import { NSString as NSStringType })避免与变量名冲突。

📐 调用关系 ​

🔍 源码索引 ​

符号位置
NSDictionary 等 10 个别名agent/src/ios/lib/types.ts:3
CFDictionaryRef / CFTypeRefagent/src/ios/lib/types.ts:14

🔗 相关文档 ​

基于 GPL-3.0-or-later 许可发布