Jewel-mmo開発日記

RubyでMMORPGを作る過程を記録する日記。 Yokohama.rb をよろしくお願いします。

iPhone上でLuaのHello Worldを実行

iPhoneのデバイス(実機)でLuaが実行できることを確認した。

難しいことはなかった。 lua-5.1.4をダウンロードしてsrc以下に含まれるソース(*.c, *.h)のうち以下を除くすべてをiPhoneアプリのプロジェクトに登録する。

  • Makefile
  • lua.c
  • luac.c

Luaのソースをプロジェクトに追加すると、以下のようなコードが実行できるようになるはず。

#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"

int hello(void)
{
    lua_State *lua = luaL_newstate();
    luaL_openlibs(lua);
    if(luaL_dostring(lua, "print(\"HELLO WORLD!\")")) {
        printf("エラー\n");
        return -1;
    }
    return 0;
}

luaL_dostringでLuaスクリプトを文字列として与えている。

initWithNibNameあたりからhello関数を呼び出せばデバッガのコンソールで「HELLO WORLD!」の表示が確認できる。 シミュレータでもデバイスでもどちらでも動いた。

なんてかんたん!

permalink
category: iPhone(22)
no tweet

Mac未経験からiPhoneアプリ開発→申請できるようになるまでの流れ

先日無事初めてのアプリを公開した(すごーくシンプルなやつ)。 これから本格的にiPhone開発していきたいと思っているんだけど、 その前にここまでの流れというか道のりを忘れないように簡単にまとめておく。

iPhoneのみならずMacの操作もまったくわからない所からの話。 iPadの開発に関してもたぶん同じだと思う。

あくまで個人的な実感だけど、参考までにそれぞれの手順にかかる日数も記載した。

1. Mac本体を用意する

iPhoneの開発にはMacが必要だ。 オレはまったくMacを触ったことがなかったのでMacBookを買うところからのスタート。 まあiPhoneやるためにMacを買ったわけじゃなくて、単に前からずっとMacほしくてPCの買い替えのタイミングに買ったのだ。 そのあとiPhone開発もできるじゃんということで、iPhoneを買った。

というのが昨年(2009年)の夏の話。それから細々とだけど時間を取り繕ってiPhoneアプリを作ってる。

2. Macに開発環境をインストールする

iPhoneの開発にはXcodeというMac特有の開発環境とiPhone用のSDKが必要。 これらは標準のMacにはインストールされていない。

iPhone開発環境を含んだXcodeはAppleのサイトから無料でダウンロードできる(たしか登録が必要)。 3ギガくらいあるのでうちのADSLで落とすのに半日かかった・・・。

ちなみに最新のβ版だとiPadの開発もできる(2010年3月現在)。

3. シミュレータベースの開発

MacがあればiPhoneの実機がなくてもiPhoneシミュレータを使ってアプリを開発することができる。 シミュレータはiPhone(またはiPad)の外観がそのままPCのモニタに表示され、その画面内に開発中のアプリが表示される。 シミュレータに対するマウスクリックがタッチ操作となるという感じ。 シミュレータは実機とほぼ同じなんだけど、加速度センサーとかはシミュレートできない。

シミュレータを使うのはすごく簡単。Xcodeで新規プロジェクトを作る際、アプリのひな形となるいくつかのテンプレートが用意されているので、プログラムを1行も書かなくてシミュレータを使ったアプリ開発を体験できる。

開発環境のインストールからここまでの手順は、Macがあれば即日試すことができる。Mac本体を除けばここまでは無料だ。

4. 自分のアプリを実機で動かす

このステップがちょっと面倒くさい。

当然iPhoneまたはiPod touchのデバイス(こういうケースでは実機のことをデバイスと呼ぶ)は手元にあるものとして、その他に有料のDeveloper登録が必要だ(年間99ドル)。

自分で作成したアプリを動かすにはDeveloper登録だけではダメで、自分のデバイス固有の証明をWeb経由でAppleから取得して、それを使ってアプリをビルドしなければならない。 要はDeveloper登録をした者が持つデバイスのみでしか(自分で開発した)アプリが動かないように厳しい制限が設けられているわけだ。 ちなみにWebで申請すれば他人の持つデバイスでも同じようにアプリを動かすことができる。

