cocos2d-x-3.16 の iOS static ライブラリをビルド
目的
- cocos2d-x アプリのビルドを速くしたい
-
cocos new
コマンドで作成した Xcode プロジェクトでは、クリーンビルドの度にライブラリ部分も再ビルドする
-
- Xcode が cocos2d-x ライブラリ部分に対して表示する警告を見たくない
- cocos2d-x-3.16 の libcocos2d iOS で 58 issues
- 以前より大分減ってはいる
- cocos2d-x-3.16 の libcocos2d iOS で 58 issues
環境
- macOS 10.13.3 (英語)
- Xcode 9.2
- git-2.16.1 (brew)
方針
- iOS Deployment Target は 10.0
- iOS SDK は 11.2 (latest)
- アーキテクチャーは arm64 armv7 x86_64 i386
- アーキテクチャーとデバイスの関係
- armv7s は build/cocos2d_libs.xcodeproj のビルド対象に入ってないし armv7 とほとんど差がない模様
- bitcode をサポート
手順
cocos2d-x-3.16 ディレクトリから
$ cd build
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphoneos11.2 \
clean build ARCHS='arm64' VALID_ARCHS='arm64' IPHONEOS_DEPLOYMENT_TARGET=10.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 iphoneos11.2 \
clean build ARCHS='armv7' VALID_ARCHS='armv7' IPHONEOS_DEPLOYMENT_TARGET=10.0 \
TARGET_BUILD_DIR=tmp/armv7 BUILT_PRODUCTS_DIR=tmp/armv7 OBJROOT=tmp/armv7 SYMROOT=tmp/armv7 \
OTHER_CFLAGS=-fembed-bitcode
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphonesimulator11.2 \
clean build ARCHS='x86_64' VALID_ARCHS='x86_64' IPHONEOS_DEPLOYMENT_TARGET=10.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
$ xcodebuild -project cocos2d_libs.xcodeproj -scheme "libcocos2d iOS" -configuration Release -sdk iphonesimulator11.2 \
clean build ARCHS='i386' VALID_ARCHS='i386' IPHONEOS_DEPLOYMENT_TARGET=10.0 \
TARGET_BUILD_DIR=tmp/i386 BUILT_PRODUCTS_DIR=tmp/i386 OBJROOT=tmp/i386 SYMROOT=tmp/i386 \
OTHER_CFLAGS=-fembed-bitcode
$ lipo -create -output "libcocos2d iOS.a" \
"tmp/arm64/libcocos2d iOS.a" \
"tmp/armv7/libcocos2d iOS.a" \
"tmp/x86_64/libcocos2d iOS.a" \
"tmp/i386/libcocos2d iOS.a"
$ rm -rf tmp
- この段階で libcocos2d iOS.a は 255.6MB
確認
-
cocos new
コマンドで作成した Xcode プロジェクトからcocos2d_libs.xcodeproj
サブプロジェクトを Delete すると ビルド時にリンクエラーが起きる状態になる- 作成した libcocos2d iOS.a を Finder から Xcode で開いたプロジェクトの Frameworks へドラッグ&ドロップ (copy) するとビルド成功する
- クリーンビルドが早くなった
- 作成した libcocos2d iOS.a を Finder から Xcode で開いたプロジェクトの Frameworks へドラッグ&ドロップ (copy) するとビルド成功する
bitcode
-
これだけだと Build Settings / Build Options / Enable Bitcode を Yes にするとビルドエラーが起きる
ld: '.../Build/Products/Debug-iphoneos/libcocos2d iOS.a(CCEAGLView-ios.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 arm64
- これは cocos2d-x-3rd-party-libs-bin で bitcode が有効になっていないため
-
cocos2d-x-3rd-party-libs-src (v3-deps-136) を bitcode 有効にしてビルドしてから上記手順 (
xcodebuild
) を実施すると bitcode を有効にしてビルドできるようになる
-
cocos2d-x-3rd-party-libs-src (v3-deps-136) を bitcode 有効にしてビルドしてから上記手順 (
- libcocos2d iOS.a が 309.8MB になった
- これは cocos2d-x-3rd-party-libs-bin で bitcode が有効になっていないため