之前研究過靜態庫打包合成的問題,爲此踩了不少坑, 寫了一篇關於靜態庫打包的半自動的文章
不知道是Xcode的問題還是系統的問題,之前在網上找過了一些腳本,發現不可以直接在SDK工程中加入腳本,不然MacBook就直接發燙電風扇轉不停了,當時沒有找到好的辦法,所以搞了個半自動...
最近發現有Aggregate
這麼個玩意兒,終於可以全自動了哈哈哈😄,需要在SDK的工程裏創建一個聚合類型的target
即Aggregate
並在Build Phases
新建一個RunScript
裏面執行腳本,無論是.framework
還是.a
都是一樣的
開整:
自動構建.framework腳本如下:
set -e
#SDK的名字
SDK_NAME=${PROJECT_NAME}
#SDK產出目錄
INSTALL_DIR=${SRCROOT}/Products/${SDK_NAME}.framework
#清空編譯緩存
rm -rf ${BUILD_DIR}
# 執行模擬器編譯指令
xcodebuild -configuration ${CONFIGURATION} -target "${SDK_NAME}" -sdk iphonesimulator build
#執行真機編譯指令
xcodebuild -configuration ${CONFIGURATION} -target "${SDK_NAME}" -sdk iphoneos build
#真機目錄
DEVICE_DIR="build"/${CONFIGURATION}-iphoneos/${SDK_NAME}.framework
#模擬器目錄
SIMULATOR_DIR="build"/${CONFIGURATION}-iphonesimulator/${SDK_NAME}.framework
#清除舊的安裝目錄
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
#創建新的安裝目錄
mkdir -p "${INSTALL_DIR}"
#拷貝編譯產物到安裝目錄
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
#合併真機和模擬器的編譯產物
lipo -create "${DEVICE_DIR}/${SDK_NAME}" "${SIMULATOR_DIR}/${SDK_NAME}" -output "${INSTALL_DIR}/${SDK_NAME}"
#打開安裝目錄查看結果
open "${SRCROOT}/Products/"
rm -rf "${SRCROOT}/build"
#查看此次編譯的架構支持
lipo_info=`lipo -info ${INSTALL_DIR}/${SDK_NAME}`
icon_path=`pwd`/Xcode.icns
icon_file=$(osascript -e "set thePath to POSIX file \"${icon_path}\" as string")
echo $icon_file
archs=${lipo_info##*are:}
osascript -e "display dialog \"${archs}\" with title \"查看靜態庫信息\" buttons {\"OK\"} default button 1 with icon file \"${icon_file}\""
echo "腳本跑🏃完了"
自動構建.a腳本如下:
set -e
#SDK的名字
SDK_NAME=${PROJECT_NAME}
#SDK產出目錄
INSTALL_DIR=${SRCROOT}/Products/${SDK_NAME}
#清空編譯緩存
rm -rf ${BUILD_DIR}
# 執行模擬器編譯指令
xcodebuild -configuration ${CONFIGURATION} -target "${SDK_NAME}" -sdk iphonesimulator build
#執行真機編譯指令
xcodebuild -configuration ${CONFIGURATION} -target "${SDK_NAME}" -sdk iphoneos build
#真機目錄
DEVICE_DIR="build"/${CONFIGURATION}-iphoneos
#模擬器目錄
SIMULATOR_DIR="build"/${CONFIGURATION}-iphonesimulator
#清除舊的安裝目錄
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
#創建新的安裝目錄
mkdir -p "${INSTALL_DIR}"
#拷貝編譯產物到安裝目錄
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
rm -rf "${INSTALL_DIR}/usr"
#合併真機和模擬器的編譯產物
lipo -create "${DEVICE_DIR}/lib${SDK_NAME}.a" "${SIMULATOR_DIR}/lib${SDK_NAME}.a" -output "${INSTALL_DIR}/lib${SDK_NAME}.a"
#打開安裝目錄查看結果
open "${SRCROOT}/Products/"
#刪除編譯冗餘數據
rm -rf "${SRCROOT}/build"
#查看此次編譯的架構支持
lipo_info=`lipo -info ${INSTALL_DIR}/lib${SDK_NAME}.a`
icon_path=`pwd`/Xcode.icns
icon_file=$(osascript -e "set thePath to POSIX file \"${icon_path}\" as string")
echo $icon_file
archs=${lipo_info##*are:}
osascript -e "display dialog \"${archs}\" with title \"查看靜態庫信息\" buttons {\"OK\"} default button 1 with icon file \"${icon_file}\""
echo "腳本跑🏃完了"
真機架構:
- armv7
- armv7s
- arm64
- arm64e
模擬器架構:
- i386
- x86_64
不過現在Xcode13默認armv7和 arm64爲標準架構,x86_64爲PC端模擬器架構,需要自己手動調整Xcode配置剔除
如圖: