はじめに
Start Developing iOS Apps (Swift)
Swift で iOS App を作るチュートリアルがあったので、やってみることにしました。
周りに iOS App を作っている人がいないので、アドバイスくれる人がいないのでこういうのがあるととても助かります。
github にコードを置いてあります。
https://github.com/takuyaohashi/FoodTracker
私について
- 普段は組み込みソフトウェア屋さんで、C/C++ をメインに使っている
- iOS/Android アプリを書いたことはない
- 6年くらい前に PHP でショッピングサイトを作っていたが、もう覚えていない
- 普段のエディタは Emacs
- Swift の文法は 詳細 Swift で簡単に眺めた程度。
こんなバックグラウンドの人の視点でチュートリアルをやってみた感想を書きます。
動作確認環境
- OSX El Capitan 10.11.4
- Xcode 7.3
チュートリアルに書いてあること
Storyboard を使った開発
Object の配置、ソースコードとの紐付け、複数 Storyboard との連携、Navigation Controller の使用など Storyboard の基本的な使い方を広く書いてあります。
Apple は、Storyboard を使って欲しいっていう意思が伝わってきました。
個人的にはもっと AudoLayout などのデザインの配置とかをもっと詳しく書いて欲しかったなって思います。
たぶんプログラマだから、デザインについてピンと来ないって言うのもあるのかもしれませんが・・・
Optional 型の説明
ソースコードに Optional 型が出てくる度になんでここはこうなるのかっていう説明がされるので、分かりやすかったです。
私の理解では、nil になる可能性があるところは、? をつけて、nil だと致命的な場合は ! をつけるっていう理解をしました。(ホントはもっと違うのかもしれないですけど・・・)
Xcode の便利な使い方
ショートカットキーや、// MARK: つけることでそのマーカーに一発で飛べるようになる、とか Xcode の使い方もときどき説明してくれます。
キーバインドが emacs ライクなのはとてもありがたかったですね(OSX 全般的にそうですが)。もっと emacs に近づけたいところはあります。Ctrl-m とか。
データの永続化について
NSObject/NSCoding を用いたデータの永続化を行っています。
ユーザが投稿したデータはどこかに保存しないと消えてしまうので、NSObject/NSCoding を使っていますが、実際のサービスだとサーバに情報をアップしたり、SQL に保存したりするのだろうなあと思って読んでました。
単体試験について
Meal.swift という食事を表すクラスがあって、チュートリアルでそのクラスのイニシャライザの単体試験を記述しています。
単体試験の枠組みが Xcode には入っているので、それの説明が簡単にしてあります。
CI とかでコミットされる度に自動的に単体試験を実行できるようにしたいですね。
TravisCI でビルドチェックだけは行っています。色々試したみたのですが、TravisCI で単体試験の実施方法が分かりませんでした・・・
https://github.com/takuyaohashi/FoodTracker/blob/master/.travis.yml
チュートリアルに書いてないこと
Storyboard を使わない開発
アプリを作ってみようと思ってネットで調べていると、Storyboard を使わないっていう人・記事がチラホラ見かけます。
複数人開発がしにくい とか色々理由はあるらしいです。
私は普段 C/C++ をメインに開発しているので、StoryBoard を使われるとソースコードのつながりが直感的に分からないなって感じました。
でも、Apple としては、Storyboard の使用を推奨しているみたいだし、個人で作る分には問題ないのかなって思って、まずは Storyboard を使って開発してみようと思っています。
外部のサービスとの連携
Apple のチュートリアルだから当然なのかもしれないけど、Twitter や Facebook などの外部サービスとの連携については一切書いてありません。
あと、Cocoa Pods についても書いていません。
CoreData を使った開発
プロジェクトを最初に作るときに、「Use Core Data」のチェックボックスがあるけど、そこはチェックしないでアプリを作るので、CoreData を使用する方法などは書いてありません。
永続化する方法の1つだという認識です。どういう方法でデータを永続化させるかはアプリの特性によるんでしょうね。
おわりに
このチュートリアルをやっただけで、何でもアプリを作れるぜ!とはならないけど、大まかな流れをつかむことができます。
「チュートリアルに書いてないこと」にも記述しましたが、外部サービスとかの使い方とかには一切触れてないので、手っ取り早くアプリを作りたいぜっていう人には歯痒いかもしれません。
随所に Apple 的にはこうしてほしいっていうのがあって、思想を垣間見ることができるので、時間がある人はざっとやってみることがいいかもしれません。
進めたとしては、チュートリアルやりながら、章とか節ごとに git で commit することをオススメします。
写経をミスって訳分からなくなった時に前の状態に戻れるし、ここのソースをこうやったらどういう挙動になるんだろうっていうのが気軽に試せます。
何かアプリを作ったらまたその感想も書こうと思っています。
追記
本格的にアプリを作る準備を始めました。
具体的には iOS App 100本ノックというのを始めて、自分が作りたいアプリで使う技術を使ってみるようにしました。github にもコードが上がってるので、ご指導していただけると助かります。また、最近 swift で iOS App を作り始めた人がいたら、教えあえたあら良いなと思っています。