SwiftUI で iOS アプリを個人開発&ストアに公開した
2019年に Apple から SwiftUI が発表された。
今回、その SwiftUI を使ってアプリを開発&ストアに公開までしたので、実際 SwiftUI 使ってみての感想などをメモする。
公開した iOS アプリ
公開したアプリは以下である。
複雑で難易度が高いアプリだと SwiftUI も慣れていないため、挫折しそう。。
なので、ある程度やりやすそうな題材を選んだ。
最初、審査に提出したら内容がコンパクトすぎたのか、Minimum Functionality でリジェクトされた。。
その後、すこし機能追加して、無事審査は通った。
SwiftUI の初期印象
最初に触ったみた SwiftUI の印象
- あくまでも UI を記述するたの機構
- 今までの Swift コードの View, ViewController にあたる部分が SwiftUI で書き換えれるイメージ
- SwiftUI は Swift 固有の言語(DSL:domain-specific language)であるので Swift とは別に学習が必要であり、すこしとっつきにくい
- UI コンポーネントの名前が UIKit と微妙に変わっていてややこしい
- UITableView -> List
- UISwitch -> Toggle
- データフローまわり、よくわからない・・・
- https://developer.apple.com/documentation/swiftui/state_and_data_flow
- @EnvironmentObject / @Binding / @State
- SwiftUI を使うと iOS 13 以降が対象になる -> なんか未来感があってイイ
よく理解できず、これでアプリが作れるんだろうか? という不安を感じた。
SwiftUI チュートリアルで学ぶ
まず公式のチュートリアルは鉄板なので、動かしてみてみる。
このチュートリアルをみていくと、アプリをつくるために必要な
- NavigationView (画面遷移)
- List(UIKit でいえば UITableView)
- Environment (アプリ全体でつかうデータ)
- @State (UI で変更した値と連動)
などの要素を学べる。
このチュートリアルで基礎を学んだら、いろいろ自分で、こういうのは SwiftUI でどう実現するのかな? という題材をつくり、トライして理解度を高めてゆくとよい。
SwiftUI サンプルを作って理解度を高める
いろいろサンプルを作って、動作を確かめていく。
私は以下のサンプルを作って試した。
- https://github.com/daisuke-t-jp/LocationObserverTest
- 地図表示と位置トラック
- https://github.com/daisuke-t-jp/SwiftUIListColorSample
- 色表示
- https://github.com/daisuke-t-jp/SwiftUIUserDefaultSample
- UserDefaults(記録の永続化)
- https://github.com/daisuke-t-jp/SwiftUIBindingSample
- Binding / 複数ビュー間で、共有データを連動
- https://github.com/daisuke-t-jp/SwiftUITextFieldOnEditingChangedSample
- TextField 編集イベントをハンドルする
- https://github.com/daisuke-t-jp/SwiftUIProgrammaticallyPushAndPop
- ユーザーアクションではなく、プログラムで Push/Pop
- https://github.com/daisuke-t-jp/SwiftUINavigationLinkSample
- UINavigationLink を使ってみた
- https://github.com/daisuke-t-jp/SwiftUICustomListRowSample
- カスタムな List の項目(テーブルビューのカスタムセル)
- https://github.com/daisuke-t-jp/SwiftUITextFieldCloseKeyboardSample
- TextField 編集中に背景ビューをタッチしたら、キーボードをとじる
- https://github.com/daisuke-t-jp/SwiftUITextFieldCurrencySample
- NumberFomatterで通貨表記
参考になった情報
マネーフォワードさんが SwiftUI で実際にアプリをリリースした時の記事。
SwiftUIの大変なところ 現状のSwiftUIには様々なバグや不足しているAPIなどまだまだ残っているなという印象です。
先行していろいろ試している方の記事を読んで「諦めが肝心」というマインドを得た。
こちらのリポジトリには、まとまった SwiftUI コードがあって、実装の上で大変参考になりました。
(Apple のチュートリアル以外で、ある程度の規模がありながら、動作する SwiftUI のコードは貴重である)
感想
アプリを開発/公開したり、いろいろ調べた結果
2020/1/7 現在、SwiftUI でアプリ開発することはまだ辛いな、という印象。
以下、理由
- アプリの動作に支障をきたすレベルの問題がまだ発生する(安定している環境とは言えない)
- Xcode のビルドエラー表示と、実際のエラーが剥離があり、修正しづらい
- 実際のエラーと関係ない
'Int' is not convertible to 'CGFloat?'
が表示され、わかりづらい - たとえばこれ -> SwiftUI ビュー内に直接配置するビューが多くてビルドエラーになる場合 - Daisuke TONOSAKI Weblog
- 実際のエラーと関係ない
一方で
今は SwiftUI そのものが改善されていくのを日々体験できる、という特別感があり、今後行き先はどうなるのか、楽しみではあります。 (Swift は OSS ですが、 SwiftUI は Closed な Apple 感があるような気がしますね)