覚えきれなくなってきたので、備忘録。Qiita初投稿
静的ライブラリ(Static Library)を使うと、Cleanしたあとやarchiveのたびにcocos2d-xの膨大なライブラリをコンパイルしなくて済むのでビルド時間が圧倒的に短縮されます
実行環境
- Xcode7.3
- cocos2d-x v3.10
cocos2d-xのセットアップは済んでいるものとします。(cocosコマンドが使える状態)
Static Libraryのビルド
基本的にここを参考にしました
http://discuss.cocos2d-x.org/t/how-to-speed-up-cocos2d-x-build-with-prebuilt-lib/23402
今回はiOS用にビルドするので、
cocos gen-libs -p ios
デフォルト設定だとreleaseでビルドされます。僕はこれでデバッグからストアへのリリースまで全てやりましたが特に問題は起こらなかったです。-p
をつけない場合は全てのデバイス向けにライブラリが生成されるのでとても時間がかかります
完了したら、cocos本体のルートフォルダにprebuiltフォルダが追加されてます
cocos2d-x-3.10/prebuilt/
この中にStatic Libraryが置いてあります
プロジェクトファイルの設定
cocos new
した直後のものから始めています
生成されたlibcocos2d iOS.aをプロジェクトファイルにぶちこみます。必要に応じてCopy items if neededのチェックは外します
既存のライブラリは削除したいところですが、開発中にライブラリのソースを覗いたりする際に必要となるため、cocos2d_libs.xcodeprojの削除はせずにTargetの削除のみを行います。
この2つのターゲットを削除します。これで元々あったライブラリがビルドされることはなくなります
ライブラリへのパスを通す
このまま実行しようとすると次のようなエラーが出ると思います
ld: library not found for -lcocos2d iOS
clang: error: linker command failed with exit code 1 (use -v to see invocation)
先ほど追加したlibcocos2d iOS.aへのパスが通ってない場合に出ます。普通にネイティブで開発しててもよくあるやつです。
いつものごとく、Build SettingsのLibrary Search Pathsにファイルへのパスを追加します
私の場合はホームディレクトリのドキュメント内にcocosのルートを置いているので、
$(HOME)/Documents/cocos2d-x-3.10/prebuilt/ios
になります。ここは各自の環境に合わせて記述することになると思います
参考:http://tristore.net/?p=1781
そのほかHello Worldまでに必要な設定
これでもまだビルドが通らないと思います。いつの間にかGameController.frameworkが要求されるようになるので、これも追加します
実機で動かす場合は、Xcode7.3以降の場合に次のようなエラーが起こります
libpng error: CgBI: unhandled critical chunk
Xcode側で追加された何かが悪さをしているようです。
Build Settings内のRemove Text Metadata From Png FilesをNoにすると良いらしいです
参考:http://qiita.com/rustlica/items/d6c7c6dcf03d682d58b1
これで、やっと静的ライブラリを用いた実機によるHello Worldができます
おわりに
CocoaPodsを使う方はPodfileかいてpod installすればそのまま使えると思います。警告が結構でてきて気になるので、警告されてる部分の設定にそれぞれ$(inherited)
を追加してあげると静かになります