【Swift】チャットアプリで、iOSアプリ開発入門講座を考えてみた(※随時更新予定)

# はじめに
今では、多くのアプリで取り入れられているチャットアプリを用いて、初心者でもiOSアプリ開発ができるように紹介していこうと思います。

**※記事全体を通して分からないところ・誤りがあるところあれば、なんでもコメントください。**

# 流れ
1. [【Swift】初心者でも絶対にできる"Hello World" iOS アプリを作成 ~iOS アプリ開発超入門~](https://qiita.com/tetsukick/items/bbd92c73c1b23016478b)
2. [【Swift】Firebase Realtime Database を用いてチャットアプリを爆速コーディングしてみた。](https://qiita.com/tetsukick/items/638501babc692ec55858)  
ここで少しだけUIをアレンジしたい方はこちら↓↓↓   
[【Swift】チャットアプリのUIをちょっとだけ良くしてみた](https://qiita.com/tetsukick/items/0d880d6be48a869ab908)
3. [【Swift5.0】UserDefaultsでパラメータを保存する~iOSアプリ開発入門~](https://qiita.com/tetsukick/items/9f045a0e7590e64a8614)
4. [【Swift】UITableViewControllerを使って、チャットアプリにトークルームを追加する](https://qiita.com/tetsukick/items/835d972f5edd60b6fc16)

# ソースコードはこちらのGitHubからどうぞ
https://github.com/Tetsukick/Firebase-chat-iOS

# エラー一覧
実際に実施して発生したエラーを記載しておきます。
## Case１. Could not build Objective-C module 'Firebase'
<img width="1125" alt="Screen Shot 2019-07-02 at 11.54.14 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/94efd426-cb7a-7c4c-c015-b2e2dd452570.png">

### 解決方法
「.xcodeproj」ファイルではなく、「.xcworkspace」ファイルから、Xcodeを開き直してください。
<img width="418" alt="Screen Shot 2019-07-02 at 12.03.16 PM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/0bd0ab76-d3c9-8eae-f938-3c28190f2708.png">

### 説明
- xcodeproj  
→ メインプロジェクトとサブプロジェクトを管理することができるファイル
- xcworkspace  
→ 複数の同階層のプロジェクトを管理することができるファイル  
※cocoaPodsを使用して、ライブラリを導入した場合は、同階層にPodsプロジェクトが作成され、そこにライブラリがbuildされているため、「xcworkspace」で開く必要があります。

## case2. xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance

### 解決方法
Xcodeのpathに誤りがあります。正しいパスを指定し直してください。

```shell
$ sudo xcode-select -s <xcode_folder_path>
```

例：

```shell
$ sudo xcode-select -s /Applications/Xcode.app
```

### tips
複数のXcodeバージョンをインストールしている場合も上記のコマンドで切り替えることができます。
選択されているXcodeをもとにライブラリがインストールされるため、インストール前に以下のコマンドでpathを確認することをおすすめします。

```shell
$ xcode-select -print-path
```

## case3. Thread 1: signal SIGABRT

<img width="895" alt="Screen Shot 2019-07-03 at 10.17.49 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/2e42ae95-687f-7190-5ef4-6855de73c825.png">

```
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AQI_Chat__.ViewController 0x7fd446813f80> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key textView2.'
```

## 解決方法

`Main.storyboard`ファイルを開き、UIとコードの接続を確認します。
<img width="1432" alt="Screen Shot 2019-07-03 at 10.19.59 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/9d13e538-4c76-4615-2cf3-ba03e170700b.png">

Warningの箇所を削除して、必要に応じて、もう一度接続し直します。

## tips

UIとコードの接続は、1対１である必要があります。
接続して、コードのみ削除すると、Storyboard上に接続関係だけが残ってしまい、エラーの原因になります。
また、接続させたコードの名前を変更すると関係性がなくなってしまい、こちらもエラーの原因になります。

# Q&A
## Question1. 「platform :ios, '10.0'」 は何？
iOS10以上を対象としてライブラリをインストールすることを意味します。

## 変数の名前の変更方法は？
変更したい変数を選択して、右クリックしてください。
以下の Refactor > Rename を選択します。
今回は試しに、`textView`を`chatTextView`に変更します。

<img width="668" alt="Screen Shot 2019-07-03 at 11.22.49 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/01932238-5ee0-b785-e5d5-80f5864bdef9.png">

<img width="448" alt="Screen Shot 2019-07-03 at 11.24.06 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/47803093-ce01-d343-a175-168878019212.png">

<img width="453" alt="Screen Shot 2019-07-03 at 11.24.23 AM.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/16d481f9-c02b-a87b-ca56-65ab65ac9ce4.png">