Install
openclaw skills install ios-smssdk-integration面向 iOS 工程的 MobTech SMSSDK 短信验证集成 skill。默认先扫描工程,优先使用 CocoaPods,以最小改动完成依赖接入、隐私合规、短信验证码发送/校验链路和项目内说明文档落地。
openclaw skills install ios-smssdk-integration当用户希望把 MobTech SMSSDK 集成到 iOS 工程,或者排查已有 SMSSDK 接入问题时,使用本 skill。
当用户提到以下任一主题时,使用本 skill:
mob_smssdk CocoaPods 配置Info.plist 配置uploadPrivacyPermissionStatus 调用时机getVerificationCodeByMethod 用法commitVerificationCode 用法如果用户问题明确与 iOS 短信验证接入、工程配置、隐私合规、验证码发送/提交、本机号码认证或错误码排查有关,应优先使用本 skill。
以下信息已经可作为执行依据,不需要再猜测:
Xcode 9.1.0+、iOS 8.0+CocoaPods 和手动导入两种集成方式pod 'mob_smssdk'MOBFoundation.framework 与 SMS_SDK.frameworklibz.tbd、libicucore.tbd、MessageUI.framework、JavaScriptCore.framework、libc++.tbdSystemConfiguration.framework、CoreTelephony.framework、AdSupport.frameworkInfo.plist 需要配置 MOBAppKey 与 MOBAppSecretplist 中添加 MOBNetLater = 2uploadPrivacyPermissionStatus 是 MobSDK 隐私授权回传接口,必须在用户同意隐私政策之后、使用 SDK 功能之前调用uploadPrivacyPermissionStatus 回传同意结果,也不能继续使用 SMSSDK 能力getVerificationCodeByMethod:phoneNumber:zone:template:result:SMSGetCodeMethodSMS 表示文本短信验证码,SMSGetCodeMethodVoice 表示语音验证码commitVerificationCode:phoneNumber:zone:result:zone 是区域号,不要加 +template 参数不能乱填,没有模板时可以先传空字符串或 nilgetMobileAuthTokenWith: 和 verifyMobileWithPhone:token:completion: 用于本机号码认证相关流程SMS_SDK.framework 的 module umbrella header 是 SMSHeader.h;当代码直接使用 SMSSDKAuthToken 等类型时,应优先导入 <SMS_SDK/SMSHeader.h>,避免只导入 <SMS_SDK/SMSSDK.h> 触发模块导入顺序错误MOBFoundationPrivacyDelegate 控制地理位置、WiFi、IP 等扩展业务相关数据采集uploadPrivacyPermissionStatus:privacyDataDelegate:onResult: 传入,也可以通过 [MobSDK setPrivacyDataDelegate:] 设置以下内容在当前资料里没有被稳定、明确地定义,禁止猜:
-ObjC、Bitcode、Privacy Manifest 或额外苹果隐私文件如果缺这些信息且会阻塞安全修改,必须明确写:
文档未明确,需向用户确认
CocoaPodsBundle ID、Target 名称、入口类名、Info.plist 路径,因为这些应由扫描工程自动推断pod install、xcodebuild 或其他会改动依赖状态的命令,先展示计划,再执行Pods/ 提交进项目;如项目未忽略 Pods/,补充 .gitignore,保留 Podfile 与 Podfile.lock严格按以下顺序推进:
优先扫描以下内容:
.xcodeproj / .xcworkspacePodfilePodfile.lockPackage.swiftAppDelegate / SceneDelegate / SwiftUI @mainInfo.plistSMSSDK、SMS_SDK、MOBFoundation、MOBAppKey、MOBAppSecret、MOBNetLater.gitignore 是否忽略 Pods/.xcworkspace 是否包含 contents.xcworkspacedata推荐命令:
rg --files -g '*.xcodeproj' -g '*.xcworkspace' -g 'Podfile' -g 'Podfile.lock' -g 'Package.swift' -g '*Info.plist' -g '.gitignore'rg --files -g '*.m' -g '*.h' -g '*.mm' -g '*.swift'rg -n 'SMSSDK|SMS_SDK|MOBFoundation|MOBAppKey|MOBAppSecret|MOBNetLater|uploadPrivacyPermissionStatus|getVerificationCodeByMethod|commitVerificationCode|SWIFT_OBJC_BRIDGING_HEADER'扫描后先给一段简短结论,至少包含:
Podfile、Podfile.lock、Pods/、*.xcworkspace/contents.xcworkspacedataSMSSDK_iOS_Config.xlsx如果用户项目根目录还没有 SMSSDK_iOS_Config.xlsx:
assets/generate_excel_template.pyassets/SMSSDK_iOS_Config_Template.xlsx 复制到用户项目根目录SMSSDK_iOS_Config.xlsx必须明确告诉用户只需要填写这些最小字段:
appKeyappSecret同时明确说明以下内容不需要填表:
Bundle IDTargetInfo.plist 路径其中工程信息应由 Agent 扫描后推断;扩展业务主动控制器不作为前置配置项,只在最终文档中说明。
读取 SMSSDK_iOS_Config.xlsx 后,至少校验:
appKey:必填,按字符串处理,不做数值推断appSecret:必填,按字符串处理,不做数值推断短信签名是否已申请:必须明确是 是 / 否是否需要语音验证码:必须明确是 是 / 否是否需要本机号码认证:必须明确是 是 / 否如不合法,列出具体问题并要求用户修正,不要继续改工程。
如果 短信签名是否已申请 = 否,仍可继续做技术接入,但必须提醒:默认签名仅用于测试,不保证到达率,上线前必须申请自定义签名。
读取配置后,再次结合工程做推断:
{Target}-Bridging-Header.h 与 SWIFT_OBJC_BRIDGING_HEADER如果无法稳定定位隐私同意回调,且需要写代码,只问一个阻塞问题:
请告诉我用户点击同意隐私政策后会进入哪个文件或方法,我会把 uploadPrivacyPermissionStatus 接在那里。
如果无法稳定定位验证码发送入口,且用户要求自动接线,只问一个阻塞问题:
请告诉我验证码发送按钮或对应 ViewModel 方法在哪个文件,我会把 getVerificationCodeByMethod 接在那里。
不要同时问多个阻塞问题。
修改前必须展示最小改动计划,包含:
Podfile 是否会加入 pod 'mob_smssdk'Info.plist 将写入或校正的键:MOBAppKey、MOBAppSecret、MOBNetLateruploadPrivacyPermissionStatus 的位置getVerificationCodeByMethod 的位置commitVerificationCode 的位置SMSSDK_README.mdpod install 或构建验证如果某一步无需修改,应直接说明“无需修改”,然后进入下一步。
默认优先 CocoaPods:
pod 'mob_smssdk'pod install 后确认 *.xcworkspace/contents.xcworkspacedata 已生成pod install 可能需要写用户级 CocoaPods cache 或 spec repo;如遇 ~/Library/Caches/CocoaPods、~/.cocoapods/repos/trunk、Operation not permitted @ rb_sysopen 等权限错误,应按当前执行环境申请授权后重试pod install 修改 .xcodeproj,不要再手写重复的 Pods framework、xcconfig、shell script phasepod install如果用户明确要求手动导入:
MOBFoundation.framework 与 SMS_SDK.framework 加入工程Info.plistInfo.plist 配置默认写入或校正:
MOBAppKeyMOBAppSecretMOBNetLater = 2不要把 appKey、appSecret 写进源代码,除非用户明确要求代码初始化且官方资料确认支持。
在用户同意隐私政策后、首次使用 SMSSDK 能力前接入:
#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) {
}];
若项目不是每次启动都会调用隐私提交接口,但又需要每次启动设置主动控制器,可按官方资料使用:
[MobSDK setPrivacyDataDelegate:privacyDataService];
建议流程:
uploadPrivacyPermissionStatusgetVerificationCodeByMethodcommitVerificationCodeObjective-C 请求验证码示例:
#import <SMS_SDK/SMSHeader.h>
[SMSSDK getVerificationCodeByMethod:SMSGetCodeMethodSMS
phoneNumber:phoneNumber
zone:zone
template:@""
result:^(NSError *error) {
if (!error) {
// 请求成功
} else {
// 处理 error
}
}];
Objective-C 提交验证码示例:
[SMSSDK commitVerificationCode:code
phoneNumber:phoneNumber
zone:zone
result:^(NSError *error) {
if (!error) {
// 验证成功
} else {
// 处理 error
}
}];
Swift 工程:
<SMS_SDK/SMSHeader.h> 和 <MOBFoundation/MobSDK+Privacy.h>NSString、BOOL、NSError 信息字符串或 id,避免在 Swift 接口中直接暴露 SDK 私有模型类型id 校验并转换为 SMSSDKAuthToken *import SMS_SDK桥接头示例:
#import "SMSSDKBridge.h"
Objective-C wrapper 导入示例:
#import <MOBFoundation/MobSDK+Privacy.h>
#import <SMS_SDK/SMSHeader.h>
只有用户明确需要时,才继续接入以下能力:
SMSGetCodeMethodSMS 改为 SMSGetCodeMethodVoicegetMobileAuthTokenWith:verifyMobileWithPhone:token:completion:MOBFoundationPrivacyDelegate可选能力修改前仍需展示计划,不要在主流程里默认加入。
完成改动后,按条件执行:
pod installpod install 成功后,记录 Podfile.lock 中实际安装的 mob_smssdk、MOBFoundation 以及传递依赖版本pod install 成功后,确认根目录或项目目录下生成的 *.xcworkspace/contents.xcworkspacedata 指向真实 .xcodeproj 与 Pods/Pods.xcodeprojxcodebuild -list -workspace <workspace> 检查 workspace 是否能被 Xcode 解析xcodebuild 无法访问 CoreSimulator、Xcode 用户目录或 ~/Library/Logs/CoreSimulator,应按当前环境申请授权后重试xcodebuild 报 '<name>.xcworkspace' is not a workspace file,但 contents.xcworkspacedata 存在且 XML 正常,应先用授权后的 xcodebuild -list -workspace <workspace> 复核;不要直接改 workspacexcodebuild -list 能列出 schemes,说明 workspace 本身有效,继续使用授权后的构建命令验证然后生成项目内 SMSSDK_README.md,至少包含:
appKey / appSecret 的配置位置MOBNetLater = 2 的配置位置uploadPrivacyPermissionStatus 的调用位置Podfile、Podfile.lock、实际安装的 SMSSDK 版本遇到失败时优先检查:
uploadPrivacyPermissionStatusMOBNetLater 是否已配置为 2MOBAppKey / MOBAppSecret 是否和 MobTech 后台一致phoneNumber、zone、code 是否为空或格式错误zone 是否误加了 +template 是否填写了不存在、未审核或非 SDK 模板AppSecret 错误Definition of 'SMSSDKAuthToken' must be imported from module 'SMS_SDK.SMSSDKAuthToken' before it is required 时,把 SMSSDK 相关导入改为 <SMS_SDK/SMSHeader.h>,并确保 wrapper 使用该 umbrella headerxcodebuild 在普通沙箱下误报 workspace 无效时,先检查 contents.xcworkspacedata,再授权运行 xcodebuild -list -workspace 复核pod install 或构建前先征求确认