去年発表されたSiriKit。Siriにしゃべるだけでアプリが動かせる?と話題になりましたが、実際には使える機能が限定されているので、なかなか使う機会が多くないと思います。 その上、実際にプロダクトにいれようとすると、SiriKitは通常のアプリ開発ではあまり出会わないような困難がいろいろと待ち受けています。 ここでは、実際のプロダクト開発の経験とをもとに、それをうまくのりこえる方法をお教えします。 WWDCでAppleのエンジニアに聞いてきた裏技もお伝えします。


スタッフと兼ねています、皆さん来てくださってありがとうございます、前夜祭なので食べたり飲んだりしながら楽しんで下さい。
フリーランスのiOSエンジニアです。 ボルダリングなどしています。

SiriKitは1年半ぐらい前に出ました。
アプリの特定の機能を呼び出すことができます。
使っている人は少ないかもしれません。実装した人、手を挙げる人は少ないのではないでしょうか。
逆にユーザーとして、タクシーを呼んだりした人はいますか
3名。。。
みなさんもデベロッパーならぜひ使ってみてくださいね?


タクシーの配車をしてみましょう



日本交通さんから使えます。
LineはMessageに対応しています。



これ以外にもレストランをマップで開いて予約したりできます。
OpenTableが対応しています。

SiriKitを対応する理由
システムのアプリケーションから自分のアプリケ0ションへの導線を確保することができます。
Accessibilityの面でも。

目が見えない方でも使いやすくなります。

ピクシブさんの連載漫画、腐男子社長の漫画で、目が見えなくなった主人公がSiriに電話をかけてもらいます。このような役立ち方は良いと思います。


HomePod、スマートスピーカーは競争が激しいので、私は次のWWDCでHomePodにSiriKit対応アプリが載ると予想しています。

SiriKitについて説明します。Frameworkではありません。Intents, Intents UIという2つのフレームワークから実現されます。

ターゲットとして追加します。

フレームワーウを追加すると、サンプルコードが最初にあるので、そのまま使ってみることができます。
Intentsを実装する上で

機能はシンプルですが引っかかるポイントは多いです。

システムのアプリ上に機能を提供するのがAppExtensionです。
iOS11では23種類位あります。

配布する時はHostのアプリと一緒にバンドルしてストアに出しますが、実際にユーザーが実行するときには別々のプロセスとして動きます。


ポインタのアドレスを片方のターゲットで記録して、別のアプリから同じメモリポインタを呼んでも、中身が0になります。
同じバンドルのターゲット間でも同様です。

Intentsから本体アプリのメモリは読めません。

どうやって情報を共有したら良いでしょうか。
ファイルストレージもサンドボックスという仕組みで別々になっています。

そこで同じデベロッパーの別のアプリ間でデータを共有するAppGroupを使います。

それから、SiriKitではユーザーからの問い合わせに自然に答えなければなりません。回答まで時間がかかるとタイム・アウトしてしまうので必要なデータのキャッシュなど工夫が必要です。

またエラーの情報が乏しいです。

開発スピードも早いので動かなくなることがよくあります。

スクリーンショットで記録を残しておいたほうがいいです。
英語だと正しく動くが日本語だと動かない、その逆もあります。各言語で試しましょう。



10年ぐらいiOSやっていますがSiriKitは一番苦しかったです。でも絶対HomePodがあると信じています。 皆さんも是非SiriKitやってみて下さい。
QA
- 一つ一番デバッグで苦しんだことを教えて下さい
- 同じコードを書いているのに動作が違うのが苦しくて、先週と今週で動作が違う。なんでですかねーって…
- 差し支えなければどのようなケースか…
- 差し支えるので申し訳ありませんが…
- 差し支えなければどのようなケースか…
- 同じコードを書いているのに動作が違うのが苦しくて、先週と今週で動作が違う。なんでですかねーって…
