如何通过URL Scheme自动创建Shortcuts快捷指令?求经验分享
解决iOS快捷指令自动预创建(保留手动保存步骤)的问题
你当前的问题出在URL Scheme的参数使用错误——url参数并不是用来传递快捷指令内容的,正确参数是shortcut,而且需要传入Base64编码后的快捷指令JSON数据,而非URL编码内容。
以下是具体实现步骤和示例代码:
1. 获取快捷指令的JSON模板
先在「快捷指令」APP里创建目标模板指令,长按指令→分享→拷贝快捷指令,将拷贝内容粘贴到文本编辑器中,即可得到对应的快捷指令JSON字符串。
2. 对JSON字符串进行Base64编码
把拿到的JSON字符串转换成Base64编码(注意不要包含多余空格或换行),Swift中可这样处理:
let shortcutJSON = """ { "WFWorkflowActions": [ { "WFWorkflowActionIdentifier": "is.workflow.actions.alert", "WFWorkflowActionParameters": { "WFAlertActionMessage": "Hello from Auto-Created Shortcut", "WFAlertActionTitle": "Test" } } ], "WFWorkflowClientVersion": "1.7", "WFWorkflowIcon": { "WFWorkflowIconGlyphNumber": 59519, "WFWorkflowIconImageData": null, "WFWorkflowIconStartColor": 4294924031 }, "WFWorkflowName": "Auto-Created Test", "WFWorkflowTypes": [ "NCWidget", "WatchKit", "ActionExtension" ] } """ // 转成Base64 guard let jsonData = shortcutJSON.data(using: .utf8), let base64String = jsonData.base64EncodedString(options: .endLineWithLineFeed) else { return }
3. 构造正确的Shortcuts URL Scheme
用shortcut参数传入Base64编码后的内容,同时可通过name参数预设指令名称:
let shortcutURLString = "shortcuts://create-shortcut?name=Auto-Created Test&shortcut=\(base64String)" guard let createShortcutURL = URL(string: shortcutURLString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!) else { return } UIApplication.shared.open(createShortcutURL, options: [:], completionHandler: { success in if success { // 成功打开快捷指令APP,用户可看到预填充好的指令,手动点击保存即可 } else { // 处理打开失败的情况 } })
关键注意事项
- 确保JSON格式完全符合快捷指令规范,导出的模板JSON是最可靠的参考
- Base64编码需基于UTF-8编码的JSON数据,避免出现编码错误
- iOS 12及以上版本基本支持该URL Scheme,部分参数可能在新版本有微调
这样处理后,调用代码会直接打开快捷指令APP并加载预设的指令内容,用户仅需手动完成保存操作,符合你保留交互步骤的需求。
内容的提问来源于stack exchange,提问作者l0tze
相关产品推荐
相关产品推荐

