ラベル iOS の投稿を表示しています。 すべての投稿を表示
ラベル iOS の投稿を表示しています。 すべての投稿を表示

2015年3月12日

iOS用AdMobの最新版は初代iPad非対応に

公開しているiOSアプリを更新したら、初代iPad(iOS 5.1.1)でテストした時だけエラーで落ちる様になってしまって焦りました。

エラーログを見るとどうやらAdMobに原因がありそうなのでGoogleのページを見た所、やっぱりAdMobの最新版(7.0.0)からはiOS 5がサポート対象外になっていました。

リリースノートを確認していなかったのがダメでした。反省。

AdMob 7.0.0からはiOS5がサポート対象外に。
https://developers.google.com/mobile-ads-sdk/docs/admob/ios/rel-notes

-ObjCリンカフラグが不要になった事やアプリに追加するファイルが一個だけになったのは嬉しい点ですが、iOS 5非対応化はちょっと悲しいです。


初代iPadは我が家では子供達がまだまだ使っているのでぜひ対応したかったのですが、Appleのページを見るとiOS 6を含めてもシェアはもはや3%以下との事。

iOS6以下の割合は3%
https://developer.apple.com/support/appstore/


AdMobのバージョンをひとつ前の6.12.2にしておくという手もあるのですが、ここはきっぱりとあきらめて自分のアプリの方もiOS 5は非対応とする事にしました。

そろそろ子供用のiPadも買い換えるかな。。。







 


2015年1月13日

Cocos2d-JSでAdMob広告を表示する手順 (iOS, Android)

2015年1月12日現在の情報です。

開発環境


- Mac OS X 10.9.5
- Cocos2d-JS v3.2
- Cocos Code IDE v1.1.0
- Xcode v6.1.1
- Eclipse (ADT) 23.0.2


cocos newコマンドでプロジェクトを作成


cocos new -p com.example.CocosJSAdmob -l js CocosJSAdmob

(もちろんCocos Code IDEのメニューから新規プロジェクトを作成する事も出来るのですが、そうすると生成されるファイルが微妙に違ったりするので私はcocosコマンドを使う事にしています。)


Cocos Code IDEでプロジェクトを開く


現状ではcocos newコマンドで作成したプロジェクトをそのままCocos Code IDEにインポートしようとしても「プロジェクトが見つからない」というエラーになるので、まずプロジェクトのルートディレクトリに下の内容で .project ファイルを作成する必要があります。

<name>CocosJSAdmob</name>の部分だけ適宜変更して下さい。

.projectファイルを作成した後、Cocos Code IDEにインポートします。





Cocode Code IDE上で実行出来る事を確認しておきます。



ネイティブコードサポートを追加する。


Cocos Code IDEのCocos Toolsメニューから「Add Native Codes Support」を選択します。
これによってプロジェクトの下に frameworks/runtime-srcというディレクトリが出来ます。



Xcodeでプロジェクトを開く


下のディレクトリにXcode用のプロジェクトファイルがあるのでそれを開きます。

  /(プロジェクトルート)/frameworks/runtime-src/proj.ios_mac/



ターゲット(実機またはシミュレータ)を選んでそのまま実行するとビルドされて実行出来ます。ただ初回は全てのソースファイルをコンパイルするので数分かかるかも知れません。



iOSでのAdMob対応


下を見ながらAdMob SDKを組み込みます。

https://developers.google.com/mobile-ads-sdk/docs/admob/ios/quick-start

AdMob SDKのファイルをプロジェクトに追加。



ライブラリを追加。

下の青枠内が今回追加したもの。特に「GameController」はGoogleのドキュメントでは記載漏れになっているみたいなので要注意です。



-ObjCリンカフラグを追加。


*追記:
AdMobの最新版(v7以降)では-ObjCリンカフラグは不要になったそうです。


ソースコードを変更。


AppController.h
AppController.mm

dealloc関数の後ろ、@endの前に以下を追加。

JavascriptからObjective-Cのコードを呼ぶ。


詳細は下記を参照して下さい。
 How to call Objective-C functions using js on iOS/Mac

app.jsの適切な場所に下のコードを追加します。今回は HelloWorldLayer の ctor関数の一番最後に追加しました。

jsb.reflection.callStaticMethod("AppController", "ShowAdView");


iOSでAdMob広告が表示されたところ

広告を隠したい時はHideAdViewを呼べばOKです。

jsb.reflection.callStaticMethod("AppController", "HideAdView");

iOSでの対応は以上で終わりです。




Eclipse(ADT)でプロジェクトを開く


下のディレクトリにEclipse用のプロジェクトがあるのでそれをインポートします。

  (プロジェクトルート)/frameworks/runtime-src/proj.android/

インポートした後、プロジェクトのディレクトリで

cocos compile -p android

を実行して全てのソースコードをコンパイルしておきます。これも初回は数分ぐらいかかるかも知れません。


AndroidでのAdMob対応


次のドキュメントに従って Google Play Serviceを組み込んで下さい。

https://developers.google.com/mobile-ads-sdk/docs/?hl=ja


Java側にAdMob広告を表示する処理を追加。


AppActivity.javaに以下の変更を加えます。

1. AppActivityクラスの先頭に変数を追加。

private static Activity activity = null;
private static AdView adView = null;


2. onResumeでactivityを変数に保持。

@Override
protected void onResume() {
super.onResume();
activity = this;
};

3. AppActivityクラスに3つのメソッドを追加。

public static void createAdView()
public static void showAdView()
public static void hideAdView()

変更後のAppActivityクラスは下の状態になります。
(xxxxxxxxxxxxxxxx...xxxxxxの部分は適宜置き換えて下さい。)

JavascriptからJavaのコードを呼ぶ


app.jsを下の様に変更します。


Android上でAdMob広告が表示されたところ


Androidでの注意点


現状、Google Play Serviceへの参照をプロジェクトに追加して一旦Eclipse上でRunしてしまうと、それ以降は cocos run, cocos compile, cocos deployなどのコマンドが下の通りエラーで中断してしまいます。


-package-resources:
     [aapt] Creating full resource package...
     [aapt] invalid resource directory name: /Applications/android-sdk-mac_x86/extras/google/google_play_services/libproject/google-play-services_lib/bin/res crunch

BUILD FAILED
/Applications/android-sdk-mac_x86/tools/ant/build.xml:932: The following error occurred while executing this line:
/Applications/android-sdk-mac_x86/tools/ant/build.xml:950: null returned: 1

Total time: 43 seconds
Error running command, return code: 1


