iPhoneアプリをWindowsで開発したい。

前回、こういうことを言ってたのですが

  • 開発プラットフォームを用意するのが大変(Macだけで良いかもしれませんが…)
  • 開発ツール、言語をそれぞれで覚えるのは大変
  • 作ったアプリの資産をiOS、Andoroidで共有したい

少々、調べました。いろいろ開発ツールはでているようで表にまとめてみました。

メーカ 開発ツール コスト デプロイ 開発プラットフォーム 本家
Ansca Corona INDIE Android $199/Year Android Windows XP http://jp.anscamobile.com/
INDIE iOS $199/Year iOS Mac OSX10.6
PRO $349/Year iOS/Android Mac OSX10.6
Nokia Qt LGPL/GPL Windows/Linux/Mac OS X/Windows CE/Linux/MeeGo/Symbian/Android/iOS Windows XP/Mac OS X 10.6/Ubuntu Linux http://www.forum.nokia.com/Develop/Qt/
Novell MonoTouch Professional $399/Year iOS Linux, OS X, BSD, Microsoft Windows http://monotouch.net/
Enterprise $999/Year iOS
mono for Android Professional $399/Year Android http://mono-android.net/
Enterprise $999/Year Android
Adobe Adobe Flash Professional 88,200 円 iOS/Android Windows XP/Mac OS X http://www.adobe.com/jp/products/flash.html
Adobe AIR SDK Free Android/BlackBerry/iOS Windows XP/Mac OS X/Linux http://www.adobe.com/jp/products/air/sdk/
Adobe Flash Builder 89,250 円 Android/BlackBerry/iOS Windows XP/Mac OS X http://www.adobe.com/jp/products/flash-builder.html
Appceerator Titanium Indie Apache 2.0 Windows/Linux/Mac OS X/iOS/Android Windows/Linux/Mac OS X http://www.appcelerator.com/products/titanium-mobile-application-development/
Small Business 見積
Enterprise 見積
ここには、できることが書いてある訳ではないのでご注意ください。たとえば、スマートフォンタブレット向けに作るとして特徴的な

  • マルチタッチ
  • 位置情報(Geolocation)
  • カメラ
  • 加速度(Accelerometer)
  • 傾き(Stage Orientation)

などなど、使えるかどうかまで調べていません。
QtやAdobe AIR、Indieなどが開発プラットフォームを選ばず、クロスプラットフォームにデプロイできるようです。自分の作りたいものが作れるかどうか調べて、実現可能であるならばこれらの開発環境を使うのもありなのではないでしょうか。
Adobe Flash Professional CS5.5は、入手予定なので手元に届いたらレポートしたいと思います。

FLASH PROFESSIONAL CS5を使って、iPhoneアプリ1(アプリの作成から配布まで)

iPhoneアプリAndroidアプリも作りたいけど

  • 開発プラットフォームを用意するのが大変(Macだけで良いかもしれませんが…)
  • 開発ツール、言語をそれぞれで覚えるのは大変
  • 作ったアプリの資産をiOS、Andoroidで共有したい

開発プラットフォームとしてLinuxWindowsMacなどが使える。配布もiOS、Andoroidなどにできる開発ツールがいくつかあります。
ちょっと調べたところ、NOKIAのQt(キュート)や、AdobeAIR SDKなどがあります。(その他にもいろいろ・・・)
http://qt.nokia.com/title-jp/
http://www.adobe.com/jp/products/air/
(やる気がでたら)いずれ評価していきたいと思います。


今回は、敷居の低そうなAdobeFLASH PROFESSIONAL CS5を使って、iPhoneアプリを作成したいと思います。
WindowsiPhoneアプリが作れるのか?」という疑問に挑戦です。


FLASHを起動すると、新規作成の項目にプロファイルで「iPhone OS」が既にあります。AdobeAppleに対する熱烈なラブコールです。

iPhone OS」を選択してみます。
初期のデザイン画面が開きます。プロパティのところにiPhone OS設定などがあり、それっぽい感じです。

とりあえず、Flashでアニメーションを作ってみます。テストなので簡単にボールが左から右に流れるようなものを作ります。

これをiPhone向けにデプロイするだけでいいのでしょうか。だったらすごい楽なんですけどねw


iPhone OS設定を開いてみます。

