仕事のほうが忙しくてしばらくアプリ作成とかできないでいました(´・ω・`)
とはいえ、休日寝てばかりいるとなんだかとても人生がもったいない気がしてきちゃうんで、またちょくちょく作っていこうと思います。
で、その前に作成してるアプリの管理方法について、ちょっと改めてみました。
今まではMacのローカル環境ではGitを使ってソース管理していた(pushはしないやつですね)のですが、それだけだとハードディスクがパァンしちゃった時に寂しいことになるなと前から思ってたので今回からBitbucketを使って管理することにしました。
Bitbucketについて
条件付きですが、無料でプライベートレポジトリを作ることができるサービスです。
GitHubはプライベートなレポジトリは有料ですもんね。
ちなみに条件付きというのは「5人までしか参加できない」みたいなものだそうです。
個人でやるなら何も問題ありませんね。
実際この前ハードディスク入れ替えた時なのかどうかわからないんだけど、いつのまにかひとつのアプリのプロジェクトが致死的デグレートを起こしててアップデートできなくなってました。とても悲しかったです(´・ω・`)
ただ、cocos2d-xってバージョン3以降からはcocos2d-xプロジェクトそのものがプロジェクト内にコピーされちゃうんですよね。
762MBを毎回Bitbucketにプッシュするというのは無料な分ちょっと申し訳無い気がしちゃうのでどうしよううーんと迷ってたら、Gitには「submodule」という方法があるのを知ったので、それで管理することにしてみました。
参考サイト
create_project.pyでコピーされるcocos2dフォルダをどうにかするーきょこみのーと
前提
やり方はとても簡単ですが、とりあえずはこんな感じの前提で書き進めます。
- すでにBitbucketのアカウントを取得してる
- cocosコマンドにてプロジェクトを作成済
- gitコマンドが使える
- 最新版のAndroidSDKをダウンロード
AndroidSDKはよくわからないですがとりあえずAPI20のしか入れてない状態だとAndroid版のビルドに失敗しました。
23のrc5を入れたら通るようになりました。
ちなみに、ぼくのgitの知識レベルは「ちょっと遊びで使ってみた」程度です。
プロジェクト内のcocos2dフォルダを削除する
まあいきなりですけど、やることはこれです。
$cd [作成したプロジェクト] # cocos2dたんとばいばいします。 $rm -rf cocos2d
どうでもいいのですが、「rm -rf」コマンドを打つときってちょっとしたタナトス的快感に陥りますよね?
そんなことないですか?
そうですか。
gitの設定を行う
続いてはgitの設定してsubmoduleを作成します。
# 引き続き上記と同じプロジェクトフォルダ内で。 # git初期化。すでに行ってる場合は必要ありません $git init # submoduleを追加。ブランチに「v3」を設定しています。 $git submodule add -b v3 http://github.com/cocos2d/cocos2d-x.git cocos2d # ぼくの場合は以下のコマンドを打つだけでチェックアウトもされてましたが、 # されなかった場合は以下のようにするといいのかも # $cd cocos2d # $git checkout v3
やや時間かかりますが、こうすることで中のcocos2dフォルダが再度入ってきます。
もちっとだけ続くよ
ただまだ終わりではありません。これだけだとまだ「exturnal」フォルダ内が空っぽになっています。
悲しいですね。
そんなわけで、以下のコマンドを打ちます。
# 引き続き上記と同じプロジェクトフォルダ内で。 # 先ほどチェックアウトされたcocos2dフォルダへ入ります $cd cocos2d # cocos2d内にあるdownload-deps.pyを実行 $ python ./download-deps.py ==> Prepare to download external libraries! ==> version file doesn't exist ==> Ready to download 'v3-deps-71.zip' from 'https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/archive/v3-deps-71.zip' ==> WARNING: Couldn't grab the file size from remote, use 'zip_file_size' section in '【作成プロジェクト】/cocos2d/external/config.json' ==> Start to download, please wait ... ==> Downloading finished! ==> Extracting files, please wait ... ==> Extraction done! ==> Copying files... ==> Cleaning... ==> Would you like to save 'v3-deps-71.zip'? So you don't have to download it later. [Yes/no]: no # 正直、上のはyesでもnoでもどっちでもいいぽい # 続いてダウンロードしたもののアップデートを行います $git submodule update --init . . . # ずらずらとアップデート状況が続く Checking connectivity... done.
プロジェクトをPushする
あとは、プロジェクトをBitbucketにpushすれば完了です。
ただまだ不要なファイルはプロジェクト何にわんさかいると思うんで、
プロジェクト内に「.gitignore」ファイルを作成してコミットとかしない
ものを定義しといたほうがいいですね。
# 引き続き上記と同じプロジェクトフォルダ/cocos2dフォルダ内から # まずは外に出ようね。 $cd ../ # コミットするものを加える(.で中の物全部追加) $git add . # コミットする $git commit -m "initialize" # pushする $git remote add origin [作ったレポジトリ]
これでBitbucket内に必要なものだけを管理できるようになります。
簡単ですね。
エラーが発生する場合
cocos2d-xをsubmodule化した際にいくつかエラーが発生したので、それらをまとめておきます。
iOS側のビルドが失敗するようになった
最初、以下のエラーが発生してビルドできなくなりました。
Undefined symbols for architecture x86_64:
“_iconv“, referenced from:
cocos2d::FontAtlas::conversionU16TOGB2312(std::__1::basic_string<char16_t, std::__1::char_traits, std::__1::allocator > const&, std::__1::unordered_map, std::__1::equal_to, std::__1::allocator<std::__1::pair > >&) in libcocos2d iOS.a(CCFontAtlas.o)
“_iconv_close“, referenced from:
cocos2d::FontAtlas::~FontAtlas() in libcocos2d iOS.a(CCFontAtlas.o)
“_iconv_open“, referenced from:
cocos2d::FontAtlas::conversionU16TOGB2312(std::__1::basic_string<char16_t, std::__1::char_traits, std::__1::allocator > const&, std::__1::unordered_map, std::__1::equal_to, std::__1::allocator<std::__1::pair > >&) in libcocos2d iOS.a(CCFontAtlas.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
調べると、どうも「libiconv.dlib」を入れる必要があるらしく、それを入れるとエラーは解消されました。
【方法】
プロジェクト→「General」→「Linked Frameworks and Libraries」に「libiconv.dlib」を追加
Android側のビルドが失敗するようになった
確認でAndroid側でもビルドしてみたところ、build.xml内でエラーが発生してビルドできなくなりました。
コンソールを消してしまったので詳細は忘れてしまいましたが(´・ω・`)、
どうも「{aidl}なんてディレクトリねえよ」みたいなことで怒っているようで、よくわからなかったので
無言でAndroid SDKを最新にアップデートしてみたところ、動くようになりました。
Thank you very much. I solved my problem