読者です 読者をやめる 読者になる 読者になる

カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

【1日目】4日でTRPGのアプリ作りに挑戦してみる

swift3 かっぱクエスト
スポンサードリンク

詳細!Swift 3 iPhoneアプリ開発 入門ノート Swift 3+Xcode 8対応
f:id:InvokeTwoA:20151023183618p:plain「去年辺りからかっぱクエストを作りたいと言ってたけど、けっきょく完成してない……」
f:id:InvokeTwoA:20151215172640p:plain「PRGを作りたくなったりアクションを作りたくなったりタワーディフェンス系を作りたくなったり……フラフラしてて開発が進まないんですよね」
f:id:InvokeTwoA:20151023183618p:plain「このままじゃ一生完成しないので、一旦全てを白紙に戻して、ここから3日以内で完成させてみせるよ」
f:id:InvokeTwoA:20151215172640p:plain「おお、まさに一念発起。開発は常に短期決戦がベストの法則」
以下、本日やった事

app store にアプリを登録

f:id:InvokeTwoA:20151023183618p:plain「久しぶりにアクセスする iTunes connect」
f:id:InvokeTwoA:20151215172640p:plain「ワクワクドキドキですな」

f:id:InvokeTwoA:20161225201302p:plain

iTunes Connect の利用制限:12月23日~27日
12月23日から27日(太平洋標準時)まで、新規 App と App のアップデートは受け付けられなくなります。そのため、リリースの送信や承諾を前もって計画して行う必要があります。iTunes Connect とデベロッパアカウントのその他の機能は引き続きご利用いただけます。App Store 向け App の準備について詳しく見る

f:id:InvokeTwoA:20151023183618p:plain「いきなり出鼻を挫かれてしまった……」
f:id:InvokeTwoA:20151215172640p:plain「まぁ、モノさえ作れば test flight で知人にプレイしてもらう事はできますし、とりあえず開発を先に進める事にしましょう」

  • 年末は app store が休みになる事をすっかり忘れていた

f:id:InvokeTwoA:20151023183618p:plain「しかし問題はそれだけじゃないんだ」
f:id:InvokeTwoA:20151215172640p:plain「いきなりスタートから問題山積みですね」

契約に関するお知らせ
The updated Apple Developer Program License Agreement needs to be reviewed.

f:id:InvokeTwoA:20151023183618p:plain「契約が切れていたので更新しなくちゃね」
f:id:InvokeTwoA:20151215172640p:plain「今まで如何にiOS開発をサボってたかを痛感しますな」

apple の証明書の取得、新しいbundle ID の取得

f:id:InvokeTwoA:20151023183618p:plain「久しぶりに developerのページに移動」
f:id:InvokeTwoA:20151215172640p:plain「申請関係は面倒なので機械的に終わらせたいですな」

  • appleの証明書に関しては developer program を更新したら自動で取得してた
  • 新規bundle IDの登録を行うため、入力フォームに色々と入力していく
  • 今回は課金とかの機能は無いので楽

f:id:InvokeTwoA:20151023183618p:plain「あっという間に作れた。なんだか楽になったなぁ」
f:id:InvokeTwoA:20151215172640p:plain「昔は証明書関係とかエラーが起きたりして超面倒だったイメージ」

Xcode で新プロジェクトを作成

  • 初期テンプレは Single View Application を選択
  • テンプレを利用すると自分の把握しないコード部分が出てきて厄介という判断

とりあえずタイトル画面とゲームオーバー画面を作る

f:id:InvokeTwoA:20161225201206p:plain

f:id:InvokeTwoA:20151023183618p:plain「まず始まりと終わりを作るのが肝心……」
f:id:InvokeTwoA:20151215172640p:plain「全てが完成してからじゃ無いと遊べない、というタイプの開発方法は良く無いですもんね。常に一通り遊べる状態でブラッシュアップしていくのがカッパスタイル」

adMob(広告)を登録する