一般タブはとりあえず、出力ファイル「FlashTest.ipa」、アプリケーション名「FlashTest」、バージョンを「1.0」として設定します。
デプロイタブに切り替えると、iPhone電子署名、プロビジョニングプロファイル、デプロイタイプなどが並びます。

iPhone証明書(.p12)を使用する」とあります、なぞです。しかし、Adobeはユーザを突き放したりしません。製品サポートを見てみると

  • アプリケーションを iPhone にインストールするには、iTunes が必要です。
  • iPhone 向け AIR アプリケーションを開発するのに、iPhone SDK および XCode は必要ありません。
  • iPhone デベロッパーとして登録する必要があります。また、開発用証明書およびプロビジョニングプロファイルを入手する必要があります。

とのこと、また開発証明書をFlashで利用するには、p12の形式に変換する必要があるみたい。


デベロッパー登録はApp Storeで配布するためには必須なので、避けれません。
デベロッパー登録、iPhone 開発用証明書、プロビジョニングプロファイルの作成については、私はMacでやっているので割愛します。ごめんなさい。
Windowsでも出来るので、Adobeのサポートページを良く読んで実施してください。


以降、Macで既に登録している人向けです。

  • アプリケーション/ユーティリティフォルダー内にあるキーチェーンアクセスアプリケーションを起動します。
  • キーチェーンアクセスの「分類」で「鍵」を選択します。
  • 使用している iPhone 開発用証明書に関連付けられている秘密鍵を選択します。
  • 秘密鍵は、ペアになっている iPhone Developer: [名] [姓] 公開証明書によって識別されます。
  • ファイル/書き出すを選択します。
  • 個人情報交換(.p12)を選択し、保存ボタンを押下します。
  • 書き出しに必要なパスワードを入力します。(証明書を利用するためのパスワード)
  • キーチェーンのパスワードを入力します。デフォルトは、ユーザアカウントに最初に設定したパスワードと同じもの。

これで書き出したファイルを、「iPhone証明書(.p12)を使用する」に指定。パスワードに「書き出しに必要なパスワード」で指定したパスワードを入力します。


次にプロビジョニングプロファイルを作成し、先ほど作成したiPhone証明書と合わせて設定します。

最後のタブは、アイコンです。57*57、512*512のアイコンを設定します。

設定が終わったら、パブリッシュボタンを押下します。
さきほど指定したファイル名「FlashTest.ipa」でアプリケーションが出来上がりました。これをiTuensにドラッグアンドドロップして、実機をつないで同期すると完了です。
動かしてみると、こんな感じです。ちゃんと動いてます。

xCodeで作るよりは、楽勝な感じです。WindowsでもiPhoneアプリの開発は可能ということです。Macを買わなくても大丈夫w
Flashは、5.5がもうすぐ発売されますので進化に期待ですね。発売されたらまた評価してみます。

iPhoneでSQLite3を使う12(INSERT OR REPLACE文)

SQLiteでテーブルにデータを追加する際、あれば更新なければ追加ということがしたかったので
1.あるかどうかのチェックをSELECT文
2-1.あればUPDATE文
2-2.なければINSERT文
という形で実装していたのですが、なければSELECT→INSERT、あればDELETE→INSERTという動きになります。常に2回SQLを発行するのがもったいない。
他のDBでは、1文で処理できるSQLがあるのですが(OracleのMERGE、MySQLのON DUPLICATE KEY)、SQLiteでは無いと思っていました。
よくよく調べてみると、INSERT OR REPLACEというのがあって、INSERT時にPRIMARY KEY制約、UNIQUE制約で重複していればDELETEを自動でしてくれるみたいです。

INSERT OR REPLACE INTO テーブル名 VALUES (値, 値, 値, 値…)

実行すると

sqlite> INSERT INTO userinfo (id) VALUES (1);
sqlite> INSERT INTO userinfo (id) VALUES (1);
Error: PRIMARY KEY must be unique
sqlite> INSERT OR REPLACE INTO userinfo (id) VALUES (1);
sqlite> 

なければINSERT、あればDELETE→INSERTという動きになるので、INSERTが多い場合は前述のやり方よりパフォーマンスアップが望めるかもしれません。

Xcode4が4.0.1になってた!!

