通过手机自带的快捷指令截屏,然后把图片共享给自己的share Extension扩展, 系统APP快捷指令,其中有一条指令是 与App共享,当我选择这条指令后选择APP里面只有默认的备忘录、健康、提醒事项、无边际 四个APP,我想把我自己的APP加入其中,并生成iCloud链接,好在APP里面自动跳转到这个快捷指令,请问该如何实现!我需要具体的操作步骤!
2条回答 默认 最新
檀越@新空间 2025-12-03 16:37关注下午好🌅🌅🌅
本答案参考通义千问要实现通过 iOS 系统自带的快捷指令(Shortcuts) 实现 截屏 + 通过 Share Extension 扩展分享到自己的 App,并让自己的 App 出现在“与App共享”列表中,同时生成 iCloud 链接,以便在 App 内自动跳转到该快捷指令,你需要进行以下步骤:
✅ 一、准备工作
1. 确保你的 App 支持 Share Extension
- 在 Xcode 中创建一个 Share Extension(即
ShareExtensiontarget)。 - 在
Info.plist文件中配置NSExtension的类型为Share。 - 确保在 App 的主 Target 中添加了
Share Extension的依赖。
注意: Share Extension 是 iOS 10 之后引入的,不支持 iOS 9 及更早版本。
✅ 二、让自己的 App 显示在“与App共享”列表中
2. 配置 Share Extension 的 Info.plist 文件
在
ShareExtension/Info.plist文件中,添加以下字段:<key>NSExtension</key> <dict> <key>NSExtensionPrincipalClass</key> <string>$(PRODUCT_MODULE_NAME).ShareViewController</string> <key>NSExtensionPointIdentifier</key> <string>com.apple.share</string> </dict> <key>NSExtensionAttributes</key> <dict> <key>NSExtensionActivationRule</key> <string>WKUTTypeImage OR WKUTTypePNG OR WKUTTypeJPEG OR WKUTTypeTIFF OR WKUTTypeGIF</string> </dict>这些配置告诉系统,你的 Share Extension 可以处理图像类内容(如截图),从而出现在“与App共享”列表中。
✅ 三、在 Share Extension 中接收图片并生成 iCloud 链接
3. 在 ShareViewController 中接收图片并上传到 iCloud
a. 获取用户分享的内容
在
ShareViewController.swift中重写以下方法:override func didSelectPost() { guard let item = extensionContext?.inputItems.first as? NSExtensionItem, let attachment = item.attachments.first as? NSLabeledData else { return } // 获取图片数据 attachment.loadItem(forType: kUTTypeImage as String, completionHandler: { (data, error) in if let image = data as? UIImage { // 处理图片,比如上传到 iCloud 或本地 self.uploadToiCloud(image: image) } }) }b. 将图片上传到 iCloud 并生成链接
你可以使用 iCloud Drive API 或 Firebase Storage 等方式上传图片,并返回一个 URL。这里以 Firebase 为例:
func uploadToiCloud(image: UIImage) { guard let imageData = image.jpegData(compressionQuality: 0.8) else { return } let storageRef = Storage.storage().reference().child("screenshots/\(UUID().uuidString).jpg") storageRef.putData(imageData, completion: { _, error in if let error = error { print("Upload failed: $error)") return } storageRef.downloadURL { url, _ in if let link = url?.absoluteString { self.openAppWithLink(link: link) } } }) }
✅ 四、在 App 中打开快捷指令页面
4. 生成 URL Scheme 或 Universal Link
为了在 App 中跳转到特定的快捷指令,你有两种方式:
方式一:自定义 URL Scheme
在
Info.plist中添加:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>com.yourapp.scheme</string> <key>CFBundleURLSchemes</key> <array> <string>yourapp</string> </array> </dict> </array>然后在 App 中监听该 scheme:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { if url.scheme == "yourapp" { // 打开指定的快捷指令页面 if let shortcutID = url.host { // 使用 Shortcut API 打开快捷指令 let shortcut = Shortcut(identifier: shortcutID) shortcut.open() } } return true }注意: iOS 不允许直接从 App 打开快捷指令,但可以通过
ShortcutAPI 触发执行。方式二:Universal Link(推荐)
设置 Universal Link 后,可以在 App 中直接跳转到快捷指令的网页版或自定义页面。
✅ 五、在快捷指令中生成链接并分享到你的 App
5. 在快捷指令中添加“打开 App”动作
- 打开 快捷指令 App。
- 创建新快捷指令。
- 添加 “打开 App” 动作,选择你的 App。
- 添加 “分享” 动作,选择 “与App共享”,然后选择你的 App。
- 最后添加 “生成链接” 动作,将链接保存为文件或发送给用户。
你也可以通过代码动态生成链接,让用户点击后自动跳转到你的 App。
✅ 六、测试和调试
6. 测试流程
- 在快捷指令中截屏并选择“与App共享”,确保你的 App 出现在列表中。
- 点击你的 App,触发 Share Extension。
- 检查是否成功上传图片并生成链接。
- 通过 URL 跳转到你的 App,并验证是否能正确打开快捷指令。
✅ 七、完整解决方案总结(有序列表)
-
创建 Share Extension:
- 在 Xcode 中新建
Share ExtensionTarget。 - 配置
Info.plist以支持图像类型。
- 在 Xcode 中新建
-
实现 Share Extension 的图片接收功能:
- 在
ShareViewController.swift中接收图片并上传到 iCloud。
- 在
-
生成 iCloud 链接:
- 使用 Firebase 或 iCloud Drive 存储图片并生成下载链接。
-
在 App 中处理链接:
- 设置 URL Scheme 或 Universal Link,用于跳转到快捷指令。
-
在快捷指令中添加“与App共享”动作:
- 确保你的 App 出现在“与App共享”列表中。
-
测试整个流程:
- 截图 → 选择你的 App → 上传图片 → 生成链接 → App 跳转到快捷指令。
✅ 八、示例代码片段(修改后的 ShareViewController)
import UIKit import MobileCoreServices class ShareViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) } override func didSelectPost() { guard let item = extensionContext?.inputItems.first as? NSExtensionItem, let attachment = item.attachments.first as? NSLabeledData else { return } attachment.loadItem(forType: kUTTypeImage as String, completionHandler: { (data, error) in if let image = data as? UIImage { self.uploadToiCloud(image: image) } }) } func uploadToiCloud(image: UIImage) { guard let imageData = image.jpegData(compressionQuality: 0.8) else { return } let storageRef = Storage.storage().reference().child("screenshots/\(UUID().uuidString).jpg") storageRef.putData(imageData, completion: { _, error in if let error = error { print("Upload failed: $error)") return } storageRef.downloadURL { url, _ in if let link = url?.absoluteString { self.openAppWithLink(link: link) } } }) } func openAppWithLink(link: String) { if let url = URL(string: "yourapp://shortcutID") { UIApplication.shared.open(url, options: [:], completionHandler: nil) } } }
✅ 九、注意事项
- 权限问题:确保你的 App 和 Share Extension 有正确的权限。
- iCloud 配置:如果使用 iCloud,需在 Apple Developer 中启用 iCloud 服务。
- 快捷指令限制:iOS 不允许直接从 App 打开快捷指令,只能通过 URL Scheme 或 Universal Link 跳转。
如果你需要进一步帮助,例如如何设置 Firebase、iCloud 或 Universal Link,请告诉我!我可以提供详细教程。
解决 无用评论 打赏 举报- 在 Xcode 中创建一个 Share Extension(即