在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程转载地址:http://swift.gg/2016/06/28/adding-siri-to-ios-10-apps-in-swift-tutorial/
下载 Xcode 8,配置 iOS 10 和 Swift 3(可选)通过命令行编译除非你想使用命令行编译,使用 Swift 3.0 的工具链并不需要对项目做任何改变。如果你想的话,打开 Xcode-beta,然后从顶部菜单栏中选择 Xcode > Preferences,接着选择 Location,在页面的底部,你会看到「Command Line Tool」这行设置,请在这里选择 Xcode 8.0。 现在,在 Terminal 使用命令行找到工程所在的文件夹,调用 (可选)移植现有的 Swift 2 应用如果你想对一个已使用 Swift 2.0 开发的工程引入 Siri 功能,需要点击工程,选择 Build Settings,在 Swift Compiler - Version 下面,找到 Use Legacy Swift Language Version 选项,设置成 No。这会造成编译器报错,然后你可以根据这些报错信息来修改代码,推荐你使用这个设置来更新代码,以适应 Swift 不断进化的语义。 开始使用 SiriKit首先,在你的 App(或者是新建一个单视图的 Swift 模板工程),点击顶部的工程,然后点击左侧下方的 + 按钮,在这里(译者注:我在这里添加了一张图片,能够说的更明白)点击。 弹出的窗口中,选择 iOS > Application Extension,接着选择 Intents Extension。 这样就给工程添加了一个新的 intent,用于监听 Siri 的命令。其中的 Product Name 应该和你的工程文件名字相似,比如,你的 App 名为 MusicMatcher,你可以把这个 intent 的名字命名为 MusicMatcherSiriIntent。一定要选中 Include UI Extension 选项,我们之后会用到,这也是添加额外扩展的最简单的方法。 我刚刚创建的两个新 target 可以从项目的文件层级上找到。找到 Intent 文件夹下的 IntentHandler.swift 文件,看一下这里面的样本代码。默认会提供一些示例代码,允许用户说一下诸如「用 MusicMatcher 开始锻炼」的命令,MusicMatcher 是 App 的名字。 像这样运行示例应用这个时候最好编译一下代码,然后在 iOS 真机上试一下命令。继续,编译应用的 target,从 Scheme 下拉菜单里选择 MusicMatcher,然后选择真机,点击 Run。 你看你会看到一个空白的应用出现,你使用的扩展这时会在后台加载到设备的系统文件里,现在点击 Stop 按钮来关闭应用。 接下来,找到你的 scheme,选择 Intent target,点击 Run。 这时会出现一个弹出框,问你需要连接哪个应用,选择你刚刚运行的应用:MusicMatcher。这会让真机上再次出现这个应用(还是一个空白的应用),不过这次调试台(debugger)中会出现连接的 Intent 扩展。 现在点击 home 按钮回到首屏,或者应用可能自己就退出了,因为你正在运行的是 Intent,不是应用本身(这不是崩溃!!!)。 启用扩展扩展都已安装就位了,但是作为一个 iOS 用户,仍然需要进行 Siri 设置才能使用扩展。点击测试设备里的 Settings,选择 Siri 菜单,你会看到 MusicMatcher 出现在清单里,**允许使用 Siri。 测试我们第一个 Siri 命令尝试一下 Siri 命令,长按 Home 键或者说出「Hey Siri」来** Siri(当然需要你已经**「Hey Siri」功能)。 试一下命令,比如「使用 MusicMatcher 开始锻炼」。 「对不起,你需要在应用里继续。」如果你像我一样遇到了这样的错误信息:「Sorry, you’ll need to continue in the app.」(不知道什么原因,偶尔会出现这么一个问题,什么鬼?) 在控制台中你可能会看到类似的信息:
再次选择工程根目录,选择 MusicMatcher target。在 General 底下找到 Linked Frameworks and Libraries。点击 + 按钮,添加 CoreLocation.framework。现在可以再次编译在真机上运行,接着照着上面相同的步骤再次编译运行 intent target。我们还需要在工程里添加 CoreLocation 库,确保能添加到我们编译过的 Swift 工程中。 最后,从手机桌面** Siri。 「Hey Siri!」 Siri 这时候应该会回应:「OK. exercise started on MusicMatcher(OK,开始用 MusicMatcher 锻炼身体)」,然后会出现一个 UI 界面写着「Workout Started(锻炼开始)」。 它是如何工作的呢?模板中的 IntentHandler 类使用了一长串的协议: 首先最主要的就是
按住 Command 键点击这些协议的名字,会看到苹果提供的文档:第一个就是我们刚刚测试过的,
这会根据用户使用语言的不同而不同,不过最终的目的都是开始一次锻炼。 添加一个新的消息 Intent确认应用可以完美运行后,让我们继续,添加一个新的 intent 类型,用于发送消息,这里的文档说明了下列信息:
在类里添加
另外,如果你需要核对具体是哪些方法,只需要按住 Command 键然后鼠标点击 在这里,我们发现只有一个必须实现的方法:
回到 IntentHandler.swift 文件,添加一行分隔符(借助 jump bar,在导航查找代码时这个分隔符会非常有用)遵守新消息意图协议
在 MARK 底下,我们来实现方法。我发现 Xcode 8 非常有用,通过敲击方法名字的开始部分,剩下的都能交给自动补全来完成了,然后选择对应的方法。 在 handler 里,我们需要创建一个
把这个 intent 类型添加到 Info.plist在具备处理 在 intent 的 Info.plist 文件里,找到并点开 测试新的 intent现在我们已经设置好了新的 intent,来测试一下。记住,你必须先编译 App,在真机上运行,接着运行扩展进行调试,如果你不这样做,扩展要么不会工作,要么不会在 Xcode 的控制台中打印日志。 调用 Siri 的 intent,你现在可以看到会出现一个新的信息窗口,这个窗口目前还是空的,毕竟我们还没有给应用编写什么逻辑,我们需要实现剩下的调用,还要添加一些信息的逻辑,实现更好的用户体验。我们会在 已经发布的 Part 2 里解决这些事情。 |
请发表评论