## オトナのiOS開発入門 ### @未来会議室 2017/06/21 Takahiro ISHIZUKA
## 自己紹介 - 石塚といいます。 - 勘定奉行なところで以前働いていました。 - C#とかVBとかサバクラ系 - Ruby、PHP - iOS(Swift) - さいきんXamarinを少々。。。
## 本日の流れ - 環境の確認 - ライセンス体系と配布方法 - プロジェクトの作成とHello World - シミュレータの実行 - デバッグ方法 - Unicorn ChatでHey Siriしてみる
## 環境の確認 - mac + Xcode - Xcodeが未インストールの方は...間に合うかな
## 使用する言語 - Objective-CとSwiftが利用できます - 今回はSwiftを利用します - Objective-C よくわかんないし
## 開発ライセンスについて 大きく分けて2つのライセンスがあります - Apple Developer Program - Apple Developer Enterprise Program
## Apple Developer Program - 個人登録と法人登録がある(どちらも内容は一緒) - 法人の場合、契約時にD-U-N-S Numberが必要 - 年間11,800円 - App Storeでの配布とAd Hocでの配布の2通り - 配布方法の違いはのちほど
## Apple Developer Enterprise Program - 法人登録のみ - 契約時にD-U-N-S Numberが必要 - 年間37,800円 - in-houseでの配布とAd Hocでの配布の2通り
## アプリの配布方法 iOSアプリの配布方法は3つあります - App Store - Ad Hoc - in-house
## App Store - ストアに公開する方法 - Apple Developer Programで利用可能 - 公開するにはAppleの審査を通る必要がある
## Ad Hoc - リリースビルドをTestFlightやDeploygateなどを通じて配布する方法 - どちらの開発ライセンスでも可能 - 事前にDeveloper Consoleでデバイスを登録する必要がある - 100台まで - Appleの審査は無し
## in-house - 企業内で利用するツールとして自前のサーバーから配布する方法 - Apple Developer Enterprise Programで利用可能 - 企業内の利用に限られる - 配布するデバイス数は無限 - 配布用のサーバーを用意する必要がある - Appleの審査は無し
## プロジェクトの作成 - Xcodeを起動し「Create a new Xcode project」 - 「Single View Application」
![](img/1.png)
## 画面にLabelを置いてみましょう Labelをドラッグして配置し、テキストをHello Worldにしてください。
![](img/2.png)
## シミュレーターで実行してみてください
![](img/3.png)
## ボタンの配置 Buttonをドラッグして配置してください。
![](img/4.png)
## 分割表示にして、Labelを変数に紐付けます
![](img/5.png)
## ButtonのTouch Up Insideイベントを紐付けます
![](img/6.png)
``` @IBAction func btnTouch(_ sender: Any) { self.labelTitle.text = "Hello Xcode" } ```
### シミュレータで実行して、ボタンにタッチしてみましょう。
### 画面遷移してみます ### ViewControllerを配置してください。
![](img/7.png)
### ボタンを押したら遷移するようにします
![](img/8.png)
### シミュレータで実行して、ボタンにタッチしてみましょう。 超単純な画面遷移のできあがりです。
### NavigationControllerを配置して戻れるようにしてみてください。
![](img/9.png)
- Storyboardを利用すると簡単にアプリの画面遷移が作成できます。 - 基本的にデザイナ画面でコントロールを置く→ソースに紐付けて使う、の繰り返しです
- 標準のUIを用いたアプリなら作りやすいですが、ちょっと凝ったものを作ろうとすると大変になります - もちろんViewを複数のファイルに分けて作成することも可能です
## Siri連携をやってみましょう! UnicornChatというAppleのサンプルソースを動かしてみます。 https://developer.apple.com/library/content/samplecode/UnicornChat/Introduction/Intro.html 右上の「Download Sample Code」からソースをダウンロードしてください。
![](img/10.png)
![](img/11.png)
## シミュレータで実行してみましょう 「ユニコーンチャットでメッセージを送信」と話しかけてみてください。
![](img/12.png)
ちなみにアプリ名を変えることも可能です。
![](img/13.png)
## 中身のはなし
## インテント拡張 ``` class UCIntentsHandler: INExtension { override func handler(for intent: INIntent) -> Any? { if intent is INSendMessageIntent { return UCSendMessageIntentHandler() } return nil } } ```
- INExtensionを継承したインテント拡張が作ってあります - SiriとのやりとりをさばくハンドラとしてUCSendMessageIntentHandlerを返しています
## イベントハンドリング Siriとの通信では、3つのフェーズがあります - Resolve (Intentのパラメータの確認を行う) - Confirm (Intentに対するレスポンスを生成してタスク実行の最終確認を行う) - Handle (タスクの実行して結果を返す)
## resolveRecipients - Resolveフェーズで宛先を確認する際に呼ばれます。 - サンプルでは変数recipientsに宛先リストを受け取り、そこからマッチするものを探しています。
## resolveContent - Resolveフェーズで本文を確認する際に呼ばれます。 - サンプルでは何か文字が入っていればSuccessとしています。
## Confirm - Confirmフェーズで呼び出されます。 - Resolveフェーズのメソッドで、INStringResolutionResult.successが返された時点で呼ばれます。 - アプリとしてインテントに含まれる各データが適正であるかを確認してSiriに伝えます。
## Handle - 確認画面で「送信」ボタンを押すと処理中の画面となり、この時handleが呼ばれます。 - 実際の送信処理などはここで書きます。 - UnicornChatサンプルではそれっぽく書かれていますが、実際はなにも処理されていませんw
## 大まかな流れの解説でした。 ## いろいろいじって遊んでみてください。
## まとめ SiriKitの公式HP https://developer.apple.com/sirikit/
これによると対応インテントは9種類みたいですね。
## おわり ご質問などあればぜひ!