SwiftUI Tutorial の応用２

## 内容
- SwiftUI Tutorial の応用２

## 開発環境
### ハードウエア
|項目||
|---|---|
|PC| MacBook Air(M1,2020） メモリ：16GB ストレージ：1TB |
|実機 | iPhoneSE（2nd Generation 128GB iOS 15.3.1） |
|PCと実機を接続する|[USB-C Digital AV Multiportアダプタ](https://www.apple.com/jp/shop/product/MUF82ZA/A/usb-c-digital-av-multiport%E3%82%A2%E3%83%80%E3%83%97%E3%82%BF)|

### ソフトウエア
|項目||
|---|---|
|言語|Swift 5.5.2|
|IDE|Xcode Ver 13.2.1|
|その他|Visual Studio Code Ver 1.64.2|

### バージョン管理
[GitHub - 実際にコードを確認できます](https://github.com/tanakadaichi1989/My-Portfolio-App)

## 画面
- おでかけスポット
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/ffed8dbe-3ec3-6baf-ce30-7dc90d19fdbd.png" width="200">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/a18624cd-a618-359e-9edc-3b2ab471d11c.png" width="200">

- 駅一覧
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/b1dd6a06-c964-e4db-c4cb-2d064ade29bf.png" width="200">
 
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/06d4bf8d-9816-14e1-b767-1f4709ac2401.png" width="200">


## 工夫した点

### ウィジェット機能を追加
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199441/176c9709-2042-08f5-9146-515a702dba4b.jpeg" width="200">


### UI テスト
```swift
import XCTest

class HankyuUITests: XCTestCase {

    override func setUpWithError() throws {
        continueAfterFailure = false
    }

    override func tearDownWithError() throws {
    }

    func testExample() throws {
        let app = XCUIApplication()
        app.launch()
        let navBar = XCUIApplication().staticTexts.matching(identifier: "おでかけスポット").firstMatch
        XCTAssertEqual(navBar.label, "おでかけスポット")
    }

    func testLaunchPerformance() throws {
        if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) {

            measure(metrics: [XCTApplicationLaunchMetric()]) {
                XCUIApplication().launch()
            }
        }
    }
}
```

### GitHub Action を利用
下記内容を引き金に GitHub Action を実行するようにした

- `develop` ブランチにプッシュした
- `main` ブランチにプルリクエストを行った

GitHub Action が成功したら、Slack に通知を行うようにした

### 今回開発したアプリを App Store へ公開を試みる
結果： 却下
理由(ざっくり)： アプリの機能が少なすぎて、Apple のユーザに良い体験を提供できない

> Guideline 4.2 - Design - Minimum Functionality
>
> We found that the usefulness of your app is limited by the minimal amount of content or features it includes. 
>
> Next Steps
> We encourage you to review your app concept and incorporate different content and features that are in compliance with the App Store Review Guidelines.
>
> We understand that there are no hard and fast rules to define useful or entertaining, but Apple and Apple customers expect apps to provide a really great user experience. Apps should provide valuable utility or entertainment, draw people in by offering compelling capabilities or content, or enable people to do something they couldn't do before or in a way they couldn't do it before.

### 感想
- SwiftUI は覚えたらラク
- 開発したアプリを App Store Connect に UP して審査を依頼する一連の流れを復習できた<br>（以前業務で iOS アプリを App Store Connect への UP を経験していた）
- 2022年1月に申請した Xcode Cloud を早く使わせて欲しい

### 今後
- 目標：2022年中に iOS アプリを App Store で配信する　※今回開発したアプリを配信する予定なし
- [この動画](https://www.youtube.com/watch?v=3pIXMwvJLZs) を参考に、Firebase を利用したアプリを実装する
- [この本](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%AC%AC3%E7%89%88-Swift%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-%E7%9B%B4%E6%84%9F%E7%9A%84%E3%81%AA%E6%96%87%E6%B3%95%E3%81%A8%E5%AE%89%E5%85%A8%E6%80%A7%E3%82%92%E5%85%BC%E3%81%AD%E5%82%99%E3%81%88%E3%81%9F%E8%A8%80%E8%AA%9E-PRESS-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4297112132/ref=sr_1_3?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=182CBFZUSVNV1&keywords=swift&qid=1650362631&sprefix=swift%2Caps%2C202&sr=8-3)に記載のある GitHub API を利用した API クライアントアプリを開発する
- `HelthKit` を利用して、歩数をウィジェットで表示するアプリを開発したい