xcodebuildで32bit、64bitのライブラリをビルドするスクリプト
xcodebuildを使って32bitと64bitの静的ライブラリをビルドする簡単なスクリプトを作りました。
最終的な成果物としては、指定した出力先に、ビルドしてlipoでくっつけた32bitと64bitの静的ライブラリが配布される感じです。
#!/bin/sh #----------------------------編集項目----------------------------# #成果物の出力先 OUTPUT_PATH="/Users/xxx/Desktop" #プロジェクトのrootパス ROOT="/Users/xxx/Sample/" #Xcodeのプロジェクト PROJECT_PATH="${ROOT}/SampleSDK.xcodeproj" #Target名 TARGET_NAME="SampleSDK" #----------------------------------------------------------------# #実機用 IOS_SDK="iphoneos" #シミュレーター用 SIMULATOR_SDK="iphonesimulator" #Deployment Target for 32bit DEPLOYMENT_TARGET_32="4.3" #Deployment Target for 64bit DEPLOYMENT_TARGET_64="7.0" #Config("Release"、"Debug") CONFIG="Release" #32bitアーキテクチャ ARCHS_IOS_32BIT="armv7 armv7s" #64bitアーキテクチャ ARCHS_IOS_64BIT="armv7 armv7s arm64" #32bitシュミレータアーキテクチャ ARCHS_SIM_32BIT="i386" #64bitシュミレータアーキテクチャ(i386も追加しないとシュミレータで動作しない) ARCHS_SIM_64BIT="x86_64 i386" #------------------------------# #前準備 # #------------------------------# #tmpディレクトリを作成 ios32=`mktemp -d ios32.XXXXXX` sim32=`mktemp -d sim32.XXXXXX` ios64=`mktemp -d ios64.XXXXXX` sim64=`mktemp -d sim64.XXXXXX` #現在のパスを取得 currentPath=`pwd` #------------------------------# #ビルド # #------------------------------# #32bit用にビルド xcodebuild -project "${PROJECT_PATH}" -target "${TARGET_NAME}" -sdk "${IOS_SDK}" IPHONEOS_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET_32}" ARCHS="${ARCHS_IOS_32BIT}" ONLY_ACTIVE_ARCH=NO clean build TARGET_BUILD_DIR="${currentPath}/${ios32}" xcodebuild -project "${PROJECT_PATH}" -target "${TARGET_NAME}" -sdk "${SIMULATOR_SDK}" IPHONEOS_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET_32}" ARCHS="${ARCHS_SIM_32BIT}" ONLY_ACTIVE_ARCH=NO clean build TARGET_BUILD_DIR="${currentPath}/${sim32}" #64bit用にビルド xcodebuild -project "${PROJECT_PATH}" -target "${TARGET_NAME}" -sdk "${IOS_SDK}" IPHONEOS_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET_64}" ARCHS="${ARCHS_IOS_64BIT}" ONLY_ACTIVE_ARCH=NO clean build TARGET_BUILD_DIR="${currentPath}/${ios64}" xcodebuild -project "${PROJECT_PATH}" -target "${TARGET_NAME}" -sdk "${SIMULATOR_SDK}" IPHONEOS_DEPLOYMENT_TARGET="${DEPLOYMENT_TARGET_64}" ARCHS="${ARCHS_SIM_64BIT}" ONLY_ACTIVE_ARCH=NO clean build TARGET_BUILD_DIR="${currentPath}/${sim64}" #------------------------------# #ライブラリ生成 # #------------------------------# #32bitライブラリを作成 lipo ${currentPath}/${ios32}/lib${TARGET_NAME}.a ${currentPath}/${sim32}/lib${TARGET_NAME}.a -create -output ${OUTPUT_PATH}/lib${TARGET_NAME}.a #64bitライブラリを作成 lipo ${currentPath}/${ios64}/lib${TARGET_NAME}.a ${currentPath}/${sim64}/lib${TARGET_NAME}.a -create -output ${OUTPUT_PATH}/lib${TARGET_NAME}.a #------------------------------# #後始末 # #------------------------------# #tmpディレクトリを削除 rm -r ${ios32} rm -r ${sim32} rm -r ${ios64} rm -r ${sim64} exit 0
あと、最終的に生成されたライブラリがどんなアーキテクチャに対応しているかは、以下のコマンドで確認できるとのこと。
xcrun lipo -info xxxx/libSample.a
参考:
Static libs with support to iOS 5 and arm64 - Doing things the hard way...
【iPhone】64bitの静的ライブラリをビルドする方法