原因はADTとAntでビルドの方法(一時ファイルの場所など)が異なる事にあるみたいです。
( http://stackoverflow.com/questions/19746319/how-to-solve-invalid-resource-directory-name-resource-crunch )


対策としては、Eclipseを完全に終了するかまたはEclipseの自動ビルドをオフに設定してから cocosコマンドを実行すればエラーにならない様です。



以上、Cocos2d-JS v3.2でAdMob広告を表示する方法でした。

jsb.reflection.callStaticMethod という関数を使えばJavascriptからObjective-CやJavaのメソッドを簡単に呼び出せるので便利ですね!

これを使えば広告の表示制御だけでなく、
  • ブラウザで任意のURLを開く
  • AppStoreに飛ばす
  • Facebook, Twitterなどに投稿する
など色々な事が簡単に出来そうです。









 .

2014年10月17日

JavaScriptでスマホゲームアプリを作る - Cocos2d-JS編

前回のPlatino版に続いて、Cocos2d-JS版が出来た。



ソースコードはこちら。https://github.com/mikehibm/15puzzle-cocos2d


● 困ったところ


う〜ん、特になし。

あえて言えばy座標の指定方法(上下)がこれまでと逆になるのでそれを変更する必要があったぐらい。

あとそういえば、ifで座標が一致するかどうかを比較して分岐している箇所があって、

 if (piece.x !== new_pos.x || piece.y !== new_pos.y){
   ...処理...
 }

と書くと処理が実行されなくて困った。(浮動小数点数なので)
下の様に差分の絶対値で比較する様に変更した。

 if (Math.abs(piece.x - new_pos.x) > 1 || Math.abs(piece.y - new_pos.y) > 1){
   ...処理...
 }



● 良かったところ


アニメーションの作り方やシーン遷移の方法など、これまでに得たCocos2dの知識が活かせるので楽が出来た。

実機での実行速度も申し分無し。

デバッグが簡単。Cocos Code IDEからデバッグ実行しておくとJSファイルを修正して保存した瞬間にデバッグアプリ内でコードが再ロードされるのですぐに確認出来る。もちろんブレークポイントを設定する事も可能!


● アニメーション実行中にさらにアニメーションを実行する場合


MoveToを使ってピースを移動するアニメーションを実行中に、場合によってはさらに次のアニメーションを開始する必要がある場合がある。連続でタッチして同時に複数のピースを動かした場合などだ。

その場合、同じSpriteに対して同時に複数のMoveToアニメーションを実行してしまうと最終的な位置が思わぬ所にずれてしまう事になる。

これについては、2つめのMoveToアニメーションを実行する前に

 piece.stopActionByTag(ACTION_TAG);

を実行して前のMoveToを中止する事で解決出来た。


● Mac版デバッグアプリの設定変更


Cocos Code IDEから実行するとデフォルトだとMac版のデバッグ用アプリが立ち上がって来てその中でアプリが実行される。

このデバッグ用アプリの画面サイズ(Zoom設定)が、起動する度に100%になってしまいMBAだとiPhone5の縦画面がディスプレイに収まらないので、そこがちょっと使い辛かった。

これは下のページの通りに設定を変更する事で50%表示にする事が出来た。これでとても快適になった。
Lua - Cocos Code IDEのシミュレーターのデフォルト設定 - Qiita 



● ソースコード


今回のソースコードはこちら。
https://github.com/mikehibm/15puzzle-cocos2d




● 感想


さすがに注目度急上昇中のフレームワークだけあって Cocos2d-JS は使い易い。デバッグも素早く出来るので気分良く開発が出来る。

またXcodeやEclipseからもプロジェクトを開いて実行出来るので、広告表示やアプリ内課金などのネイティブ連携も頑張ればなんとかなりそうだ。

パーティクルエディタやシーンエディタなどのツール群も充実しているので、やっぱり一番安心して実戦で使えるのはこれかなあと思う。

あと次はUnityにチャレンジしてCocos2d-JSを上回るメリットがあるかどうかを試したい。








 .

2014年10月14日

JavaScriptでスマホゲームアプリを作る - Titanium + Platino編

ようやく15パズルのTitanium+Platino版が出来た。

Platino Game Engine


ソースコードはこちら。 https://github.com/mikehibm/15puzzle-platino


● Platinoプラグインの導入


プラグインの導入は至って簡単。トライアル版をダウンロードして解凍して所定のフォルダにコピーすればTitanium側で認識してくれた。

あとはプログラムの先頭に

var platino = require('co.lanica.platino');

をいれてガンガン使って行くだけだ。
BGMや効果音を鳴らす時は

var ALmixer = platino.require('co.lanica.almixer');

も必要。
さらにapp.jsなどで最初に一回だけ

ALmixer.Init(0,0,0);

を呼んで初期化しておく必要がある。最初この初期化をしてなかったせいで音が出なくて30分ほど悩んだ。


● まずはサンプルのソースを確認


Herlockと同じくPlatinoもドキュメントを見てもいまいち分からないので、最初はまずサンプルプログラムを全てダウンロードしてソースを熟読するのが良いと思う。


Flappy Birdや戦車ゲームのサンプルが面白いけれど、多分一番参考になったのは「Codestrong Shooter」というシューティングゲームのサンプルだ。


● マルチ解像度対応


サンプルプログラムのマルチ解像度対応がちょっと気に入らなかったので、自分なりに試行錯誤する必要があった。背景の画像などは全てiPhone5sの640x1136のサイズを基準にして作っておいて、端末の解像度に合わせて横幅を画面一杯にして縦が短い場合は上下が切れる様に調整した。ApplicationWindow.js の updateScreenSize 関数でその辺りをやっている。

スプライトなどを画面に配置する時は、横幅は常に640として固定値で指定して構わないのだけれど、縦の高さは端末によって変わるので、真ん中に寄せたいもの(パズルのピースなど)については中央からの相対指定として、上端または下端に合わせたいものはそれぞれ上端(y=0)または下端(y=画面サイズ)からの相対指定とする様にした。


● タッチイベント


画面に配置したSpriteのタッチイベントを取得するのが少々面倒だった。まず画面(Sceneオブジェクト)のタッチイベントを書いて、その中でスケールを考慮して座標を変換した上で Sceneの forwardTouchToSprites 関数を呼んでやる必要がある。


● 連続でアニメーションを実行


アニメーションは下の様な感じでTransformオブジェクトを生成して実行する形になる。
var transform  = platino.createTransform({
  duration: 500,
  alpha: 0,
  easing: platino.ANIMATION_CURVE_CUBIC_IN,
  autoreverse: true,
  repeat: -1
 });
sprite.transform(transform);
ただ、連続で複数のアニメーションを実行するための簡単な方法が標準では用意されていない。「Codestrong Shooter」のサンプルにもある通り、アニメーション終了時のcompleteイベントを拾って次のアニメーションを開始すれば良いのだけれど、非常に面倒だ。

そこで調べたところ下のモジュールを見つけた。


これを使えば例えば6個のアニメーションを連続で実行する場合でも下の通り簡潔に書くことが出来るのでとても便利だった。
highScoreTranstion = new Transition([
  { duration: 1000, x: CENTER_X-highScoreLabel.width/2, easing:   platino.ANIMATION_CURVE_QUAD_OUT }
  ,{ duration: 500, alpha: 0, easing: platino.ANIMATION_CURVE_CUBIC_OUT }
  ,{ duration: 1000, alpha: 1, easing: platino.ANIMATION_CURVE_CUBIC_OUT }
  ,{ delay: 500 }
  ,{ duration: 1000, x: game.screen.width*-2, easing: platino.ANIMATION_CURVE_QUAD_IN }
  ,{ duration: 1, x: game.screen.width*2 }
]);
highScoreTranstion.animate(highScoreLabel, -1);


● Androidでのフルスクリーン表示


Androidで実行すると画面の上部にタイトルバーが表示されてしまって困った。
とりあえず tiapp.xmlファイルに

<fullscreen>true</fullscreen>
<statusbar-hidden>true</statusbar-hidden>
<navbar-hidden>true</navbar-hidden>

と書いてみたけれども Android 4.4 では効果なし。調べると新しいAndroidではプログラム内で

   window.activity.actionBar.hide();

を呼ぶ必要があるという事だったのでその通りにしたら無事フルスクリーンで表示された。


● iOSとAndroidで微妙に挙動が違う所


TextSpriteを配置した時にiOSとAndroidで位置がずれてしまって困った。
どうもAndroidだとwidth,heightが自動では計算されていない(0,0になっている)みたいだ。これは platino.createTextSprite 関数を呼ぶ際に明示的に widthとheightをセットする事で解決した。

他に、Androidだと微妙に処理が遅いのか少しカクカクした感じがしてしまう。上にアップした動画でも雲の動きがちょっとカクカクしているのが分かるけれど、iOSだともっとスムーズに動いた。Titanium + Androidでは前にも、「今ひとつどうもな〜」という経験をした事があるので、今回もやっぱりそうかという感じはある。


● ソースコード


今回のソースコードはこちら。
https://github.com/mikehibm/15puzzle-platino


● 一応の結論


Titaniumでのアプリ開発をずっとやっている人で、「ゲーム開発にもTitaniumを使いたい!」と言う場合には良い選択肢かも知れない。

あとドキュメントの中の下のページはすごく参考になった。

http://docs.lanica.co/docs/#!/guide/javascript_best_practices
配列をクリアする時は
myArray = []; 
ではなく
myArray.length = 0;
と書いた方が良い、とか。







 

2014年9月5日

JavaScriptでスマホゲームアプリを作る - Herlock編

さて今回はHerlockを使って15パズルを作ってみた。



● Herlockとは


http://herlock.do/faqs/1304
株式会社ソニックムーブが提供するスマートフォンネイティブアプリ開発環境となります。
http://herlock.do/faqs/1338
AndroidとiOSに対応したワンソースでネイティブアプリを同時に開発することができます。
また、Web IDEを使用して開発、デバッグからビルドまで行うことができ、開発時のアプリはクラウド上で保存するだけで簡単に動作確認が可能です。
さらに、JavaScriptでOpenGLによる実装ができ、ゲームのようなハイパフォーマンスのアプリケーションを簡単に開発することが可能となります。




● 作ったもの


PhoneGap編Monaca編と基本的に同じ15パズル。

ただ今回は画像を使ったので見た目が大分違っている。
Herlockのサンプルにあった「ねこ穴」というアプリのソースコードを元にして作ったので、勢いで一部の画像をそのまま使わせて頂いてしまった。


ソースコードはこちら。(とても自慢出来たものではないですが。笑)

tmlib.jsには含まれているシーン管理やアセット管理の部分をHerlockでは自分で作り込まなければならないのが結構大変だった。(結局ねこ穴のソースから大部分をコピペして使った。) 逆に言うと自分で好きなように作りこんだりどこかのライブラリを使ったり、自由度が高いと言えるかも知れない。

アニメーションについてはTweenJSで簡単に出来たので助かった。



● Herlockの素晴らしいところ


WebViewではなくネイティブのOpenGL機能を使っているのでアニメーションのパフォーマンスは申し分ない。JavaScriptだけでこれだけの事が出来るというのは本当に素晴らしい。

サウンドの方もiOS, Androidともに全く問題無しだった。PhoneGapやMonacaではAndroidで音が出ない問題に悩まされただけに、これは嬉しい。

Web IDEが提供されているのでローカルに開発環境を用意する必要が無い。これもさくっとアプリを作りたい時には大変有難い。



● 苦労したところ


1.実行するまでエラーが分からない

これは特にHerlockだからという訳ではないけれども、JavaScriptでの開発は静的型付けのある言語と比べると意外と大変だなあと改めて感じてしまった。ちょっとしたスペルミスや引数の間違いなどでもその箇所が実行されるまでなかなか気付く事が出来ない。この事から感じるストレスは開発が進めば進むほど大きな負担になって来る。
今回Herlockで開発しながら特にこの点が気になったのは、おそらく次に挙げる要因が関係していると思う。

2. Herlock Viewerでアプリのリロードに時間がかかる

Web IDE上でプログラムの変更を保存してから、それを端末上のデバッグ用アプリ(Herlock Viewer)で再読み込みするのに結構時間がかかる。自分の環境(米国からのアクセス)だと最低でも15秒、サーバー側が重くなっている様に感じられる時だと30秒から40秒程度待たされる事もある。

原因は、最初に全ての画像や音声のデータを読み込む様なプログラムになっているからという事もあると思う。ただ、サーバー側が重くなっている時などはプログラムの実行を開始する前にJSファイル(require.jsなど)の読み込みの段階でタイムアウトしてしまう事もよくある。

この辺りは、Herlock Viewerの方でJSファイルや画像・音声などのデータをキャッシュしてくれて、任意のタイミングで開発者がキャッシュの更新を指示出来る様に(もしくは変更されたものだけ自動で読み込む様に)してもらえれば改善される様な気がしないでもない。

また、Android版はまだマシだったが、iOS版のHerlock Viewerではアプリのリロード処理中にタイムアウトしてしまう確率がかなり高かった。(特にサーバー側が重い時)

3. アプリ内でのシーン管理やアセット管理のための標準的な方法が分からない

APIドキュメントには基本的なコードしか載っていないので、最初は戸惑った。
結局サンプルアプリの「ねこ穴」のコードを見よう見まねでいじりながらなんとか形にはなったけれど、シーン管理やアセット管理のためのクラスは標準で存在した方が有難い。その上でtmlib.jsのチュートリアルの様な平易なドキュメントがあればなお嬉しい。




● これからHerlockに期待したいこと


1. TypeScript対応

Web IDEがJavaScriptだけでなくTypeScriptにも対応してくれれば、上に書いた「実行するまでエラーが分からない」という問題はほぼ解決すると思う。


2. Herlock Viewerでの再ロード時間の短縮

キャッシュ対応やサーバー側のスペック向上などでなんとか「数秒程度」でリロードが完了する様にしてもらえないものだろうか。
再実行に15秒以上かかる様だと「すぐに実行して動作確認出来る」というJavaScriptの利点がほぼ相殺されてしまうので、なんとも惜しい気がする。


3. ローカル開発用SDK

コマンドラインのみのSDKで良いので提供してもらえれば、Web IDEを使わずにローカルで好きなエディタを使って開発出来る様になる。もしこれが可能ならぜひ実現してもらいたい。
PhoneGapで言う「phonegap serve」コマンドの様なものを実行するとPCが接続待ち状態になり、そこにHerlock Viewerで同一LAN内から接続出来る様になれば多分リロードに時間がかかるという問題も解消されるだろう。

ローカルにソースコードがあればGitなどでの管理も自由に出来るし、理想的な開発環境になるのではないだろうか。

4. ドキュメントの充実

HerlockのAPIドキュメントは見た目はなかなか良いのだけれど、内容はまだまだ充実させる余地があると思う。



● 今日の結論


- JavaScriptだけでネイティブアプリの開発が出来るHerlockはアプリ開発者ならぜひ試して見る価値あり。

- ただデバッグ実行時のリロード時間の短縮はなんとしても実現して欲しい。

- なんだかんだ言っても結局のところ非常に面白いし将来有望な開発環境だと思うので、これからのより一層の改善に期待!



以上!







 .

2014年8月24日

JavaScriptでスマホゲームアプリを作る - Monaca + tmlib.js編

● Monaca とは


Monacaの機能と特徴 | HTML5を使ったクロスプラットフォーム型モバイルアプリ開発 




● PhoneGap/Apache Cordovaとの違い


内部的にはPhoneGap/Cordovaを使っているので、ソースコードはPhoneGap/Cordova用に作ったものをほとんど変更せずに使える。

一番大きな違いは、Monacaだとローカルに開発環境を用意する必要が無い事だ。ブラウザさえあればどこからでもすぐにプロジェクトを開いて開発を続けられる。


先にPhoneGap用に作った15パズルのソースコードをMonacaのIDEにアップロードすると何の問題も無く実行出来た。

実機でのデバッグ実行は「Monacaデバッガー」というアプリをインストールして行う。


PhoneGap Developerのアプリと同様こちらもとても便利。さらに端末上でログ出力が確認出来たり、開発者のIDEに画面のハードコピーやメッセージを送ったりも出来るみたいだ。





● 結論


開発環境の違いはあるがソースコード的にはPhoneGap/Cordovaと同じものをほぼそのまま動かせる。

なのでAndroidではWebAudioを使うとかなりの確率で音が出ないという問題も同じだ。この問題があるのでゲームアプリを作るのには残念ながらちょっと適さない。 (追記参照)




● 追記


Monacaデバッガーの「ハイパフォーマンス版(4.0以降のみ対応)」というのがあったのでこちらで試した見た所、Androidでも音が鳴った。BGMも効果音も問題無しだ。やったー!
とは思ったものの、デバッガー経由でなくビルドしたものを端末でダウンロードしてインストールしてから動かすと、やっぱり音が鳴らない。これはビルド時の設定か何かで直るものなのだろうか。それともMonaca側がまだ最新の環境に対応していないのだろうか。良く分からないけれども何となく期待は持てそうだ。


Monacaサイトの説明によると、ハイパフォーマンス版のデバッガーは

  • 最新のChromiumベースのブラウザーエンジン(インテルのCrosswalk)を用いており、高速なレンダリングと高度なCSS、JavaScript APIを利用可能です。

との事なので、Chromiumのバージョンに関係がありそうだ。となると、ビルドして配布する場合はユーザーの端末に入っているChromiumブラウザーのバージョンに依存するという事だろうか。



● さらに追記 (2014年9月7日)


下のブログ記事を見つけたのでAndroid用のビルド設定を「ハイパフォーマンス (Crosswalkエンジン)」を使う様に変えて試してみた所、ビルドしたアプリでも問題無く音が鳴る様になった。

Crosswalkエンジンを組み込んでMonacaで作るAndroidアプリを一気に高速化させる。 : アシアルブログ 

APKファイルのサイズが19MBに大きくなったけれども、まあ許容範囲だろう。ともかくこれでAndroidでも音が出る様になったという事で、スッキリした。
Monaca素晴らしい!







 

 

2014年8月23日

JavaScriptでスマホゲームアプリを作る - PhoneGap + tmlib.js編

● tmlib.jsを使ってみた


tmlib.jsが面白そうなので初めて触ってみた。

このチュートリアルを読めば大体の使い方がつかめる。素晴らしい!
tmlib.js で今流行のフラットデザインを使ったタッチゲームを作ろう – Step00 ゲームのひな形を作ろう | TM Life 




● スマホでも結構使えそうな感じ


作ったものは平凡だけれどとりあえずこんな感じの15パズル。
動画はNexus7(2012)上で動かしたもの。




ブラウザ上でPlay出来るバージョンはこちら。



開発環境は、最初はVisual Studio 2013に
Multi-Device Hybrid Apps (Preview) for Visual Studio 
という拡張機能を入れて使おうと思ったのだけれど、入れてみるとまだちょっと使いづらい部分があったので今回はパス。

結局  Brackets というエディタとTerminalだけで十分だった。Bracketsには「ライブプレビュー」というボタンがあってそれを使うとすぐにChromeを開いて実行出来るのでこれがとても役に立った。

実機で実行したい時は、Terminalでプロジェクトのフォルダから

phonegap serve

を実行しておく。そして実機(Android, iOS, Windows Phone)上でPhoneGap Developerアプリを実行し、PCのIPアドレスを入力すればOK。実機とPCが同一ネットワーク内にあれば良いのでUSBケーブルをつなぐ必要が無いのが有り難い。
この状態でソースコードを変更して保存すれば1〜2秒で自動的に実機側のアプリを再起動してくれる。これは実際に使って見るとものすごく便利だ。複数の端末を同時に接続出来るので、Android、iPhone, iPad, Windows Phoneを全て接続してそれらが同時に更新されるのを眺めているとそれだけでも面白い。


ちなみにビルドしてパッケージ化されたものを動かしたい時は、実機をUSB接続した上で、

 phonegap run android --device  または phonegap run ios --device

を実行すればOK。



ソースコードはこちら。
https://github.com/mikehibm/15puzzle-phonegap







● あれ、Androidで音が出ない。。。


iPhone,iPadでは全く問題無くBGMと効果音が再生されるのだけれど、手元のGalaxy S3とNexus7では全く音が出ない。それどころか、ローディング画面が出たまま止まってしまう。デバッグすると、WebAudioのcontextがnullになっている。これは悲しい。色々試したけどAndroidではどうも音声はダメそうなので、tm.sound.WebAudio.isAvailableが trueでない時は一切音を鳴らさない様に変更した。この問題が無ければ十分使えると思っただけに、残念。



● 結論


- アニメーションはあまり複雑な事をやらなければスマホでも結構使える。
- PhoneGap Developerアプリを使えば開発が捗る。
- でもAndroidでは端末によってWebAudioへの対応がまちまちで、かなりの確率で音が出ないのがなんとも残念。
- iOSまたはPCをターゲットにして作るなら十分選択肢の一つになり得ると思う。
- tmlib.jsは便利!これからも使いたい。









 

2014年8月14日

JavaScriptでスマホゲームアプリを作るための開発環境いろいろ

● とりあえず何か作ってみないと始まらない


最近、次のスマホアプリを何で作ろうかと真剣に悩んでいる。既にCocos2d-xのC++版で2つほどアプリを作って公開したけど、やっぱり出来ればJavaScriptが使いたい。

悩んでばかりいても仕方がないので、とりあえず下の6つの環境でサンプルゲームを作って試してみようと思う。



PhoneGap (Apache Cordova) 


WebViewをラップしてネイティブアプリとして動作させる。
ゲームを作るならCanvasを簡単に扱うためのライブラリを使うと便利。

ライブラリには CreateJSenchant.jstmlib.jsArctic.js ... などがある。

将来的にはWebGLがもっと普及するとCanvasよりも格段に描画が高速になるらしいけれど、現状ではまだ実アプリで使うには早いみたいだ。
WebGLことはじめ
http://www.slideshare.net/hirumakazuya/webgl-35833170?next_slideshow=1

簡単なパズルゲーム程度であればおそらくCanvasでも大丈夫なのではないかと思う。(やってみないと分からないけれど。)

最近、Visual Studio 2013 (Update 2以上)の拡張機能としてPhoneGap(Cordova)対応が追加されたので、今回はこれを使ってみようと思う。
Multi-Device Hybrid Apps for Visual Studio 2013



Monaca 


PhoneGapをベースにしたWeb上の開発環境。PhoneGap/Cordovaのインストールや設定を一切しなくてもブラウザさえあればすぐに使えるのが素晴らしい。実機でのデバッグもUSB接続不要で簡単に出来て便利。

Monacaのサンプルを見ると Pixi.js を使ったブロック崩しゲームがある。これは、と思って実機で試してみた。結果、Nexus7(2012, Android 4.4.2)ではスムーズに動くもののGalaxy S3(Android 4.4.2)だとカクカクしてほぼプレイ出来ない状態だった。おそらくNexus7ではWebGLが有効になっていてGalaxy S3ではなっていないからだと思うけれど、Canvasだとやっぱりゲームアプリは無理なのか、と不安になる。ただ簡単なパズル系のゲームだったらどうなのか、その辺りを試してみたい。




Herlock 


JavaScriptからネイティブのOpenGLを扱える様にするフレームワーク。
Monacaと同様にブラウザさえあれば開発が出来る環境が用意されているので開発環境をローカルにインストールする必要はない。HerlockViewerというアプリを実機にインストールしておけばネットワーク経由でスクリプトの更新やデバッグログの確認が可能。
個人的にはかなり期待大。



Titanium 


Lanica Platino Engine」という拡張機能(有料・79.99ドル/年)を使うとOpenGLを使って高速に動くゲームアプリの開発が可能になるとの事。少し前までは年間800ドルぐらいしたと思ったけど、それと比べると今はかなり安くなったのでちょっとトライして見ようかと思う。



Cocos2d-JS 


スマホ用ゲームアプリ開発の大本命。
C++版では既にいくつかアプリを作ったので、次はJavaScript Bindingでどこまで開発が速くなるのか試してみたい。



Unity 


こちらも言わずと知れた超有名ツール。C#のイメージが強いけれど、JavaScriptでも開発出来るという事なので今回初めてじっくりと触ってみようかと思う。




以上、実際にサンプルアプリを作ってみてどうだったかは、これから少しづつ書いて行こうと思う。
またそれぞれの環境で下記の点についてもざっと調べておきたいと思う。

  • 多国語対応の方法(端末の言語設定によって画像や文字列を切り替える)
  • 広告(主にAdMob)の挿入方法
  • アプリ内課金の実装方法







 .

2014年6月4日

iOSのアプリ内課金の設定で失敗...

う〜ん、これはハマる。

「Ready to Upload」ボタンを押すにアプリ内課金の対象プロダクトを選択しないと行けない。


iPhone - 申請したいアプリ内課金の状態がWaiting For ReviewになってないのでDeveloper Rejectした - Qiita

In App Purchaseを組み込み申請するときの正しい順番 - BAD_ACCESS 



結局バージョン番号だけ上げてまた申請し直す羽目になってしまった。


2014年4月16日

Titanium MobileでiOSアプリを作ってみた感想

- Titanium Mobileで初めて作った。

 「米国ビザ申請用写真撮影」




- 本当はiOS/Android両対応を目指したかったのだけれども断念した。

 今回作ったのはある種のカメラアプリだったのだけれど、Titanium.Media.showCamera で表示されるプレビューウィンドウの挙動がiOSとAndroidで違ったり、UIのスタイル設定がAndroidだけどうも意図したとおりに反映されなかったりと言う事があって、Android対応は途中であきらめた。本当に複数のOSにきちんと対応しようとすると、おそらくフォルダ単位でOS毎に画面デザインを分けたりして「ロジックは共有するけどUIは別々で」というスタンスで作るのが無難だろうと思う。


- JSでのプログラミングは、やはり手軽!

- AlloyフレームワークはWebアプリの開発者なら非常に親しみ易い。

- ターゲットがiOSのみであればXcode+Objective Cで作るより生産性は高いかも。(もちろんアプリの要件にもよるけど。)


- Androidとの互換性については細かい所で改善の余地あり。今後に期待。

- Platform依存な処理については「モジュール」があれば対応出来る。

 なので最終手段としてその部分だけネイティブで自作する覚悟があればそれほど心配する必要はなさそう。

- iOSもAndroidも実機転送に結構時間がかかるのが難点。

 MBA(2011)だとビルド開始から実機(iPhone 4S)でのアプリ起動まで大体40秒弱。でもiOSのシミュレータ上で動かすのは早いので開発時に実機が必要でないアプリであればそれほど問題にはならない。反対に実機でないとテスト出来ない機能を使っているアプリ(カメラ系のアプリとか)を開発する場合はこの実機転送の遅さはかなり辛い。

- Titanium + WebViewでjQuery Mobileなどを使って画面を作るのもアリ。

 Tips:  jQuery Mobileでは「vclick」イベントを使うのが反応を良くするコツ。


- 今後のプロジェクトでTitanium Mobileを採用するか、と言われると...

「要件によっては大いに有り得る!」と思った。

 当然ながらアプリの内容によって向き・不向きがあるので、事前に実現可能性などをよく検討してから決める必要がある。ただその判断にかかる時間を極力少なく出来るように、これからも最新版をちょくちょく触って「いつでも使える」状態にはしておきたい。

 いずれにせよ、無料でここまで使えるのは本当に素晴らしいと思う。









 .

2013年11月6日

子供向けにぜひおすすめしたい算数アプリ4選

cocos2d-x を使って子供向けの算数ドリルのアプリを作ろうとしていて、そのための参考に既存のアプリを調べていたら「これはすごい!」と思えるものがいくつか見つかったのでメモしておこうと思う。

Google Playで「算数」や「Math」で検索して大体200位ぐらいまでの結果の中から良さそうなものを選んで、かれこれ40個ほどをインストールして実際に動かしてみた上で厳選した結果なので、子供向けの算数アプリを探している方にはぜひ参考にして頂ければと思う。



第4位


Math Is Fun:陽気な数学


グラフィックがいい味を出している。ドリルというよりはパズル的。結構考えないと行けないのでどちらかと言うと高学年向けかも。大人でも遊べる。

Android app on Google Play  




第3位


Mathemagica Free - Kids Math


独特のグラフィックで最初はとっつきにくい感じがしたけれど、やってみるとなかなか面白い。問題のパターンが多くて、よく考えられている。
算数を始めたばかり、というレベルから高学年まで幅広いレベルに対応した問題が用意されているので、ぜひ有料版を買って長く遊びたい。

Android app on Google Play 




第2位


おサルさんの算数 ― 空飛ぶアドベンチャー


最初にこれをやってみた時は感動した。きれいなグラフィックと軽快な横スクロールでシューティングゲーム風のプレイは斬新だ。
子供はきっとのめり込むと思う。

Android app on Google Play  




そして一番「すごい!」と思ったのはこれ!


第1位


Hudriks Math For Kids


『美しいグラフィック、3Dアニメーション、特殊効果が、小学校に通うあなたのお子様にとって、算数の学習を忘れられないほど楽しいものにしてくれます。』

確かに美しく描かれたキャラクターと背景のグラフィックが素晴らしい! キャラクターが飛び跳ねるアニメーションの時にはちゃんと影の大きさも変わる。このクオリティの高さにはただただ脱帽。(見た感じ多分開発環境はUnityだろうな。) 
ワクワクさせられる音楽も良い。
ストーリーモードでは面倒な設定やレベル選択の必要も無く簡単な問題から自然に難しい問題に変わっていく辺りも良く考えられていると思う。

Android app on Google Play  








 

2013年10月10日

初めてcocos2d for iPhoneでアプリを作った時に役に立ったリンクまとめ

目次





最初に目を通したチュートリアルなど


Cocos2D 2.XでシンプルなiPhoneゲーム開発チュートリアル | Ray Wenderlich 
iPhoneゲーム:スペース・シューターの作成チュートリアル | Ray Wenderlich 
cocos2d for iPhone: Class Hierarchy 



ARCを使うための設定


基本的には、cocos2dのソースコードを除外して自分で作成するファイルだけをARC対応にすれば良い。

cocos2dのテンプレートから作ったプロジェクトに対してXCodeのメニューから「Convert to Objective-C ARC」を選べば、かなりの部分を自動でやってくれる。

Cocos2D 2.X プロジェクトをARCに対応させる方法 | Ray Wenderlich 

下はcocos2dの部分をスタティックライブラリにしてリンクする方法。

【cocos2d, Objective-C】Cocos2でARCを使う。ハマりましたー! - 夏までにiPhone アプリつくってみっか! 



色々なコーディングTips


最初は基本的な画面遷移やボタンの作成方法でとまどったけれど、調べながらなんとかやるうちに慣れてきた。

cocos2d入門編 ボタンの作り方(CCMenuItem, CCMenu) | Learn iPhone, iOS, Objective-c, cocos2d and ....?  
ハマケン100%開発: cocos2d: <初級>スコア表示をローカライズしてみよう  
cocos2d でボタンを押して画面遷移をする | EUI - iPhoneやandroidスマートフォンアプリの開発を教えるスクール  
cocos2d - Changing the image of a CCSprite - Stack Overflow  
cocos2dでスケジューラを使う - 一定時間ごとや毎フレームごとに実行する処理を書く方法 | thaty 



ユニバーサル対応


iPhoneだけでRetina、非Retinaの違いと縦長サイズへの対応があるので3種類の画面がある。iPadにも対応しようとするとさらにRetina、非Retinaの2種類があるので合計5種類の画面サイズを考慮して開発しないと行けない。

この辺はAndroidだともう無限に近いぐらいのバリエーションがあるので、むしろあきらめて単に一つの画像を拡大/縮小してやり過ごしてしまうのだけれど、iOSだと「5種類しかないなら頑張って対応しないと行けないかも」という気持ちになってしまう。

その結果、背景画像の様に画面枠にきっちり合わせたい画像については同じ画像でも5つのバージョンを作って対応するような事になってしまう。(ものすごく面倒...)

各種ボタンやダイアログの背景の様なものについては、試行錯誤した結果、
  • iPhone 非Retina用
  • iPhone Retina / iPad非Retina用
  • iPad Retina用
の3種類のバージョンで済ませることにした。iPhoneのRetinaとiPadの非Retinaは画素数がそれほど変わらないので同じ画像を使ってもほぼ違和感がないのだ。(3種類作るのも結構面倒だけど。)

実際の画像ファイル名はそれぞれ
  • aaa.png
  • aaa-hd.png
  • aaa-ipadhd.png
の様にしておけばプログラムからは意識しなくてもcocos2dが上手く使い分けてくれる。

あとは、オブジェクトを画面に配置する時の座標指定を画面サイズに対する相対指定で行う様にしておけば iPhone 5の縦長画面にも対応出来る。

ただ、CocosBuilderの様なツールを使えばもっと楽になる事に気付いたのは開発がほぼ終わってからだった。最初から使っておけば良かった。


その他解像度関係で参考になったリンクはこの辺り。

cocos2dアプリをiPhone5の解像度に対応させる | mooapp  
【Objective-C】iPhoneとiPadを判別判定し処理分けする方法 | 和洋風KAI 



モーダルダイアログを表示する


アプリの設定画面がそれなりにかっこいいモーダルダイアログになる様にしたかったので色々試した。結局ゲーム本体よりもこの辺にかなり時間を費やしてしまった。

モーダルダイアログを表示するのは、下のページに載っている ModalAlertクラスを参考にして出来た。

Modal Alerts for Cocos2D | The Rombos-Blog 

ただ、これだとアニメーション中などに内容がダイアログの範囲外にはみ出した時にそのまま表示されてしまって非常に具合が悪い。ダイアログの枠から出たら表示されない様にクリッピングして欲しい。

そこで下のページで見つけたClippingNodeクラスを組み合わせて使う事にした。

Simple Masked Sprite | Obj-C based 2D engine for iOS, OSX and Android  
ClippingNode/ClippingNode.m at master · njt1982/ClippingNode · GitHub 

これでなんとか無事にイメージ通りのモーダルダイアログを表示する事が出来た。

正直言ってこれぐらいのコンポーネントはcocos2d自体かcocos2d-extensionsに入っているものだろうと思っていたけれど甘かった。


UIWebViewを使ってHTMLを表示する


設定画面の次は、アプリの「使い方」的な情報を表示する画面でUIWebViewを使ってHTMLを表示する必要が出てきた。ただcocos2dの画面にUIWebViewをどうやったら組み込めるのかが全く分からなかった。

ここでかなりつまづいてしまった。

UIWebView を使ってリソースバンドル内の HTML ファイルで、外部 JavaScript や CSS を読み込む - 24/7 twenty-four seven  
Cocos2dとStoryboardを組み合わせる - なんかの Log  
cocos2dのレイヤーへUIKitを追加、削除する方法。 « なんかもう実験場  
Cocos2dでWebViewを利用する - 自堕落なぺぇじ  
CCUIViewWrapper – wrapper for manipulating UIViews using Cocos2D  

結局、上の最後のリンクに載っているCCUIViewWrapperクラスを使う事にして上手く行った。




AdMobの広告を表示する


AdMob広告を表示する方法については、下の2つのやり方を見つけた。

cocos2dでAdMobを実装する « なんかもう実験場  
ios - Admob banner integration in Cocos2d 2.0 / Admob banner in iphone games - Stack Overflow 

比べてみるとどうも見た感じ後者の方がスマートな気がしたので、こちらの方法で実装した。ここは特に問題もなくさらっと実装出来た。



買って良かった本


実は最初に挙げたチュートリアルよりも前にまずこの本を読んだ。ひとつのゲーム(15パズル)を最初から作りこんでいく過程が丁寧に説明されているので、全体の流れをつかむのに最適だと思う。

cocos2dでつくるiPhoneゲーム―自由で速い、ゲーム用フレームワークを使う! (I・O BOOKS)







 

2013年9月18日

iOSアプリとAndroidアプリを同時に開発する方法

最近はいろんな開発環境やツールがあるけれど、とりあえず以下のような選択肢で検討している。
  • Cocos2d-x
  • Xamarin + Cocos2d-XNA
  • Corona
  • Unity
  • Herlock
  • Titanium Mobile
  • Apache Cordova (PhoneGap)
  • Monaca



ガシガシ動くゲームを作るなら


Cocos2d-x


ようやくcocos2d for iPhoneで簡単なゲームアプリを作れる様になった自分としては、次はこれでAndroid版とiOS版の同時開発かなと思っている。

cocos2d for iPhoneで得た知識も使えるし、CocosBuilderなどの周辺ツール類も豊富なのが魅力。

最初は「AndroidではNDKが必要」というのを聞いただけで尻込みしていたけれど、採用事例は結構多そうで、ネットでの情報も増えてきつつあるみたいだ。

今この本を読みながら次のアプリ開発に向けて準備しているところ。
cocos2d-xによるiPhone/Androidアプリプログラミングガイド


Xamarin + Cocos2d-XNA


意外なところでは、C#で開発するという手法もある。XamarinとCocos2d-XNAというライブラリを組み合わせれば2Dゲームアプリも作れるみたいだ。

普段仕事で使っている言語はC#なので、本当に使い物になるのならぜひ使いたい。Windowsストアアプリの開発も出来るし、有料版ならVisual Studioとの統合も可能なのでかなり興味を惹かれる。

Xamarin StudioというIDEの無料版をとりあえずインストールしてぼちぼち試しているところ。


Corona


2Dゲームに特化した「エレガントなAPIで従来より10倍速く開発出来る」というのが売り文句の開発環境。Luaというスクリプト言語を使う。デモなどを見るかぎりでは確かに簡単に2Dゲームが作れそうだ。

ただ、プロプライエタリなソフトウェアなのであまり依存したくはないかな、と思ってしまう。



Unity


とりあえずインストール しては見た。面白そうな解説本も買って積んであるのだけれど、まだじっくり触る事が出来ていない。

次のバージョン(4.3)ではなんと2Dゲームに特化した機能も追加されてますますパワーアップするらしい。
Unity - Unity PRESS RELEASE – Unity、2D向けゲーム開発機能とクラウドサービスを新たに提供 
もしかするとこれからのゲームアプリ開発の大本命になるのではないかとも思ってしまうほど高機能。

ちょっと高機能過ぎて初心者は慣れるまでが大変。それにしてもUnityのアセットストアは強力。


Herlock


今日、こんなのも見つけた。国産の新しいクロスプラットフォーム統合開発環境。JavaScriptで開発出来る。だからBackbone.jsやTweenJSなどと言った既存のJSライブラリも使える。 しかもOpenGLで高速なグラフィック処理も可能。

iOS/AndroidアプリをJavaScriptで開発、OpenGL対応で高速描画の「Herlock」、クローズドβリリース - Publickey 
FlashライクなコードでOpenGLの処理を記述できるため、高速なグラフィック処理を実現する点も大きな特徴です。ゲームなど高速な画面書き換えなどを要求するアプリケーションに対応します。』 
Herlockの紹介動画 

これは期待大。早速クローズドベータ版の利用申請をしておいた。



ゲーム以外なら


Titanium Mobile


クロスプラットフォーム開発の老舗。


Xamarin


Xamarin Studio または Visual Studioを使ってC#で開発が可能。個人的にはかなり興味あり。


Apache Cordova (PhoneGap)


HTML5 + JavaScriptのアプリをラップしてネイティブアプリを作成するツール。

Apache CordovaとPhoneGapの関係が分かりにくい事になっているけれど、今の所は結局同じモノみたいだ。
Cordova(PhoneGap) とりあえずどんなものか | MUSHIKAGO APPS MEMO 
AdobeがApache Cordovaの私家版PhoneGapの3.0をリリース, APIをプラグイン化してより身軽に | TechCrunch Japan 


Monaca


内部的にはPhoneGapを利用しているらしい。ブラウザ上で利用出来るIDEが秀逸。Monacaデバッガというのもちょっと試してみたけれど、とても便利で感動した。

なんとなくApache Cordova(PhoneGap)を使うのであればこっちの方が生産性が高そうな気がしている。HTML5での実装に適したアプリを作る機会があったらぜひ使いたい。


今日の結論


この他にも色々な開発環境やツールがあると思うけれど、次は

Cocos2d-x
Unity

の順でやって行こうかなと思っている

余裕が出来たら、

Monaca
Xamarin

あたりにも手を伸ばしたい。

あとHerlockにはぜひとも頑張って完成度を高めて行ってもらいたい。応援してます!




 



2013年6月22日

初めてiPhone/iPadアプリを作った時に役に立ったリンクまとめ

Xcodeのキーボードショートカット


キーボードで完結!ハイスピード Xcodeコーディング
http://www.slideshare.net/cocopon/xcode-12535772

開発レシピ:Xcodeの常用ショートカットキー | iOS開発者@日本
http://www.iosjp.com/dev/archives/92



UIViewに角丸の枠と影を付ける


UIImageに影をつけて角も丸くする | ニョホホホhoooo!の2011年08月27日の2番目の記事
http://plaza.rakuten.co.jp/tech1985/diary/201108270001/

頭と尻尾はくれてやる! 画像に影を付けたいのでいろいろプロパティをいじってみた
http://ringsbell.blog117.fc2.com/blog-entry-494.html

【iPhoneアプリ開発】UIImageViewに枠とドロップシャドウを設定する方法 | WEB開発お役立ちブログ
http://websystem.biz/?p=34



UIViewのタップイベントを取得する


UIViewのタップを検知|Penta creation
http://pentacreation.com/blog/2012/12/121218.html



Objective-Cの基礎


逆引きObjective-C for iPhoneアプリ - 定数(#define,const)
http://www.objectivec-iphone.com/introduction/const/define-const.html

Objective-Cのアクセサの話 - As Sloth As Possible http://blog.livedoor.jp/faulist/archives/1480850.html

【Objective-C】配列(NSArray、NSMutableArray)の要素(値)をランダムに並べ替える方法 - creativi.tea
http://teapipin.blog10.fc2.com/blog-entry-221.html

Objective-Cでの配列シャッフル - Dolice Lab
http://lab.dolice.net/blog/2013/03/14/shuffle-the-array-in-objective-c/



StoryboardのAuto Layoutを理解する


ios - Xcode 4 and Interface Builder: Editing Vertical Spacing Constraint (Anchor Top, not Bottom) - Stack Overflow
http://stackoverflow.com/questions/14107799/xcode-4-and-interface-builder-editing-vertical-spacing-constraint-anchor-top

Using Auto Layout | Building Responsive User Interfaces in iOS6 | InformIT
http://www.informit.com/articles/article.aspx?p=2015112&seqNum=2

Beginning Auto Layout in iOS 6: Part 1/2 | Ray Wenderlich
http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2



Storyboardを使った画面遷移


StoryboardとSegueの基本 - Kesin's diary
http://kesin.hatenablog.com/entry/20120908/1347079921

iOSゆとりプログラミングのススメ - 仕事人の開発日誌
http://d.hatena.ne.jp/omaemona01/20111204/1322961924

Storyboardを使った画面遷移と値の受け渡し 其の二 : てるてる坊主
http://teru2-bo2.blogspot.com/2012/03/storyboard_28.html

複数のStoryboard間を遷移するチュートリアル | XCode始めました。
http://xcode-beginner.blogspot.com/2012/04/storyboard_29.html




意味不明のクラッシュを回避する


OS X 10.8.4でXcodeでiOS Simulatorを実行したときにSIGABRTでアプリがクラッシュすることがある問題の暫定的な対処(修正済み) - 24/7 twenty-four seven
http://d.hatena.ne.jp/KishikawaKatsumi/20130606/1370509631



途中でプロジェクト名を変える


Xcodeのプロジェクト名、Bundle Identifier、アプリ名の関係 - Debian GNU/Linux 3.1 on PowerMac G4
http://d.hatena.ne.jp/paraches/20130211

Xcodeのプロジェクト名を変える | Morizotter Blog
http://blog.morizotter.com/2013/03/03/change-xcode-project-name/



Homeボタンでアプリを一時停止せず終了させる


Cocoaの日々: iOS 4.0 でアプリを一時停止しない設定 - UIApplicationExitsOnSuspend
http://cocoadays.blogspot.com/2010/06/ios-40-uiapplicationexitsonsuspend.html



ユーザーデータを永続化する


iOS - NSUserDefaultsを使うときはWrapして使うと便利 - Qiita [キータ] http://qiita.com/aguuu/items/2af840ded249b3e4e9bb



UIをアニメーションする


UIViewで手軽にアニメーションを実行する方法 - プログラミングノート
http://d.hatena.ne.jp/ntaku/20090226/1235659545

逆引きObjective-C for iPhoneアプリ - CABasicAnimationの基本的な使い方(移動・回転・拡大・縮小)
http://www.objectivec-iphone.com/animation/CoreAnimation/CABasicAnimation.html

Objective-Cと戦うブログ: Core Animationの基礎的なところ
http://obc-fight.blogspot.com/2012/10/Core-Animation-fundamental.html

iOS - Core Animation 中級編 - Qiita [キータ]
http://qiita.com/inamiy/items/bdc0eb403852178c4ea7

CABasicAnimationを試してみた | スマートフォンアプリ開発会社のエンジニアブログ
http://engineerblog.glpgs.com/index.php/archives/165

Core Animation で画像を回す (フェンリル | デベロッパーズブログ)
http://blog.fenrir-inc.com/jp/2010/09/transform_animation.html


パーティクルを表示する


テンポラリー無題 › 忙しい人のためのUIView(UIKit)でパーティクル。CAEmitterLayer & CAEmitterCell 。
http://www.tmpmudai.net/?p=448

CAEmitterLayer でクリスマスは爆発しろ - iOS Advent Calendar 2011
http://d.hatena.ne.jp/KishikawaKatsumi/20111202/1322835912

iOS 5 UIKit "パーティクル•システム"チュートリアル | Ray Wenderlich
http://www.raywenderlich.com/ja/26781/ios-5-uikit-%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%AF%E3%83%AB%E2%80%A2%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB

UIKit上でパーティクルエフェクトを表示する - Over&Out その後
http://d.hatena.ne.jp/shu223/20130315/1363298992


画面サイズの違いに対応する


iPhone, iPad, iPod touchの画面サイズまとめ | noriaki blog
http://blog.noriaki.me/2012-11-18-display-size-iphone-ipad-ipodtouch

【Objective-C】iPhone5(4インチ)のサイズ判別など、画面サイズの取得にはUIScreenが便利 - しすぜろ
http://syszr.com/s13.html

Objective-C - スクリーンのウィンドウサイズ(WindowSize)を取得する方法 - | Learn iPhone, iOS, Objective-c, cocos2d and ....?
http://programming-ios.com/objective_c-window-screen-size/

[xcode][objective-c][ios][cocoa]Storyboardの画面サイズの範囲外なので配置できない問題
http://pnome.blog88.fc2.com/blog-entry-111.html



UIViewの背景に画像をリピート表示する


[iOS] UIViewの背景画像を設定する | Hi-farm blog
http://blog.hi-farm.net/2010/11/21/ios-uiview%E3%81%AE%E8%83%8C%E6%99%AF%E7%94%BB%E5%83%8F%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B/



BGMと効果音を鳴らす


第9回 ゲームの仕上げ | Think IT
http://thinkit.co.jp/story/2011/06/03/2145?page=0,1

[iPhone 開発メモ] AVAudioPlayer を使用して音楽を再生する | Sun Limited Mt.
http://blog.syuhari.jp/archives/1015

サウンドを再生する:iPhoneアプリ開発雑記帳
http://iphone.o-84.com/dev-tips/knowhow/play-sound/

イチから学ぶiPhone/iPadアプリ開発 第12回 「BGMや効果音を付けよう!」
http://www.bhnt.co.jp/blog/%E9%9B%91%E8%A8%98/%E7%A4%BE%E5%93%A1%EF%BC%9Acobra/%E3%82%A4%E3%83%81%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6iphoneipad%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA-%E7%AC%AC12%E5%9B%9E-%E3%80%8Cbgm%E3%82%84%E5%8A%B9%E6%9E%9C%E9%9F%B3%E3%82%92%E4%BB%98/

音楽と、効果音の再生 (iPhoneアプリ開発記 [fou media lab.])
http://www.fou.ne.jp/iphone/2009/10/post_3.html




広告を表示する


新しいAdMob SDK(Google AdMob Ads SDK for iOS)での広告設置方法 - Over&Out その後
http://d.hatena.ne.jp/shu223/20110324/1300985815

AdMob Ads SDK を Xcode に追加してアプリ内に広告を表示する方法 | Maccle
http://maccle.com/develop-ios-app/how-to-add-google-admob-ads-sdk/


iPad対応(ユニバーサル化)


Xcode4.2におけるiPhone/iPadユニバーサルアプリ化: iPhoneアプリ開発備忘録
http://iphone-app-developer.seesaa.net/article/235646213.html

[Xcode 4.3] iPhone アプリを iPad 対応のユニバーサルアプリにする方法 | ラクイシロク
http://rakuishi.com/iossdk/3733/



タイマー処理の改善


NSObject Class Reference
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/performSelector:withObject:afterDelay:

xcode - Cancel [self performSelector:... withObject:nil afterDelay:20]; - Stack Overflow
http://stackoverflow.com/questions/5055869/cancel-self-performselector-withobjectnil-afterdelay20



アプリの紹介動画を作る


iPhoneの画面をキャプチャして動画撮影できる「Reflector」の使い方~PCツールを使って、非脱獄でも録画可能に!~
http://applian.jp/tweak/iphone_display_recorder/

iPhone・iPadの画面をまるごと動画でキャプチャーできるアプリ『Display Recorder』
http://www.excite.co.jp/News/apple_blog/20120619/TouchLab_2012_2_4184.html




アプリを宣伝する


こんなにあった! iPhone/Androidアプリを出す時にリリースを送りたい媒体53個総まとめ【全て無料】
http://plus.find-job.net/iphone-android-press-site







-----------------------
以上!

2013年6月21日

はじめてのiPhoneアプリ開発

iOSでアプリを作ってみた感想


今までアプリ開発はAndroidひとすじでやって来たけれど、せっかくMacBookAirもあることだしそろそろiOSアプリもやって見たくなった。

初めてXcodeを起動した時はEclipseとあまりにも違うので戸惑った。

昔はC言語で徹夜で仕事したりもしていたけれど、Objective-Cというのはまた独特の文法があってこれも最初はびっくりした。メソッドを呼ぶのにかぎカッコで囲むとは。

まあどれも最初の1週間でほぼ慣れた。

やってみるとiOSアプリの開発は結構面白い。正直言ってAndroidよりも面白いかも。

なぜそう感じるかというと、まずシミュレータの動作が軽いのが一因ではないかと思う。

それからGUIの設計ツール(ストーリーボード)がとても使いやすい。XMLをいじってはいちいち実機で確認しながら進めるAndroidとは効率がかなり違う。

あと、プログラムで画面の一部をアニメーションさせるときの書き方もiOSの方が書きやすい様に感じる。まあイディオムみたいなものなので一度覚えてしまえばそんなに違いはないけれど。

それから、パーティクルを実現するクラス(CAEmmiterLayerなど)が標準で含まれているのは素晴らしい。

全体的に見て、もし初心者にアプリ開発を教えるのであればAndroidよりはiOSの方が教えやすいように感じた。


お世話になっている本



まるごと学ぶiPhoneアプリ制作教室


はじめて開発するならこの本がかなりおすすめ。下の2冊の教科書的な構成と全く違って、本当に作者と一緒に開発しているような感じで、簡単な事から順を追ってアプリが出来て行く様になっている。断片的な知識は読めば分かるけど、僕のように最初のとっかかりの流れが分からないという人にはとても良いと思う。
サーバー側(GAE)のJavaアプリケーション開発のための解説まで入っているけれど、これはさすがに蛇足だったかなと思う。むしろその分のページ数でもっと別のiOSアプリ(特にiPad用)の制作例を載せて欲しかった。







よくわかるiPhoneアプリ開発の教科書【iOS 6&Xcode 4.6対応版】


プロの力を身につける iPhone/iPadアプリケーション開発の教科書