iosアプリ開発 脱初心者に向けて
DESCRIPTION
2014.3.27 スマホアプリ開発勉強会@TalknoteTRANSCRIPT
iOSアプリ開発 脱初心者に向けて
Kosuke Ogawa (@koogawa) 2014.3.27 スマホアプリ開発勉強会@Talknote
•小川航佑 Kosuke Ogawa • @koogawa • 趣味と仕事の両方でiOSアプリを開発
作ったアプリ
まりも
• スマホ内でまりもを育成するアプリ
• やることは水を換えるだけ
• 30万ダウンロード突破!
テレビでも紹介されました
今回の対象者• アプリの作成~実機でのテストなど基本的なことは理解している
• もっと効率的に開発したい
• アプリをリリースしてみたい
• もっと多くの人に使ってもらいたい
アジェンダ
1. 開発Tips
2. リリースしてみよう
3. より多くの人に使ってもらうために
4. おまけ
1.開発Tips
実行中のメソッド名を表示する• NSLog(“%s”, __func__);
• どのメソッドを通ってきたか把握できる
• マクロにしておくと便利#define LOG_METHOD NSLog(@"%s", __func__)
• LOG_METHOD;
• アプリ名-Prefix.pch に書いておくと便利
NSLogを隠す
• リリース時にNSLogは出すべきではない
• リリース後もコンソールから見られてしまう
• デバッグ時にのみ出力するマクロを作ろう
• LOG(@“hogehoge”);
// NSLogと同じように書ける LOG(@"debug log”); !
// メソッド名表示 LOG_METHOD;
NSStringFromXXX系を使う
CGRect rect = CGRectMake(0, 0, 200, 100);
NSLog(@"%@", NSStringFromCGRect(rect));
// {{0, 0}, {200, 100}} と出力される
他にもいろいろ• NSStringFromCGPoint
• NSStringFromCGSize
• NSStringFromCGRect
• NSStringFromCGAffineTransform
• NSStringFromUIEdgeInsets
• NSStringFromUIOffset
ViewControllerに 何でも書くのをやめる
よくあるパターン1
AAAViewController
API
BBBViewController CCCViewController
通信 通信 通信
よくあるパターン1
AAAViewController
API
BBBViewController CCCViewController
通信 通信 通信= =
通信処理を分ける
AAAViewController
API
BBBViewController CCCViewController
通信
• ソースコードの重複が無くなる
• 再利用しやすい
• メンテナンスしやすい
よくあるパターン2!
TableViewController
DataSource
Delegate
DataSource/Delegateを分ける
!TableViewController
DataSource
Delegate
CollectionViewにも対応できる
!CollectionViewController
DataSource
Delegate
• 高い柔軟性が得られる
• 再利用しやすい
• ViewControllerを軽量化できる
便利なライブラリ
Reachability
• ネットワークの接続状況を確認できる
• 現在の接続状況が3G、WiFi、もしくは圏外なのか
• Apple公式のライブラリ
AFNetworking
• もはや定番の通信ライブラリ
• ファイルアップロードも簡単
• URLから画像を取得して直接UIImageViewを作成することもできる
SVProgressHUD
ローディング表示を数行で実装できる
心がけること
• ライセンスをよく読む
• iOSのバージョンアップで動かなくなることも
• 作者に感謝すること
便利なサービス
クラッシュレポート
• Crashlytics
• Crittercism
• Bugsense
Crashlytics公式サイトより
• クラッシュするとメールで教えてくれる
• iOSバージョン
• 端末の種類(iPhone, iPad, iPod…)
• クラッシュ発生箇所(行数までわかる)
• 無料
テストアプリ配布
• TestFlight
• DeployGate
プッシュ通知• サーバサイドプログラムなしでプッシュ通知を送れる
• 証明書(.p12)ファイルをアップロード
• 専用のSDKが用意されている
• 1ヶ月あたり1,000,000プッシュまで無料
2.リリースしてみよう
リジェクトされないために
• 落ちないよう努力する
• ポルノコンテンツを表示しない
• 機能的なアプリを作る
落ちないよう努力する
• 複数のiOSバージョンでテストする
• 複数のデバイスでテストする(カメラ有無など)
• クラッシュレポートを使う
ポルノコンテンツを表示しない
• 外部コンテンツだとしても不可(バナー等)
• レーティングを正しく設定する
• 違反報告の仕組みを作る
機能的なアプリを作る
• シンプルすぎるアプリはリジェクトされる
• Webをただ表示するだけのもダメ(それHTML5でもいいやんって言われる)
• 役に立つアプリを作ろう
ダメなアプリの例
改善後
3.より多くの人に 使ってもらうために
口コミをねらう
• シェア機能を付けよう
• ユーザが友達に紹介してくれる
• ハッシュタグをつけると検索しやすい
アイコンは手を抜かない
• アイコンが第一印象を決める
• カッコ悪いとホーム画面に置いてもらえない
• 自分で作れないならクラウドソーシングなどを使う(Lancersがおすすめ)
ブログで紹介してもらう• なんだかんだ言って一番効果がある(当社比)
• ブログ(持続性)>テレビ(瞬発性)>雑誌
• エゴサーチを定期的にやる
• 紹介していただいたら「ありがとう」を忘れずに
• 効果を教えてあげると喜ばれる
こまめなアップデート• バグはすぐ直す
• iOSアップデートにすばやく対応する
• ユーザの要望に耳を傾ける(すべてを聞く必要はない)
• ブレないことが大事
自分がヘビーユーザーに
• リリースして終わりだとアプリが成長しない
• 自分で使い込んでみることが大事
• 毎日使ってみると、改善すべき点が見えてくる
ASOはほどほどに…• タイトルにいろいろ詰め込まないこと
• 最近はリジェクトされる例が増えてきています
• どんなにASOを頑張っても検索上位に表示されるのは一番使われているアプリなのです
• 中身で勝負しよう!
何のためにアプリを作るのか?
• 勉強のため?
• 有名になりたいから?
• お金がほしいから?
• たくさんの人に喜んでもらいたいから?
4.おまけ
マネタイズ• 広告出すなら最初から出す
• 広告は邪魔にならない場所に
• 位置次第ではレビューが炎上します^^
• ターゲットをよく考える(国・年代性別など)
• 有料アプリより無料アプリに広告載せるほうが儲かってます(当社比・アプリの性質にもよる)
ありがとう ございました