手元のデバイスで動かすまでの手順はやや複雑(この手順自体は特にはまらなければ1、2時間で終えられる)。慣れてしまえばそんなに辛くはないけど・・・。

シミュレータで動いていればそのまま実機で動くので、アプリ自体を特別実機に対応させる必要はない。その辺は楽だった。 iPod touchでもiPhone向けにビルドしたアプリがそのまま動く。 一度動くところまで進んでしまえば、その後はただXcodeのアプリ実行先にデバイス指定するだけでよい。

運が悪いとDeveloper登録ではまって数日かかるかも。

5. アプリ開発について

XcodeやInterface Bulder(ビューを作成するGUIツール)を使ったことがなかったので(これらのツールはiPhone開発だけでなくMacのアプリを作るときにも使うもの。だと思う)、慣れるまで多少の時間がかかる。というかいまだに慣れてないので勉強中。

アプリの開発には大きく分けて、iPhoneの標準的な機能を使って作成する方法と、OpenGLを使う方法がある。 OpenGLの方は使ったことがないけど、こっちは普通のコンシュマーゲームを作るのと同じノリじゃないかな。

言語はObjective-C。・・・だけど、Objective-Cの中ではC言語がそのまま書けるので、Cを知っていればなんとかなるという感じ。 いまのところObjective-Cの勉強に特に時間をかける必要性は感じないし、別にCでいいじゃんと思う。

OpenGLは別として、iPhoneに出てくる部品をそれなりに扱えるようになるにはもう少し時間がかかりそう。 たぶん何も知らない状態からフルタイムで1ヶ月間がっつりiPhone開発に取り組めば、たいだいひと通りのことができるようになる、くらいの難易度じゃないかと思う。

初めてリリースしたTHE 合格の場合だと、iPhoneの一部の機能しか使ってないシンプルなアプリなので、何も知らない状態から初めて1、2週間くらいの作業量かな。

6. 無料アプリの申請

これがまた面倒くさい。

開発用とは別に申請用の証明を取得してアプリをビルドしないといけない。 またアプリの申請時にはいくつかの必須項目を入力しないといけない(まあほとんどはApp Storeに並ぶときに必要な情報なんだけど)。

あとはアプリのWebページ作ったり(もしかして必須でない?)。 まだリジェクトされたことがないので、リジェクト後の手続きの進め方はわからない。 アップデート申請は、一度申請を通した者にとっては難しい作業じゃない。

面倒と言っても、途中で心が折れなければ申請の作業自体は1日で十分できるはず・・・。なのでそんなにたいした作業があるわけじゃない。

申請したアプリがシンプルだったせいか、5日くらいで無事通過してApp Storeで公開された。

7. 有料アプリの申請

これがさらに面倒くさそう。

外貨の扱える口座が必要らしい。その他どんな手続きが必要なのかはまだやったことがないのでわからない。

まとめ

iPhoneの開発/申請では面倒な手続きもあるけど(主に申請関係)、まあ普通にWebで調べながらやってればなんとかなる。

書籍でおすすめなのは はじめてのiPhoneプログラミング (今調べたら新しく はじめてのiPhone3プログラミング が出てた)。今まさに読んでるところだけどこの本はわかりやすい。他にも何冊か買ったんだけど特にこれというものには出会っていない。

今後はアプリをしっかり作り込む術を身につけていく予定。

permalink
category: iPhone(22)
no tweet

iPhoneのプロジェクトに新しいviewとcontrollerを追加する手順

先日リリースしたアプリはiPhone SDKのプロジェクト新規作成で選択できる「Utility Application」テンプレートをそのまま利用したのだが、 今作っているRPGでは少なくとも5画面ほど遷移させる必要がある。

