2012年1月30日月曜日

「二角取りSolitaire」アプリリリース:cocos2d移植性の高さ

iPad版アプリ「二角取りSolitaire HD」を1月24日にリリースしました。

iPad版アプリ開発完了後、Mac版への移植作業を始めて1月28日にはMac App Storeへ「二角取りSolitaire」及び「二角取りSolitaire FREE」をリリースできました。(わずか4日違い)

実際にはアップル社によるアプリ審査がiPad版では1月18日に申請してApple Storeにリリースされたのが1月24日ですから約6日間で、Mac版については審査対象のアプリ数が少ないためか1月25日申請でリリースが1月28日でしたので半分の3日間でリリースされています。

このアプリはcocos2dと言う2Dゲームライブラリを使って開発していますのでiPad版のソースを元にMac版を作成した場合、比較的簡単にMacへ移植することができます。


iOSアプリとMacアプリの違いで一番面倒なのは画面の座標系の違いがあります。 iOSで使われているUIKitでは左上が原点となり下に向かってY座標は大きくなります。(コンピュータでは一般的な座標系かな)
それに引き換えcocoaでは左下が原点になりY座標は上に向かって大きくなる座標系で通常のコンピュータで利用する座標系とは反対になるので違和感を感じますが数学的には左下を原点とする座標系の方が正しいので座標変換とか数学的な変換を考えて左下原点を採用したのではないかと推測しています。

とは言え、cocoaの後に出来たiOSアプリ開発用のUIKitライブラリがなぜ左上原点を採用したのか気になるところですが他の携帯デバイス開発者(アップル以外の開発者!?)を取り込むためだったのか良く分かりませんが私的には間違った判断だったのではと思います。(^^ゞ
└それとも合理的に納得できるような理由があるのかな。。。


しかし、cocos2dを使って開発していればこのような座標系の違いを意識する必要もなく画面表示に関わる部分については殆どそのまま動作しますのでMac用に書き換える必要は殆どありません。
└cocos2dでの原点は左下原点になります。

イベント関連ではタッチイベントがマウスによるクリック操作に変更になりますのでメソッド名等の変更が必要になりますが若干の変更で対応可能です。

逆にMacへの移植時に変更が必要な点はiOSとMacでは利用できるcocoaライブラリに違いがありますので、UIxxxxで始まるようなメソッド・関数等はcocoaライブラリ(NSxxxx)のメソッド・関数へ変更する必要があります。 良くあるのは画像取得や変換、ファイル入出力まわりでしょうか。

また、ファイルの保存先であるディレクトリ構成も違いますのでMac版では保存先ディレクトリも変更が必要です。(結構簡単に対応可能)

あとはiOSとMacではユーザーインターフェイスが違いますのでMac版ではMac固有のユーザーインターフェイス(アバウト画面、ドロップダウンメニュー、ウインドウ制御)への対応が必要となります。

それと意外に面倒なのはiOSではアプリの認証(購入済みアプリであるかのチェック)に関する部分は特に開発者側で考慮する必要はないのですが、MacアプリではMac App Storeで購入したアプリの認証チェックを自前で用意する必要があります。(アップル社からは提供されない)

Mac App Store開設当初はアップルホームページに公開されたチェックの手順と簡単なコーディング例しか無く苦労しましたが、今では有志の方が作成したアプリ認証チェック用の関数がありますので比較的楽に実装できるようになりました。


iOSからMacへの移植作業ですが今回のアプリの場合では大体2〜3日間程度(有料版と無料版の2アプリ)で移植作業が完了できたのはやはりcocos2dライブラリの恩恵が大きいと思います。 特に描画関係のライブラリはcocoaとUIKitでは座標系以外にも殆ど違うって言っていいくらい変更が必要になりますので、その描画やアニメーション等のエフェクトに関する部分をcocos2dが吸収してくれますので効果は絶大だと思います。

cocos2dライブラリを使ってiOSアプリを開発している方は多いと思いますので、Macへの移植にも挑戦してみては如何でしょうか。

2012年1月7日土曜日

iOS5.0非互換:Twitter OAuth認証

TwitPic投稿機能実装のため「SAOAuthTwitterEngine」ライブラリにてTwitter認証しているアプリ(リアル黒板)がiOS5.0環境ではOAuth認証後ユーザー名にNilが返ってくるようになりました。

iOS5.0以外では正常にユーザー名が返されているようですので、iOS5.0環境下でのみ発生する現象でしょうか。

<対処方法>
・SA_OauthTwitterEngine.mファイル中のinitOAuthWithDelegateメソッドを下記の通り修正すれば正常動作致しました。

// self.requestTokenURL = [NSURL URLWithString: @"http://twitter.com/oauth/request_token"];
// self.accessTokenURL = [NSURL URLWithString: @"http://twitter.com/oauth/access_token"];
// self.authorizeURL = [NSURL URLWithString: @"http://twitter.com/oauth/authorize"];
 self.requestTokenURL = [NSURL URLWithString: @"https://twitter.com/oauth/request_token"];
 self.accessTokenURL = [NSURL URLWithString: @"https://twitter.com/oauth/access_token"];
 self.authorizeURL = [NSURL URLWithString: @"https://twitter.com/oauth/authorize"];

httpプロトコル部分を「https」に変更する。

2012年1月1日日曜日

2012年 明けましておめでとうございます。

新年明けましておめでとうございます。

本年もよろしくお願い申し上げます。