既存エンジニアがiOS開発を始めるには:入門編
どの言語もそうだろうけど、
最初にやってみてよくわかんないと、とっつき辛いと思う。
そんな「よくわかんない」ってかつて自分が感じたとこを、
プログラミング経験ある人に伝えるイメージでまとめてみる。
Xcodeが扱うファイルの種類について
①AppDelegate.h/AppDelegate.m
新規にiOSプロジェクトを作成した際、
デフォルトで作成される。
OSから呼ばれた時の処理を記載する箇所。
主に以下のようなケースでAppDelegate.mをいじる。
・起動時の処理(初期画面の起動等)
・バックグラウンドからフォアグラウンドに戻った際の処理
・通知から起動した際の処理
②Main.storyboard
Storyboard(ストーリーボード)で使用する、
複数画面のデザイン・遷移を定義するファイル。
新規にiOSプロジェクトを作成した際、
デフォルトで作成される。
詳細は後述。
③*.hファイル
クラスを追加すると*.mファイルと併せて作成される。
クラスの宣言を記述するクラス。
ヘッダファイルなんて呼ばれたりする。
④*.mファイル
クラスを追加すると*.hファイルと併せて作成される。
クラスの実装を記述するクラス。
実装ファイルなんて呼ばれたりする。
⑤*.xib
Viewのデザインを定義するファイル。
View関連のクラスを追加する際、
"With XIB for user interface"を指定すると、.hファイル/.mファイルと共に作成される。
詳細は後述。
⑥Images.xcassets
Xcode5から追加された、画像管理用のファイル。
複数画像をまとめて管理できる。
使用方法については記載しないが、
使った方が良いと思う、画像ファイル扱うのが楽。
⑦*.plistファイル
値定義を行えるファイル。
key/型/値で定義する事が可能。
新規にiOSプロジェクトを作成した際、
デフォルトで、[プロジェクト名]-Info.plistというファイルが作成される。
この[プロジェクト名]-Info.plistは特殊なファイルで、
アプリ自体の設定を指定するファイル。
上記のアプリ用ファイルとは別に、*.plistを作成する事。
テーブルに表示するデータ配列や、定数なんかにも使えると思う。
使いこなせたら便利だと思う。
⑧main.m
エントリポイントと思われる。
特にいじる必要なし。
※起動時の処理は、AppDelegate.mに記述する。
⑨Tests
[プロジェクト名]Testsというフォルダが作成される。
JUnit的な、テストに使えるもの。
使った事ないけど、お勉強して使えるようになったら便利だと思う。
画面デザインについて
他の言語ではFormって表現したりする画面は、
Objective-CではViewと呼ばれている。
基本的には画面を追加するたんびに、
UIViewController継承したクラスを追加していくイメージ。
画面をデザインするには、主に3通りのパターンがある。
xibファイルを使用する。
xibは、1つのViewのデザインをするファイル。
Storyboardより前から存在し、一番メジャーな画面デザイン方法。
Storyboardを使用する。
複数画面をデザインする事が可能で、遷移も定義可能。
画面遷移まで含める事が可能なので、全体像を掴みやすい。
細かいカスタムするには不便かも。
Storyboard内の画面ごとに、
UIViewControllerを継承したクラスを作成して、
CoustomClassの欄に指定してあげる。
プログラムで直に書く。
他の言語でも可能なように、Objective-Cでも可能。
ロード時にコントロールの画面位置・サイズを指定して、
ViewにaddSubViewしてのっける。
よく使うUIクラス
使った事ある範囲で解説。
UIViewController
画面を制御してくれるクラス。
基本的にはこれを継承したクラスをカスタムして、
画面を作っていく感じ。
UINavigationController
画面上部の進む、戻るを制御してくれるコントローラ。
Navigation Barを表示して、これを便利に制御してくれる。
親画面から小画面に遷移する時、
これを使って遷移すると、勝手に戻る際の制御までしてくれる。
UITabBarController
画面下部に表示するタブバーで、画面の切替を制御してくれるコントローラ。
Tab Barを表示して、これを便利に制御してくれる。
UITableViewController
一覧表示するViewを制御してくれるコントローラ。
ただ、これはカスタムし辛いので、
UIViewController + UITableViewで使う方が楽かも。
UIAlertView
VBAのMsgBox、JavaScriptのAlertみたいな感じのやつ。
OKのみの情報メッセージや、
複数ボタン(はい/いいえ)のメッセージも出せる。
Objective-Cだと非同期な処理なのが独特。
他の言語だと、疑問メッセージを表示するとその場で処理が止まるが、
Objective-Cでは処理が流れてしまう。
選択されたボタンを取得するには、
UIAlertViewのデリゲートメソッドで処理を実装する必要がある。
特殊コントロール
自分が使った事がある範囲で解説。
Web画面
UIWebViewを使用する。
画面上に配置して、
中にHTML等を表示するためのコントロール。
一般的な、URLを指定してHTMLを表示する方法の他に、
ローカルのHTMLファイルを指定したり、文字列を直接読み込む事も可能。
ハイブリッドアプリだと、これをガリガリ使う事になると思う。
通常のSafariに近いイメージでJavaScript等も実行可能。
Objective-CからUIWebViewに向けてJavaScriptを実行する事も可能で、
HTML上の値を取得する際に使える。
また、JavaScriptをトリガにObjective-Cネイティブコードを呼び出す事も可能。
地図
MKMapkitを使用する。
iOS標準の地図を表示するコントロール。
純正の地図アプリのイメージ。
実装する際、地図関連の分かりにくかった用語を下記に挙げる
・地図に表示するピン
MKPointAnnotation(ピンの事)を作成し、
MKMapViewのaddAnnotationメソッドに渡す。
・ピンに表示する吹出し
canShowCalloutプロパティで指定する。
・緯度経度
CLLocationCoordinate2Dで保持する型。
特定の場所にピンを落とす時は、この型で指定する事になる。
・指定住所から緯度経度を取得する(正ジオコーディング)
CLGeocoderクラスのgeocodeAddressStringメソッドを使用する。
・指定した緯度経度から、住所を取得する(逆ジオコーディング)
CLGeocoderクラスのreverseGeocodeLocationメソッドを使用する。
デリゲート(delegate)について
他の言語であんま意識する事が無かったけど、
Objective-Cではかなり使う事になる。
メジャーなとこだと、以下のような時に使用する。
UIAlertViewの結果取得
はい/いいえを選択させるUIAlertViewを表示して、
選択結果を取得する際、
UIAlertViewのdelegateメソッドを実装する。
UITableViewの表示
UITableViewにデータを一覧表示する際、
UITableViewのセル描画メソッドをdelegateして、
ここでデータを表示する処理を行う。
DBについて
iOSからDBを扱う際、以下のような感じ。
ローカルDB
入力された値を保持するのに使用するDB。
SQLiteを使用して管理する。
SQLiteではローカルに*.dbファイルを保持し、
これをDBとして扱う。
保持方法がファイルという事以外は、
他のDBと同じようなイメージでいいと思う。
selectやらinsertやらも普通に出来る。
複雑なSQLは使えるかわからんが。
イメージし易い用途としては、
設定画面の値保持や、ユーザが入力した情報の保持。
Web+DB
各端末から共通のDBを参照させたい時に使用する方式。
後述する通り、クラサバ方式は容易ではないので、
間にAPサーバを挟んでDB操作を行う。
②SQL発行
APサーバからDBサーバに対してSQLを発行する
APサーバの言語は、DBサーバと相性が良いものであればなんでも良い。
ex. AP:Java + DB:Oracle / AP:C# + DB:SQLServer
③DBからレコードを取得
DBサーバからAPサーバへ結果が戻る。
クラサバ構成
VBやらC#やらJavaであれば、
クライアントがドライバ使って直接DBを叩くような構成が可能であるが、
Objective-Cから直接接続する事は容易ではないので、
上記に上げたWeb+DBの形式を使用するのが一般的だと思う。
※実際にやろうと試みてるようなサイトもあるので、
出来ない事はないと思うが、
日本語サイト等は見当たらないので、
相当な難易度になると思う。
ここのHPとか見てると、出来そうな雰囲気はある。
http://odbcrouter.com/ipad
次回予告
次回は便利編として、
実際にiOSアプリ開発を初めて便利だったものを紹介していきたい。