目的
- Cocos2d-x を既存アプリに組み込む準備
- Xcode が Cocos2d-x ライブラリ部分に対して表示する警告を見たくない
- Cocos2d-x アプリのビルドを速くしたい
-
cocos new
コマンドで作成した Xcode プロジェクトでは、クリーンビルドの度にライブラリ部分も再ビルドする
-
環境
- Mac OS X 10.11.6 (英語)
- Xcode 7.3.1
- Cocos2d-x 3.13.1
方針
- iOS SDK は 9.3
- iOS Deployment Target は 8.0
- アーキテクチャーは armv7 arm64 i386 x86_64
- アーキテクチャーとデバイスの関係
- armv7s は external でビルドされてないし armv7 とほとんど差がない模様
- bitcode をサポート
手順
cocos2d-x-3.13.1 を展開したディレクトリから
$ cd build
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphoneos9.3 \
clean build ARCHS='armv7' VALID_ARCHS='armv7' IPHONEOS_DEPLOYMENT_TARGET=8.0 \
TARGET_BUILD_DIR=tmp/arm BUILT_PRODUCTS_DIR=tmp/arm OBJROOT=tmp/arm SYMROOT=tmp/arm \
OTHER_CFLAGS=-fembed-bitcode
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphoneos9.3 \
clean build ARCHS='arm64' VALID_ARCHS='arm64' IPHONEOS_DEPLOYMENT_TARGET=8.0 \
TARGET_BUILD_DIR=tmp/arm64 BUILT_PRODUCTS_DIR=tmp/arm64 OBJROOT=tmp/arm64 SYMROOT=tmp/arm64 \
OTHER_CFLAGS=-fembed-bitcode
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphonesimulator9.3 \
clean build ARCHS='i386' VALID_ARCHS='i386' IPHONEOS_DEPLOYMENT_TARGET=8.0 \
TARGET_BUILD_DIR=tmp/i386 BUILT_PRODUCTS_DIR=tmp/i386 OBJROOT=tmp/i386 SYMROOT=tmp/i386 \
OTHER_CFLAGS=-fembed-bitcode
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphonesimulator9.3 \
clean build ARCHS='x86_64' VALID_ARCHS='x86_64' IPHONEOS_DEPLOYMENT_TARGET=8.0 \
TARGET_BUILD_DIR=tmp/x86_64 BUILT_PRODUCTS_DIR=tmp/x86_64 OBJROOT=tmp/x86_64 SYMROOT=tmp/x86_64 \
OTHER_CFLAGS=-fembed-bitcode
$ lipo -create -output "libcocos2d iOS.a" \
"tmp/arm/libcocos2d iOS.a" \
"tmp/arm64/libcocos2d iOS.a" \
"tmp/i386/libcocos2d iOS.a" \
"tmp/x86_64/libcocos2d iOS.a"
$ rm -rf tmp
- libcocos2d iOS.a は 313.2MB
- これだけだと cocos2d-x-3rd-party-libs-bin で bitcode が有効になっていないので利用時に以下のエラーが出てしまう
1. cocos2d-x-3rd-party-libs-src を bitcode 有効にしてビルドしてから上記手順を実施すると bitcode のエラーがなくなる
```
ld: 'libcocos2d-iOS.a(ftbase.ios8_armv7.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7
# 確認
1. ```cocos new``` コマンドで作成した Xcode プロジェクトから `cocos2d_libs.xcodeproj` サブプロジェクトを Delete
1. ビルドエラーが起きる状態になる
2. 作成した libcocos2d iOS.a を Finder から Xcode で開いたプロジェクトの Frameworks へドラッグ&ドロップ
1. クリーンビルドが早くなった
# 参考
1. [Build cocos2d-x fat static library](http://www.nicnocquee.com/2016/01/20/build-cocos2d-x-fat-static-library.html)