初代 SwiftUI 就用來寫 Watch App 吧! - [13 一三](https://twitter.com/ethanhuang13)
===
{%hackmd FGRWt1UuTFKk0wSbGgg-SA %}
> 請從這裡開始
## YouTube
{%youtube 1cROaQ88adE %}
## Slide
{%speakerdeck ethanhuang13/chu-dai-swiftui-jiu-yong-lai-xie-watch-app-ba %}
## 講者資訊
- 13 一三
- Twitter: [@ethanhuang13](https://twitter.com/ethanhuang13)
- GitHub: [ethanhuang13](https://github.com/ethanhuang13)
- 任職於 [CATCHPLAY](https://www.catchplay.com)
- 獨立開發者,作品:NoteBox、Blahker、Ladybug、Knil...
- weak self podcast https://weakself.dev
- «13的開發者週報» https://ethanhuang13.substack.com
---
* [投影片](https://speakerdeck.com/ethanhuang13/chu-dai-swiftui-jiu-yong-lai-xie-watch-app-ba)
### 需要先備知識
* 要有Apple Watch使用經驗
* 官方的[SwiftUI tutorial](https://developer.apple.com/tutorials/swiftui/tutorials)
WatchOS 末梢開發
tvOS 邊緣開發
watchOS 6 可以獨立開發 獨立上架 獨立的target
### 基本架構
- iOS App Target : Disposable (WatchConnectivity -> X)
### 獨立Watch App
- 有個地方要打勾(run without iOS Application)
- 有Testflight (on iOS App)
- 沒有 IAP 😅
### Watch App UX
- 以秒為記的使用時間體驗
- 能點兩下就不要點三下(甚至不用點)
- 按鈕跟資訊不能多
- 獨有控制方式
- Force touch
- 觸覺回饋 Haptic feedback
- 數位錶冠 Digital Crown
- 不用支援dark mode🌚
- 不能用iOS app的做法搬到watch OS
- 能不捲就不要捲動
- 可以用Digital Crown來作精準調整
- 用PageNavigation
## 13 WatchApps
### 1. Drinkbobo
紀錄喝了幾杯飲料
*等珍珠奶茶emoji + 待開源中..*
### 2. Defog (世界迷霧的概念)
未完成因為懶得寫iOS App 😅
### 3. Pineapple Timer 🍍
Insipred by 番茄🍅鐘工作法 Pomodoro
- 模擬發條的聲音
- 送審中
- [Testflight](https://testflight.apple.com/join/KUkDxOOg)
> 最邪惡的iOS 技巧 (13教的)靜默推播
> Silent Push Push Notification > 啟動AVSpeechSynthesizer(只能講30秒)
> 讓User手機隨時可以啟動講話 (X)
### 4. 😈狂鬧鐘
watchOS 6 **Extended Runtime**
規定是要call震動API
## 坑
### 1. 名字預設 ooo WatchKit App
要記得不是WatchKit Extension了
### 2. 不能同時兩個模擬器
### 3. 安裝實機器跑不起來?
### 4. 怎樣同時Preview多個裝置
### 5. PreviewProvider @Binding
.constant(xxxx)
### 6. WKHostingViewController<View> 加environmentObject
- type 不一樣
- solution: environment包成View
### 7. Navigation Page 拉法
請參考投影片~
### 8
不能寫switch case 要寫 if else
無法做單元測試
###### tags:`iPlayground2019`