## オトナの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」
## 画面にLabelを置いてみましょう
Labelをドラッグして配置し、テキストをHello Worldにしてください。
## ボタンの配置
Buttonをドラッグして配置してください。
## 分割表示にして、Labelを変数に紐付けます
## ButtonのTouch Up Insideイベントを紐付けます
```
@IBAction func btnTouch(_ sender: Any) {
self.labelTitle.text = "Hello Xcode"
}
```
### シミュレータで実行して、ボタンにタッチしてみましょう。
### 画面遷移してみます
### ViewControllerを配置してください。
### シミュレータで実行して、ボタンにタッチしてみましょう。
超単純な画面遷移のできあがりです。
### NavigationControllerを配置して戻れるようにしてみてください。
- Storyboardを利用すると簡単にアプリの画面遷移が作成できます。
- 基本的にデザイナ画面でコントロールを置く→ソースに紐付けて使う、の繰り返しです
- 標準のUIを用いたアプリなら作りやすいですが、ちょっと凝ったものを作ろうとすると大変になります
- もちろんViewを複数のファイルに分けて作成することも可能です
## Siri連携をやってみましょう!
UnicornChatというAppleのサンプルソースを動かしてみます。
https://developer.apple.com/library/content/samplecode/UnicornChat/Introduction/Intro.html
右上の「Download Sample Code」からソースをダウンロードしてください。
## シミュレータで実行してみましょう
「ユニコーンチャットでメッセージを送信」と話しかけてみてください。
## インテント拡張
```
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/