Whatʼs New in Xcode 4.0.1

  • Improved Assistant editor logic when switching among different file types
  • Fixed a bug that prevented indexing of some projects
  • Fixed a bug related to nil settings in the Core Data model editor
  • Fixed a bug in LLVM GCC 4.2 and LLVM compiler 2.0 for iOS projects
  • Additional bug fixes and stability improvements

TwitterをObjective-Cから使う12(MGTwitterEngineのAPI呼び出し後に値を受ける)

基本、MGTwitterEngineのAPI呼び出しの結果は、デリゲートメソッドのxxxxReceivedで受信して処理することになります。
結果がNSArrayで返ってきます。NSArrayには、1件分のNSDictionaryが格納されています。
あとはobjectForKeyを使って、各値を取り出せばOKです。objectForKeyで指定する名前は、twitter APIのレスポンスを調べればわかります。(xmljsonとかで戻されるレスポンスのタグ名と同じです)


以下、statusesReceivedとgetBulkUserInformationForIDsで呼ばれる、デリゲートメソッドの値の取得例を示します。


getUserTimelineForなど、タイムラインを取得した場合。

- (void)statusesReceived:(NSArray *)statuses forRequest:(NSString *)connectionIdentifier
{
	for (NSDictionary* status in statuses) {
		// つぶやきの情報
		// [status objectForKey:@"id"]
		// [status objectForKey:@"created_at"]
		// [status objectForKey:@"text"]

		// つぶやいた人の情報(階層構造になっています。)
		NSDictionary* user = [status objectForKey:@"user"];
		// [user objectForKey:@"name"]
		// [user objectForKey:@"screen_name"]
		// [user objectForKey:@"profile_image_url"]
		// [user objectForKey:@"followers_count"]
		// [user objectForKey:@"friends_count"]
	}
}

getBulkUserInformationForIDsなど、ユーザの情報を取得した場合。

- (void)socialGraphInfoReceived:(NSArray *)socialGraphInfo forRequest:(NSString *)connectionIdentifier
{
	for (NSDictionary* user in socialGraphInfo) {
		// [user objectForKey:@"id"]
		// [user objectForKey:@"name"]
		// [user objectForKey:@"screen_name"]
		// [user objectForKey:@"profile_image_url"]
		// [user objectForKey:@"followers_count"]
		// [user objectForKey:@"friends_count"]
	}
}

今日、3本目のアプリを申請しました。

3日くらいで作っちゃいました。リジェクトされなければ、4月はじめくらいにストアに並びます。プログラミングしている時間より、Illustratorでお絵かきしていた時間の方が長かったw
サウンド、ネットワークとアプリを組んだので、次はカメラアプリです。プログラミングの部分はこなれた技術だったので苦労はしなかったのですが、Xcode4で最初から作ったはじめてのアプリだったのでその点で苦労しました。Xcode4使いこなせてないのですが、コード補完が使いやすくなりスラスラ書けた気がします。


3日でやったこと
1.アプリのイメージを思いつく
 えぇ、たいしたものを思いつきません。
2.類似アプリの検索
 探すの難しいので、すぐ諦めます。
3.価格決め
 広告収入、販売、無料と悩みます。
4.アプリを申請する
 開発期間が長いならiTunesで適当な説明と絵をつけて、アプリ名を押さえます。Waiting For Uploadまで進めてもいいですね。
 完成してからアプリ名がかぶっていた時のショックといったら・・・アイコンとかも変更となるとへこみます。
5.技術的課題の解決
 課題の洗い出し、勉強、解決をしておきます。
 ユーザインターフェースも変わる可能性もあるので、先に下調べをしておきます。
6.デザイン
 ユーザインターフェースを決めます。だいたい手書きで作成してます。
7.プログラミング
8.テスト
9.バイナリを作成する
10.サポートホームページの作成
 一応、アプリごとに作っています。アプリの説明が書いてあるだけのページですが。
11.アプリ説明の作成
12.価格決め
 広告収入、販売、無料と悩みます。
 使えないとレビューに書かれると、申し訳なくて心に傷を負うのでさらに悩みます。
12.アプリ申請する
 バイナリをアップロードして、Waiting For Uploadへ

あたらしいアプリを作成しはじめました

昨日から、新しいアプリ作成に入りました。プログラミングは、1日でほぼ終わったのですw
あと、ローカライズとか細かな作り込み、アイコンとかのデザインがまだなのです。アイコンは、イメージはあるけど絵に落とす能力がw
あぁ、睡眠が削られていく。