Interface Bulderをいじりながら「Utility Application」ベースのプロジェクトに新しいviewとcontrollerを追加することができたので、その手順をメモしておく(手探りで確立した手順なので正しいかどうか自身なし)。

  1. 「Utility Application」で新規作成したプロジェクトからInterface Bulderを開いておく
  2. Interface Bulder => File => New にてCocoa TouchのViewを選択
  3. File => Save を選んでFooという名前で保存。このとき作成中のプロジェクトに追加するチェックを入れておく
  4. FooというWindowのFile's Ownerをダブルクリックし、Class欄に「FooViewController」と入力する
  5. 次にFile's Ownerの下にあるViewをクリックしてClass欄に「FooView」と入力する
  6. File's Ownerをクリックし、File => Write Class Files... を実行してFooViewController.hとFooViewController.mを書き出す
  7. 次にFile's Ownerの下にあるFoo Viewをクリックし、File => Write Class Files... を実行してFooView.hとFooView.mを書き出す
  8. FlipsideViewのソースの中身を書き出したファイルにコピーする
  9. 作成した.hと.c内の「Flipside」をすべて「Foo」に置換する
  10. File's Ownerをクリックして「Foo View Controller Connections」ウィンドウ (左から2番目のタブ)内のOutlets => viewとFoo Viewを接続する

ここまででビルドは通るはず。

次に作成したFooViewContorollerを呼び出してFooViewを表示するようにする。

MainViewController.hの次の部分を修正する。

#import "FlipsideViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {
}

以下のように書き換える(動いたけど文法がわからないのでこれでいいのか自信なし)。

#import "FlipsideViewController.h"
#import "FooViewController.h"

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate, FooViewControllerDelegate> {
}

次にMainViewController.mを書き換えてしまう(もしくは新しいアクション用のメソッドを定義する)。 FilpsideをFooに書き換える。

- (IBAction)showIndo {
	FooViewController *controller = [[FooViewController alloc] initWithNibName:@"FooView" bundle:nil];
	controller.delegate = self;
	
	controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
	[self presentModalViewController:controller animated:YES];
	
	[controller release];
}

ちなみにUIModalTransitionStyleFlipHorizontalの部分をUIModalTransitionStyleCoverVertical(下から出てくる) やUIModalTransitionStyleCrossDissolve(半透明で徐々に切り替わる)に変えると切り替わるときのアニメーション方法を変えることができる。

あとflipsideViewControllerDidFinishの引数の方をidとしておく(idにするよりもっといい方法があるかもしれない)。

- (void)flipsideViewControllerDidFinish:(id)controller {
	self dismissModalViewControllerAnimated:YES];
}

これでinfoアイコンをクリックするとFooViewが表示されるようになる。

permalink
category: iPhone(22)
no tweet

LuaをXcodeでコンパイルしてみた

ソースファイルを突っ込んだら普通にビルドできた。

クジラ飛行机さんの書いた高速スクリプト言語「Lua」を始めよう!でLuaを勉強中。

iPhoneアプリの開発にLuaを使うにあたって悩んでいるのは、画像の制御をLuaでやるかどうかというところ。

当初はモデル部分だけをLuaで実装して、UIに関する部分はCで実装しようかと考えていた。 が、やろうと思えば画像等の管理をLua側でやることも可能なわけで、その辺りの設計をどうしようかなと。

とりあえず、UIはLuaを使わずに普通に作る形にした方が手っ取り早いのかな。Luaへの依存度を高くするのはいろいろ試してからの方がいいかもしれない。

permalink
category: iPhone(22)
no tweet

iPhone向けRPGをLuaで

今作ろうとしているiPhone向けのRPGの実装にはLuaを使いたいと思っている。

去年の年末にローカルにLuaの実行環境を用意して、勉強しながらスクリプトを少し書いたのだが、 その後放置したままだいぶ時間が経過してしまった。

今日ひさびさに以前書いた170行のLuaのコードを読むとぱっとみ意味がわからない。 実行するとなにやら実行エラーが出るのだが、その意味もよくわからない。

そのコードは思ったよりLuaぽく書かれていて、当時はそれなりに調べながら努力して書いていたらしい。 すぐには思いつかないようなLuaぽい表現がいくつも使われている。

まずはこのコードを読みながら当時のことを思い出していくとしよう。 思ったよりちゃんと実装してるし、思ったより作業は進んでいた。

ある程度感が戻ったら次はiPhone上でLuaを走らせることに挑戦してみたい。

permalink
category: iPhone(22)
no tweet