Install
openclaw skills install ios-moblink-integration面向 iOS 工程的 MobTech MobLink 集成 skill。默认先扫描工程,优先使用 CocoaPods,以最小改动完成场景还原依赖接入、Info.plist 配置、隐私合规、getMobId 制作场景、恢复代理回调和项目内说明文档落地。
openclaw skills install ios-moblink-integration当用户希望把 MobTech MobLink 集成到 iOS 工程,或者排查已有 MobLink 接入问题时,使用本 skill。
当用户提到以下任一主题时,使用本 skill:
mob_linksdk_proInfo.plist 配置uploadPrivacyPermissionStatus 调用时机getMobId / MLSDKScene / MobLink setDelegate:IMLSDKWillRestoreScene / UIViewController+MLSDKRestore如果用户问题明确与 iOS MobLink 接入、工程配置、场景制作、场景还原、隐私合规或扩展业务采集控制有关,应优先使用本 skill。
优先使用以下线上资料,不依赖本机资料路径:
以下信息已经可作为执行依据,不需要再猜测:
Xcode 9.1.0+、iOS 8.0+pod 'mob_linksdk_pro'MobLinkPro.framework 与 MOBFoundation.frameworklibsqlite3、libz1.2.5、libc++Info.plist 需要配置 MOBAppKey 与 MOBAppSecretplist 中增加 MOBNetLater = 2uploadPrivacyPermissionStatus 是 MobSDK 业务起点,必须在用户同意隐私政策后、使用 SDK 能力前调用uploadPrivacyPermissionStatus:onResult: 回传隐私授权结果uploadPrivacyPermissionStatus:privacyDataDelegate:onResult: 同时接入 MOBFoundationPrivacyDelegate 主动控制器[MobLink setDelegate:self] 设置场景恢复代理MLSDKScene 和 [MobLink getMobId:result:][MLSDKScene sceneForPath:params:]UIViewController+MLSDKRestore 中的 initWithMobLinkScene:IMLSDKWillRestoreScene:Restore: 一旦实现,必须执行 restoreHandlerMOBFoundationPrivacyDelegate 实现以下内容在当前资料里没有被稳定、明确地定义,禁止猜:
如果缺这些信息且会阻塞安全修改,必须明确写:
文档未明确,需向用户确认
CocoaPodsBundle ID、Target 名称、Info.plist 路径、入口类名,因为这些应由扫描工程自动推断pod install、xcodebuild 或其他会改动依赖状态的命令,先展示计划,再执行Pods/ 提交进项目;如项目未忽略 Pods/,补充 .gitignore,保留 Podfile 与 Podfile.lock严格按以下顺序推进:
优先扫描以下内容:
.xcodeproj / .xcworkspacePodfilePodfile.lockPackage.swiftAppDelegate / SceneDelegate / SwiftUI @mainInfo.plistMobLink、MobLinkPro、MOBAppKey、MOBAppSecret、MOBNetLater、uploadPrivacyPermissionStatus.gitignore 是否忽略 Pods/.xcworkspace 是否包含 contents.xcworkspacedata推荐命令:
rg --files -g '*.xcodeproj' -g '*.xcworkspace' -g 'Podfile' -g 'Podfile.lock' -g 'Package.swift' -g '*Info.plist' -g '*.entitlements' -g '.gitignore'rg --files -g '*.m' -g '*.h' -g '*.mm' -g '*.swift'rg -n 'MobLink|MobLinkPro|MLSDKScene|IMLSDKRestoreDelegate|IMLSDKWillRestoreScene|UIViewController\\+MLSDKRestore|MOBAppKey|MOBAppSecret|MOBNetLater|uploadPrivacyPermissionStatus|CFBundleURLSchemes|com.apple.developer.associated-domains|SWIFT_OBJC_BRIDGING_HEADER'扫描后先给一段简短结论,至少包含:
Podfile、Podfile.lock、Pods/、*.xcworkspace/contents.xcworkspacedataMobLink_iOS_Config.xlsx如果 {path} 下还没有 MobLink_iOS_Config.xlsx:
assets/generate_excel_template.pyassets/MobLink_iOS_Config_Template.xlsx 复制到 {path} 下{path} 下命名为 MobLink_iOS_Config.xlsx必须明确告诉用户只需要填写这些最小字段:
appKeyappSecretneedUniversalLink同时明确说明以下内容不需要填表:
Bundle IDInfo.plist 路径getMobId 调用入口其中工程信息应由 Agent 扫描后推断;业务落点、页面路径和 Web 配置必须在基础接入完成后按单个阻塞问题逐步确认。
读取 MobLink_iOS_Config.xlsx 后,至少校验:
appKey:必填,按字符串处理,不做数值推断appSecret:必填,按字符串处理,不做数值推断needUniversalLink:必须明确是 是 / 否如不合法,列出具体问题并要求用户修正,不要继续改工程。
读取配置后,再次结合工程做推断:
{Target}-Bridging-Header.h 与 SWIFT_OBJC_BRIDGING_HEADER如果存在多个候选入口,只问一个阻塞问题:
我找到多个可能的场景恢复入口:A、B。你希望 MobLink 恢复回调接到哪一个?
修改前必须展示计划并等待用户确认。
计划至少覆盖:
Podfile:添加 pod 'mob_linksdk_pro'Info.plist:添加或更新 MOBAppKey、MOBAppSecret、MOBNetLater = 2libsqlite3、libz1.2.5、libc++MobLink delegateuploadPrivacyPermissionStatusIMLSDKRestoreDelegateMobLink_README.md如果用户选择 needUniversalLink = 是,计划中只写“检查并补充 Associated Domains / URL Scheme 的项目配置建议”,不要猜具体域名;具体 Host 必须从 MobLink 后台配置或用户提供的信息确认。
优先在已有 App Target 的 target 块中添加:
pod 'mob_linksdk_pro'
如果已有该依赖,不重复添加。
如果项目没有 Podfile,先说明将创建最小 Podfile,并展示内容等待确认。
如果项目明确使用手动导入,不强行改为 CocoaPods;改为输出手动集成检查清单:
MobLinkPro.frameworkMOBFoundation.frameworklibsqlite3libz1.2.5libc++写入或更新:
MOBAppKey = Excel 中的 appKeyMOBAppSecret = Excel 中的 appSecretMOBNetLater = 2保留已有无关配置。
Objective-C 工程优先使用:
#import <MobLinkPro/MobLink.h>
#import <MobLinkPro/IMLSDKRestoreDelegate.h>
在合适入口调用:
[MobLink setDelegate:self];
如果 AppDelegate 需要承载恢复代理,声明应包含:
<IMLSDKRestoreDelegate>
Swift 工程若需要调用 Objective-C SDK:
必须在用户同意隐私政策后、使用 MobLink 能力前调用。
在插入任何隐私授权代码前,必须先向用户说明:
根据 MobTech 隐私合规要求和中国区 App 上架规范,使用 MobLink 需要在用户同意隐私政策后才能初始化或使用 SDK。
你需要在 App 中:
1. 首次启动时展示《隐私政策》弹窗
2. 用户点击“同意”按钮后,调用隐私授权代码
3. 用户点击“不同意”则不应调用 MobLink SDK
请告知我:用户点击隐私政策“同意”按钮的回调代码在哪个文件、哪个方法中?
如果扫描工程已经找到明显候选位置,只能问:
我找到疑似隐私同意回调:{file}:{method}。是否把 MobLink 隐私授权回传放在这里?
用户未确认前,不得把 uploadPrivacyPermissionStatus 接入按钮、启动入口或任何占位方法。
通用方案:
#import <MOBFoundation/MobSDK+Privacy.h>
[MobSDK uploadPrivacyPermissionStatus:YES onResult:^(BOOL success) {
// 业务逻辑不要依赖 success,建议调用后继续业务流程
}];
如果用户明确需要限制扩展业务数据采集,再接入主动控制器:
#import <MOBFoundation/MOBFoundation.h>
MobCustomController *privacyDataService = [MobCustomController new];
[MobSDK uploadPrivacyPermissionStatus:YES privacyDataDelegate:privacyDataService onResult:^(BOOL success) {
}];
主动控制器可覆盖的数据项包括:
isLocInfoEnable / getLocisIdfaEnable / getIdfaisIdfvEnable / getIdfvisWiFiInfoEnable / getSSID / getBSSIDisIpEnable / getCellIpv4 / getCellIpv6 / getWifiIpv4 / getWifiIpv6如果项目已有隐私同意链路,应先向用户确认“是否把调用放在这里”,不要同时再问别的问题。
基础 SDK 接入完成后,才进入业务接线。
如果用户尚未指定制作 MobId 的业务入口,先问一个问题:
请告诉我哪个页面或按钮需要生成 MobLink 场景链接。
用户未确认 API 插入位置前,不得把 getMobId 接入示例按钮、占位方法或任意业务方法。确认后再展示将要修改的文件和方法。
获取 MobId 的核心示例:
#import <MobLinkPro/MobLink.h>
#import <MobLinkPro/MLSDKScene.h>
NSMutableDictionary *customParams = [NSMutableDictionary dictionary];
customParams[@"key"] = @"value";
MLSDKScene *scene = [MLSDKScene sceneForPath:@"已在 MobLink 后台配置的渠道标识" params:customParams];
[MobLink getMobId:scene result:^(NSString *mobId, NSString *domain, NSError *error) {
if (mobId.length > 0) {
// mobId 可拼接到推广链接;domain 为后台生成的 Universal Link
}
}];
注意:
sceneForPath: 的 path 必须与 MobLink 后台配置一致params 用于场景还原时回传业务参数需要恢复的控制器可实现:
#import <MobLinkPro/MLSDKScene.h>
#import <MobLinkPro/UIViewController+MLSDKRestore.h>
- (instancetype)initWithMobLinkScene:(MLSDKScene *)scene
{
if (self = [super init]) {
self.scene = scene;
}
return self;
}
如果控制器使用 xib 初始化,必须用对应 xib 初始化方式,不要直接套用默认 init。
实现代理时,一旦实现 IMLSDKWillRestoreScene:Restore:,必须执行 restoreHandler:
- (void)IMLSDKWillRestoreScene:(MLSDKScene *)scene Restore:(void (^)(BOOL isRestore, RestoreStyle style))restoreHandler
{
NSLog(@"MobLink restore path: %@", scene.path);
restoreHandler(YES, MLDefault);
}
可选实现:
IMLSDKCompleteRestore:IMLSDKNotFoundScene:如果用户希望自行路由恢复场景,可将 restoreHandler(NO, MLDefault) 与项目路由逻辑结合,但必须先展示方案并等待确认。
如果改了 Podfile,先问用户是否运行:
pod install
运行后验证:
.xcworkspace 是否生成或更新Podfile.lock 是否包含 mob_linksdk_pro.xcworkspace 打开如用户允许构建,再运行合适的 xcodebuild 命令;否则只给手动验证清单。
完成后在用户项目根目录生成 MobLink_README.md,内容至少包括:
Info.plist 项交付前至少检查:
Podfile 中 mob_linksdk_pro 未重复Info.plist 中存在 MOBAppKey、MOBAppSecret、MOBNetLater = 2uploadPrivacyPermissionStatusMobLink setDelegate: 已接入IMLSDKWillRestoreScene:Restore: 如已实现,必定调用 restoreHandlerMobLink_README.md 已写入官方文档链接setDelegate: 是否在启动早期执行,delegate 生命周期是否有效。mobId 为空,检查 appKey、appSecret、隐私授权回传和网络请求结果。MOBNetLater = 2 和 uploadPrivacyPermissionStatus 时机。