既存エンジニアがiOS開発を始めるには:便利編
実際にObjective-Cでの開発を行うにあたり、
便利だったアプリやサービスを紹介します。
必要な時に思い出せたら、きっと便利。
ドットインストール
公式サイト
Freeでプログラミングの入門動画を閲覧できるサイト。
実際に操作している動画なので、
最初のとっつきとして非常にわかりやすい。
iOSに限らず、色んな技術についての動画が揃っているので、
新しい事を始める際には、まず目を通しておきたいサイト。
SourceTree
Macにインストールして使用する。
GitはCUIでコマンド打って作業するのがメジャーっぽいが、
このツール入れるとGUIで作業可能。
無料だし、なかなか使い勝手が良くてオススメ。
※ちなみにWindows版もあるので、
興味があれば(ただしWindows7以降)
BitBucket
公式サイト
クラウド上で使えるGitストレージ。
ここに共有リポジトリを作れば、
異なるMac間でのソース共有が可能。
GitHubと違って、非公開なリポジトリを作れるのが良い。
今回はプライベートで、エンジニアの友人でiOSコラボしたいので、
これを使ってソース管理してみたいと思っている。
FMDB
ダウンロードページ(Github)
商用可能なObjective-C用のSQLite用ライブラリ。
結構色んなとこで紹介されているのを見たので使ってる。
単純な構成の管理に使用しているけど、今のところ不満なし。
まー便利だと思う。
Lita
ダウンロードページ
FreeでSQLiteの.dbファイルを参照可能なソフト。
SQLServerの、Enterprise ManagerやManagement Studioみたいな感じ。
実機では使用した事がないが、エミュレータ用に使ってる。
インストール後、以下のパスにある*.dbをダブルクリックすると起動する。
実データを確認したり、SQLの実行エラーを検証したり等、
お手軽で使い易くて良い。
MAKEAPPICON
Makeappicon - Generate app icons of all sizes in a click!
複数サイズ画像を作成するサイト。
一つの画像ファイルをアップロードすると、
AppStoreやアプリ内に必要なサイズの画像を、
一括で作成してくれる。
既存エンジニアが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アプリ開発を初めて便利だったものを紹介していきたい。
既存エンジニアがiOS開発を始めるには:準備編
先日、エンジニアの友人と話したところ、
「プライベートでiOSアプリを一緒に作ろう」
って盛り上がった。
友人はMacbookAirは持っているが、
Objective-Cプログラミングをした事は無いとの事。
思いの他盛り上がったので、
役に立つような情報まとめたいと思い、
記事にしました。
「ゼロから始めるiPhoneアプリ」といった記事は多いが、
プログラミング経験があるエンジニア向けに書かれた記事はあんま見た事ないので、
そんなスタンスで書いてみようかと。
ある程度プログラミング経験がある人を想定しています。
細かい技術の部分には触れず、概念的な物がイメージが伝わり、
ぐぐる際にキーワードを思い浮かべれるような記事を目指します。
自分のiOS開発経験
全部合わせて半年ぐらい期間。
記事を書く上での参考までに、やった事ある内容をあげてみる。
倉庫ピッキングiPadアプリ
仕事での開発した、業務用アプリ(AppStore非公開)。
倉庫でのピッキング時、ピッキング個数をリアルタイムで表示する。
構成としては、DBと通信するAPサーバ(Java)+iPad
iPadがHTTPリクエストするとXML形式でデータが戻って来て、
このデータを解析してiPadの画面に表示する。
→Objective-Cのみで実装する、
通称ネイティブアプリ
証券取引iPhone用アプリ
仕事で作成した個人向けアプリ(AppStore公開予定)。
証券会社の株取引を行う。
HTMLを埋め込む形式で、それの外枠部分をのObjective-Cで開発。
→Objective-Cの中にHTMLを埋め込む事で実装する、
通称ハイブリッドアプリ
地図アプリ
プライベートで開発した個人向けアプリ(AppStore公開予定)。
地図を使用して目的地を指定し、そこまでの所要時間を計測する。
→Objective-Cのみで実装した、
通称ネイティブアプリ
必要な物
結論から言うと、そこそこ最近のMacさえ有ればおk。
Mac
統合開発環境であるXcodeを使うのに必要。
Macの種類はなんでもイイと思う。
Mac MiniでもMacbookAirでも。
スペックある機種の方がXcodeさくさく動いて気持ち良いと思う。
機種にこだわる必要はないけど、年式は気をつけた方がいいかも。
Xcodeを使用するにあたり、最新のMacOSを使うのが望ましいのだが、
あんまり古い機種だと最新MacOSに非対応の可能性あり。
Xcode
AppStoreから無料で落とせる。
容量が5GBぐらいあるので、落とすのに時間かかる。
いわゆる統合開発環境。VisualStudioやらEclipseみたいな。
Titanium等、Xcodeを使わずにObjective-C以外の言語で開発する環境もあるが、
環境構築やビルド等、変なところで躓いてもつまんないので、
Mac+Xcodeでやるのが無難だと思う。
iOSDevの有料登録
年間で一万円ぐらいかかるあれの事。
とりあえずなくてもOK。
登録してなくても、コード書いてエミュレータで動き見る事は出来るから。
実機デバッグ、アプリ公開には必要なので、
イイ感じにアプリが仕上がってきたら登録すれば良いと思う。
技術
Objective-Cが独特なので、特に優位になるような知識はないかも。
自分はVBA、VB.NET、C#、Javaの経験あったけど、
Objective-Cまるで別物に感じた。
CとかC++とかの経験が有ったら役に立つのかも。
あと継承とかのオブジェクト指向概念は知ってると良い。
あと英語詳しいと楽、Xcodeとか全部英語だからw
既存のプログラミング経験があんま生きないので、
みんなゼロスタートなんだよ、って事を言いたい。
やる気大事w
次回予告
次回は入門編として、
Xcodeを使い始めて具体的に躓きやすい箇所についてあげていきたい。
「Appのバックグラウンド更新」の設定をObjective-Cから判断する
iOSから追加された「Appのバックグラウンド更新」の設定について、
許可されてるかをObjective-Cから判断する方法について調べました。
今ジオフェンスを使ったアプリを作っているのですが、
「Appのバックグラウンド更新」がOFFだとうまく動作しないみたい。
判定方法について書いてる記事探したけど、
「OFFにすると電源長持ちするよー」って記事ばっかw
以下が判定用プログラムソース
//「Appのバックグラウンド更新」の設定値を取得 UIBackgroundRefreshStatus status = [UIApplication sharedApplication].backgroundRefreshStatus; //判定処理 switch (status) { case UIBackgroundRefreshStatusAvailable: //Appの自動更新がON NSLog(@"%@",@"利用できる"); break; case UIBackgroundRefreshStatusDenied: //Appの自動更新がOFF もしくは、ONだがこのアプリはOFF NSLog(@"%@",@"拒否された"); break; case UIBackgroundRefreshStatusRestricted: //ペアレンタルコントロール時に入るかも NSLog(@"%@",@"制限"); break; default: //どんなケースで入るのか不明 NSLog(@"%@",@"どれでもない"); break; }
公式ドキュメント見た感じだと、
backgroundRefreshStatusってプロパティはiOS7以降から利用可能みたい。
UIApplication Class Reference
Dashboardのすすめ
つい最近、Dashboardを使い初めました。
MacはLionから使い初めたニワカ者なのですが、
最近まではデスクトップの一番左にいる役立たずぐらいにしか思ってませんでしたw
そんな自分ですが、表示方法の設定を見直したところ、
今ではDashboard無しの生活は考えられませんw
Dashboardを便利に使うのにマストな設定と、
便利なウィジェットについて記載します。
1.Dashboardをどのデスクトップからもアクセス出来るようにする!
①システム環境設定を開き、MissionControlを選択します。
②「Dashboardを操作スペースとして表示」のチェックを外す
※余談ですが、
その下の"最新の使用状況に基づいて操作スペースを自動的に並べ替える"
ってチェックも外すのが個人的に好みです。
これ、勝手に空気読んでデスクトップの順番を入れ替えちゃう機能です。
この設定を知るまで、デスクトップの順番が入れ替わるのはOSのバグだと思ってましたw
2.トラックパッドから便利にアクセス出来るよう設定
①MissionControl内でホットコーナーを選択する
②任意の場所にDashboardを割り当てる。
※余談ですが、
ホットコーナーの使い方、最近まで勘違いしてました。
カーソルを四隅に持ってくと指定したアクションになるんですね。
てっきり、トラックパッドの四隅触ればいいもんかと思ってました。
3.便利に使ってみる
今までは一番左のデスクトップに表示されてたのが…
マウスカーソルを一番左(任意の場所)に持ってくと…、
こんな風に表示されます!
素敵な感じに、Dashboardが透過表示されます。
今までデスクトップ4にいる時はDashboardと遠距離恋愛でしたが、
これでいつでも会いにいける!
いつでも会いに行けるってのは、なかなか使い所あります。
初期で入っているスティッキーズをDashboard貼っておけば、
どのデスクトップからでも簡単にメモを見れます!
4.おすすめアプリ
①クラウドメモアプリ:DashNote
クラウドサービス:SimpleNoteと連携出来るウィジェットです。
正直、これは一番良く使うクラウド系サービスです。
CatchNoteのサービスが8月いっぱいという事もあり、
これに乗り換えました。
アカウント作らなきゃなので、ちょっと手間ありましたがホント便利。
ウィジェット・iPhoneアプリ・iPadアプリ・ブラウザと、
どの環境でも使いやすいです。
※ウィジェットからの使用時はタグ付け/タグ検索は出来ないけど、
それでも十分便利。
同期速度がやたら早いので、Windows端末で貼り付けた内容を、
すぐにDashboardで確認出来るのもイイ!!
②メモアプリ:Notefile
これも実は同期とか出来るメモウィジェットみたいですが、
アカウントなしでも普通のメモとして使えます。
スティッキーズ代わりに使ってます。
サイズ変えられるのが便利で使ってます。
同期したい内容はDashnote、
同期不要なメモはNotefileって住み分けてます。
③ショートカットカンペアプリ:dashkards
これはショートカットのカンペウィジェットです。
いつでもアクセス出来るDashboardと大変相性が良いかと。
いろんなアプリ(純正アプリとかブラウザ)のカンペを選べます。
ただ、Xcodeカンペが無いのが残念w
他でもウィジェットを紹介してる記事は多々あるので、
自分が特にプッシュしたい物のみあげました。
ウィジェット探してると、ダウンロード先がリンク切れしてる、
って状態のものがいくつかありました。
あまり流行ってないのかな…?
次のMavericksとかで消されたりしないよね??
そこだけ心配w
Catch難民の移行手順
とうとうCatch Noteが終わってしまいますね。
Evernoteの対抗馬になるか?!と期待されていたクラウドサービス”Catch”が、なんと今月末をもってサービス終了という知らせが!
Catch終了のお知らせ - めっさ使うとりましたや~ん(>_ | ツナガリスト.net
自分にはEvernoteが難しいので、お手軽なCatch Noteを愛用してました。
そんなCatchが終わってしまうにあたり、今まで貯めてきたメモ書きを、
EvernoteとSimpleNoteに移行したので、その手順を記載します。
Catchからメモ一覧をエクスポートし、移行先サービスにてインポートする流れになります。
1.Catchからエクスポート
1)Catchにログインし、アカウント名を選択してエクスポートを選択する。
2)エクスポート形式を問われるので、zip形式を選択
3)任意の場所に保存
2.Catchからダウンロードしたエクスポートファイルを解凍する
1)ダウンロードしたzipを解凍する。
2)おそらくこんなフォルダ構成になるかと。
解凍されたファイル内の、以下ファイル(枠で囲ったファイル)が重要です。
解凍フォルダ/Catch Notes/spaces/All Notes/notes.enex
これ、Evernote形式のファイルみたいで、
Catchの粋な計らいで作成されるようです。
これをそれぞれのサービスにインポートします。
3.Evernoteにインポート
1)Evernoteはブラウザ上でのインポートが出来ないようです。
デスクトップアプリをインストールした上で実行する必要があります。
※Macにアプリがインストールされている事を前提とした手順になります。
2)アプリを起動します。
3)メニュー⇛ファイル⇛インポートを選択する。
4)ファイル選択ダイアログが表示されるので、
zip解凍したファイル(解凍フォルダ/Catch Notes/All Notes/notes.enex)を指定する。
5)同期ノートブックに入れるか問われるので、はいを選択
6)Evernoteを開くと、"notesをインポート"というタグが作成されて、
インポートされている事が確認出来ます。
4.SimpleNoteにインポート
SimpleNoteは、Dashboardのウィジェットがきっかけで使い始めました。
Catchと似た感じに使えて、iPhoneアプリもiPadアプリも有り素敵です。
1)Simplenoteにログインし、アカウント名を選択してインポートを選択する。
2)Simplenoteの登録アカウント情報を入力し、Submitを選択する
3)ファイル選択ボタンを押下すると、ファイル選択ダイアログが表示される。
zip解凍したファイル(解凍フォルダ/Catch Notes/All Notes/notes.enex)を選択し、
Uploadを選択する
4)ファイル形式を問われるので、Evernoteを選んでImportを選択
5)確認画面が表示されるので、OKを選んでConfirmを選択
6)完了画面が表示される
7)Simplenoteを開くと、"evernote_import"というタグが作成されて、
インポートされている事が確認出来ます。
以上
EvernoteはWindows版アプリもあるのですが、
こっちだとうまくアップロード出来ませんでした…。
やり方が悪かったんでしょうね。
Simplenoteみたいに、
ブラウザ上から出来るようにしてくれればいーのに。
初めました。
初ブログです。
以下の記事に感化されましたw
http://blog.hatenablog.com/entry/2013/08/22/180425
エンジニアに関してだけは、ブログを綴るメリットはあるような気がする。自分たちとは共通言語を持ち得ない人たちとのコミュニケーションの手段として、自分をより良く、そして、より正しく理解してもらうための武器として、ブログは上手く使えばかなりの威力を持つはずだ。
自分はエンジニアであり、転職願望もあるのでブログ始める事にしました。
中小の独立系ソフトウェアハウスで働いているので、
業務範囲はそこそこ広いと思ってます。
お客さんのとこに要望を伺うとこから、設計・製造・テストまで。
開発は、
VBAを新人研修で習って依頼、
と経験してきました。
林檎信者なので、
Objective-Cを上手に書ける人になりたいですw
技術的な内容、普段気付いた事とか書いていきたいです。
よろしくお願いします。