f:id:InvokeTwoA:20151023183618p:plain「いきなり広告の設置から始めるという外道スタイル」
f:id:InvokeTwoA:20151215172640p:plain「広告って意外とスペース取るし後から挿入すると大変だから仕方ないのです」
f:id:InvokeTwoA:20151023183618p:plain「マネタイズは大事だよね」

  • 広告の設置場所はヘッダーとフッターどちらにするか?
  • navigation bar の backボタンを使うならばフッター
  • フッターのタブメニューを使うならヘッダーに置くと良さそう(ボタン操作の邪魔にならない)
  • わざとボタンの近くに広告を設置して誤操作を期待するアプリも多いけれど、わざわざユーザーの満足度を下げるのは危険だと思う

f:id:InvokeTwoA:20151023183618p:plain「今回はフッターのタブメニューを使いたいし、ヘッダー部分に広告を設置しよう!」
f:id:InvokeTwoA:20151215172640p:plain「ここまではサクサク決まりますな」

  • 広告用アプリIDなどをは定数ファイル CommonConst.swift に記載するようにする
  • 今後も定数は下記ファイルで定義。このファイルは git に登録しない

CommonConst.swift

let GOOGLE_AD_ID = "ca-app-pub-*****************/**********”

下記のスタートガイドに従い設定していく

https://firebase.google.com/docs/admob/ios/quick-start?hl=ja

f:id:InvokeTwoA:20151023183618p:plain「ここで Podfile も使えるようになった」
f:id:InvokeTwoA:20151215172640p:plain「なんか他に入れるべきライブラリあるかなぁ」

ここでシンプルなTitleViewControllerが完成

import UIKit
import GoogleMobileAds

class TitleViewController: UIViewController {

    @IBOutlet weak var _bannerView: GADBannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setGoogleAds()
    }
    
    // google ads の設定
    func setGoogleAds(){
        _bannerView.adUnitID = GOOGLE_AD_ID
        _bannerView.rootViewController = self
        _bannerView.load(GADRequest() )
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}


f:id:InvokeTwoA:20151023183618p:plain「これで HalloWorld 的な部分は完了」
f:id:InvokeTwoA:20151215172640p:plain「ここからがゲーム作りですな」

UITabBarControllerでフッターにタブメニューのある画面を作る

f:id:InvokeTwoA:20151023183618p:plain「今回は下のタブバーでメニュー画面とプレイ画面を行き来するスタイル」
f:id:InvokeTwoA:20151215172640p:plain「フレーム処理のないリアルタイム処理のないゲームなので別タブ開いてる時に既存タブが放置されても問題ない訳ですな」

とりあえず基本的な画面遷移を作る

  • タイトル画面
  • キャラメイク画面
  • 冒険画面
  • メニュー画面
  • ゲームオーバー画面

この時点で一旦 git に push する

f:id:InvokeTwoA:20151023183618p:plain「ちょっといじったら動かなくなった、というのもiOS開発ではよくある事」
f:id:InvokeTwoA:20151215172640p:plain「いつでもロールバックできるように随時gitに登録していきたいですな」

  • CommonConst.swift など重要なファイルは .gitignore に登録して後悔しないようにする
  • git の READMEもいつかちゃんと書きたい

1日目の作業は大体こんな感じで終了

f:id:InvokeTwoA:20151023183618p:plain「ふー。まだゲームのゲの字も出来てないのに満足感」
f:id:InvokeTwoA:20151215172640p:plain「手を動かし始めるとやる気が高まってきますよね」
f:id:InvokeTwoA:20151023183618p:plain「早くtest flight で配信できるレベルに持って行きたいなぁ」

  • 目標は12月28日に、アップルの休みが終わると同時にリリース申請をできる事

git にpushされた内容はこちら
github.com

f:id:InvokeTwoA:20151023183618p:plain「前に登録した kappaQuest のリポジトリ……」
f:id:InvokeTwoA:20151215172640p:plain「ゴミリポジトリが溜まるのはよくある事です」