Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

iOSとAndroid開発を比べてみる

開発歴がだいたい半年の私の私見でございますが... 最近流行りのRoboVMのようなものではなく、双方ネイティブ(Swift / Java)で開発しております。

スマホだったらAndroid開発のほうがiOS開発より簡単に感じる。Android4.0以降に限った話かもしれないけど。

デバッグ

Androidの圧勝。スタックトレースが出るもん。これほどありがたいものはない。

iOSの場合、Javaで例えるとコアダンプがそのまま吐き出される感じ。よーわからんコマンドを叩いて解析できるそうなんだけど、初めからそれXcodeに組み込んでくれませんかね。iOSはクラッシュに滅茶苦茶厳しいのに、落ちる箇所を突き止めるのがめんどい。僕がやり方を知らないだけかもね...

画面開発

XMLで画面を作れるので、Androidのほうがやりやすい。AndroidXMLで画面を作ることが出来る。WPFにおけるXAMLがある。これさえあればGUIのエディタなんて使うこと無い。むしろコピペが蔓延るから良くない。

iOSで画面をInterface BuilderというGUIツールがあるけど、あれ不便なんですけど。どうせGUIで作ってもさ、XMLJSONかしらんけどテキスト解析してインスタンス化してるんやろ? だったら初めから(ry

iPhoneiPadで別レイアウトを組むとなるとStoryBoardを複数作るなど、大変めんどくさい。IOS端末など数えるほどしか無いのに。Androidの場合は「横のサイズが600dp以上なら」という感じで、タブレット専用UIを作ることも簡単だし、マージンやパディングも簡単に設定できる。対応端末がクソ多いからの工夫なんだろう。

iOSの場合はiOS6.0以上で導入されたAutoLayoutという画面サイズに動的にマージンやパディングを組める機能があるが、とにかく直感的じゃない。隣接する要素の相対的なマージンをチマチマ設定しなければならないから。AutoLayout言う具合ならAndroidのLayoutに該当する機能を導入していただけると...

Scrollviewに入れてAutoLayoutを組むとなると、シビアなノウハウが必要。コードでGridView.setMargin(10) とか書けないし、大変冗長なコードを書かされる。レイアウトの組やすさは、マージンとパディングを簡単に設定できるAndroidのほうが上。

画面遷移

これもAndroidのほうが簡単。StoryBoardのような画面遷移の情報を外に出すことは出来ないが。startActivityで子画面をビシバシ上げていくかFragmentをremove/addで切り替えることぐらいしかないが、他に必要なものも見つからない。

Androidは色んなタイミングでActivityの再生成が実行されるので、入力した・保持した情報が消えるということが多々ある。気をつけたい。

iOSはStoryBoardというアプリがどういう画面遷移を取ってどういうViewControllerの連携を行うかが可視化されるのでメンテナンス性が云々というけど、うん、結構微妙な気がする。NavigationControllerの存在は大きいし、とりあえず使っておけば大まかの画面遷移は何も考えずに組めるし、親→子→孫のような深い遷移もできるから嬉しさはある。

iOSはとにかくピーキーだ。縛りが強い。

データ永続化

どっちも便利なライブラリがあるので、甲乙つけがたい。大差ないやろ。

ビルド

iOS設定項目大杉ワロタ。いまだによくわからん。Archive作るだけで消耗する。Androidはその辺がゆるいので、開発者機能を有効にすればUSB経由でアプリをインストールできる。iOSは野良アプリを絶対に許さないぞという強いポリシーがあるようで、UDIDの登録が必要だったりTestFlightにしてもレビューを通さないとダメだったり色々めんどい。

あと、iOSはレビューに出してから1週間かかるのはザラだけど、Androidは数時間で終わる。

Null対応

iOSはとにかくNullにうるさい。ちょっとでもNullが入ろうもんなら問答無用で落ちる。まぁ致命的なやつだからそもそもNullハンドリングが必要なコード書くんじゃねぇ説やそもそもNullになる状態を作るんじゃねぇ説など色々あるが、iOSはシビア。iOSSwiftになってオプショナル型で変数を定義出来るようになったが、ちゃんとハンドリングをせなあかん。

というわけで

スマホアプリの開発は特にiOSが大変。特有の仕組みが多くあり、それを理解するのが大変。日本語のリソースも乏しいし。はじめるならAndroidのほうがええんちゃうか。TitaniumとかRoboVMとかのフレームワークで、他言語で開発してiOS/Android対応がいっぺんに出来るならそれが最も幸せだと思います... ネイティブで作れば間違いねぇだろで、頑張ってネイティブで作ってる。ゲームとか作るわけじゃないので。

現状、AndroidスマホアプリのMVP(Minimal Valuable Product)を作ってそこでデザインや仕様を固めてから、iOS版の開発に移行するようにしております。