SwiftUI×HealthKitでiOSデータ入門(前編)

# -準備 & 環境構築編-
Yahoo!Japan主催のハッカソン [HackDay2019](https://hackday.jp/) 出場のため，きゅうきょSwiftで iOS の [HealthKit](https://developer.apple.com/healthkit/) を触ることになったのでキャッチアップの内容を自分用にまとめていきます．ちなみにこの記事を書いている 2019/12/15 01:10 現在，リアルタイムで絶賛ハッカソン中です．自分が担当しているデータ周りだけをまとめていますが，焦っているため間違いなどあったらすみません

Xcode も Swift も HealthKit もはじめて触りますが，がんばって iPhone からデータを取得し，表示，データベースへ格納するところまで挑戦します．Swift のキャッチアップを兼ねているということもあり，少し長くなります. 

1. [SwiftUI×HealthKitでiOSデータ入門(前編) -準備&環境構築編-](https://qiita.com/_kenken82/private/22df88d1b148739837ea)
2. [SwiftUI×HealthKitでiOSデータ入門(中編) -HealthKitアクセス許可編-](https://qiita.com/_kenken82/private/f9de71e58be5b57f3634)
3. [SwiftUI×HealthKitでiOSデータ入門(後編) -HelathKitデータ取得&Firebase編-](https://qiita.com/_kenken82/private/8201f6e7b6a07c61b8ff)

から構成されます．


### 開発環境
- macOS Catalina (10.15.1)
- ios (13.2.3)
- Xcode (11.2.1)
- Swift (5.1.2)
- Realm (4.1.1)
- RealmSwift (4.1.1)

## 環境構築
わかりやすい記事はたくさんあるので基本はググってもらうとして，ここでは自分がやったことをベースにまとめていきます．<br><br>

#### Step1. ios と Xcode
-> Xcodeは最新の状態にし，Swift は Xcode のバージョンに紐づいているため別で必要なアップデートなどはなし．

Xcode でプロジェクトを作成しておいてください．ここではアプリ設定は **SingleViewApp** にしてUI設定は **SwiftUI** にしています．

※ Xcode (Swift)の Hello World に関しては [SwiftUI Tutorials](https://developer.apple.com/tutorials/swiftui/tutorials) で行いました．
SwiftUI を触るのは初めてなのでキャッチアップとして SwiftUI Essentials を1通りやりました．ただしこのチュートリアルで作成するプロジェクトの完成形は，本記事のコンセプトから外れるので，ここでは  **チュートリアルの Section3 まで終えた状態** でスタートします．

チュートリアルにしたがって ContentView.swift をいじった状態です．

```ContentView.swift
//
//  ContentView.swift
//  Project Name
//
//  Created by My Name on 2019/12/06.
//  Copyright © 2019 Team Name. All rights reserved.
//

import SwiftUI

// Main Process
struct ContentView: View {
    
    // 垂直方向のプレビュー設定
    var body: some View {
        VStack (alignment: .leading) {
            Text("Hello, World!")  // 1つめのテキスト (VStack内のテキストは縦に並ぶ)
                .font(.largeTitle)  // フォントを変更
                .foregroundColor(.green)  //カラーを変更
            
            // 水平方向のプレビュー設定
            HStack {
                Text("First App")  // 2つめのテキスト
                    .font(.subheadline)
                Text("-First Project-")  // Hstack内のテキストは横に並ぶ
                .font(.subheadline)
            }
        }
    .padding()  // 余白を取る
    }
}

// Mainのstructのインスタンスを生成し，画面に表示
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
```
Canvas はこんな感じになっているはずです．
![Screen Shot 2019-12-08 at 14.41.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76122/b73b55e6-ccbc-13b4-e30e-4f96eac94e8d.png)
この状態から進めていきます．


#### Step2. ios/mac のライブラリ管理ツール [cocoapods](https://cocoapods.org/) をインストール
-> Realm をインストールするために必要．[こちら](https://qiita.com/ShinokiRyosei/items/3090290cb72434852460)の記事を参考にしました．

**※ 当初は Realm を使う予定でしたが最終的に Realm ではなく Firebase を使っています．ただ，せっかくインストールまとめてあるので消さずに残すことにします**．
<br>

```
sudo gem install cocoapods
```

#### Step3. Xcodeでプロジェクトを作成
これは初めに作成したものをそのまま使います．

#### Step4. [Realm (レルム)](https://realm.io/jp/) のインストール
-> Realm はモバイル向けデータベースとして人気だそうです．まだ未定ですが，Realm を使うことを想定して進めます．解説は[こちら](https://www.xlsoft.com/jp/products/realm/realm-database.html)．インストールは[こちら](https://qiita.com/mashiroyuya/items/0230e7e3c8b376762c04)のQiitaを参考にしました．  
Step3で作成したプロジェクトのディレクトリで

```
pod init
```
を実行して Podfile を作成する．Realm公式の[Installation](https://realm.io/docs/swift/latest)に CocoaPods でのインストール手順があるのでこれを参考にPodfile に必要な記述を追加．

```
pod install
```
で必要なライブラリをインストール完了．


### RealmSwiftの動作確認
上で入れたRealmの動作確認をします．Xcode でプロジェクトを立ち上げて **contentView** にコードを書いていきます．さっそく

```
import "RealmSwift"
```
すると・・・

```
No such module "RealmSwift"
```

のエラーが．[こちら](https://blog.kansolink.com/develop/ruby/if-linker-command-failed-after-install-realmswift/)の記事を参考にすると Realm を利用する場合 Xcode のプロジェクトを

**プロジェクト名.xcodeproj**

ではなく，

**プロジェクト名.xcworkspace** 

から開く必要があるとのこと．立ち上がりに時間がかかり，しばらくするとエラーなく起動．ためしにビルドしてみると・・・

今度は

```
Could not build Objective-C module 'RealmSwift'
```

どうやら上のメニューから Product -> Scheme -> New Scheme を選択し，「RealmSwift」を選択しないといけないようです．

これで Run するとようやく

```
Build Succeeded
```
<br>
ここまでで環境設定周りは完了です．次回からは本格的に HealthKit からデータを取ってきて Realm に格納したいと思います．

というわけで [SwiftUI×HealthKitでiOSデータ入門 (中編)](https://qiita.com/_kenken82/private/f9de71e58be5b57f3634) に続きます！