mirror of
https://github.com/NohamR/knowledge-kit.git
synced 2026-05-25 12:27:15 +00:00
3.6 KiB
3.6 KiB
统跳
定义:
使用统一的 URL 来描述特定的业务功能,并通过路由映射到任意资源目标,并基于此可实现 rewrite、埋点、监控、灰度、A/B 等功能
iOS非统跳接口调用检测设计方案
工作原理
由于ObjectC语言自身的限制,获取编译时的调用关系信息相对较为困难。因此,没有一个简便的方法获取到哪些接口调用了SDK中的方法。
ObjectC语言继承自C语言的头文件引用的机制,可以作为检测的点。即,如果App中调用了SDK中的某个方法,那么一定会直接或者间接引用了SDK中的某个头文件。通过检测引用头文件,引导iOS开发删除对应SDK的头文件,那么应该可以暴露出App中直接调用SDK接口的位置。从而达到辅助检测非统跳接口的目的。
配置文件 配置文件主要用于在检测过程中,提供工程的目录结构相关信息。在生成过程中,提供生成结果文件需要的额外信息。
category: login_register_sdk
plist: Example/LoginRegisterSDK/LoginRegisterSDK-Info.plist
workspace: Example/LoginRegisterSDK.xcworkspace
xcodeproj: Example/LoginRegisterSDK.xcodeproj
scheme: LoginRegisterSDK-Example
source_directory: LoginRegisterSDK/
pods_directory: Example/Pods
ignore:
- LoginRegisterSDK/**/*SDK.m
调用流程
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[TNTRouter sharedRouter] manuallyFetchRoutingTableWithCompletion:^(BOOL succeeded) {
}];
});
return YES;
}
- (void)manuallyFetchRoutingTableWithCompletion:(TNTManualFetchRoutingTableCompletion)completion {
NSDictionary *params = [self getRouterRequestParams];
[TMTrinityMGetTask manuallyFetchWithKey:TMNeutronRouterRewriteKey
params:params
moduleCallback:^(NSString * _Nullable result, NSError * _Nullable error) {
if (error) return ;
if (result.length == 0) return;
// encryp & json
NSDictionary *routesAndWrites = [self routesAndRewriteForRemoteEncryptedString:result];
// routes is existed
if (routesAndWrites) {
// process routes
[self loadRoutesAndWritesFromRemote:routesAndWrites];
// save decrpy data string
[self saveRemoteRouteString:result];
if(completion) completion(true);
}
} callback:nil];
}
参考资料
之前看代码理解设计太慢了,不清楚设计背景,所以想请教你一下
- 使用统一的 URL 来描述特定的业务功能,并通过路由映射到任意资源目标,并基于此可实现 rewrite、埋点、监控、灰度、A/B 等功能 如何理解rewrite、埋点、监控、灰度、A/B 等功能。
用统跳 url 后,调用某 SDK ,区分 type,h5、RN、Native,native 则 runtime,performSelector, H5、RN 没看到处理逻辑?
- 通跳的设计背景是什么?解决业务上什么问题?举个例子理解下工作流程
- RoutingTableGenerator.rb 扫描工程 TNT_TARGET,写入 Targets.json 的目的是什么?
- DefaultRoutingTableFetcher.rb 调用接口,写入文件
- ProjectConfigurator.rb 调用上述2个脚本,写入工程 script
- TrinityParams 和 TrinityConfigurator 2个 SDK 背景、作用分别是什么?