iOS編譯SDK自動化腳本(.framework+.a)

之前研究過靜態庫打包合成的問題,爲此踩了不少坑, 寫了一篇關於靜態庫打包的半自動的文章

不知道是Xcode的問題還是系統的問題,之前在網上找過了一些腳本,發現不可以直接在SDK工程中加入腳本,不然MacBook就直接發燙電風扇轉不停了,當時沒有找到好的辦法,所以搞了個半自動...

最近發現有Aggregate這麼個玩意兒,終於可以全自動了哈哈哈😄,需要在SDK的工程裏創建一個聚合類型的targetAggregate

並在Build Phases新建一個RunScript裏面執行腳本,無論是.framework還是.a都是一樣的

開整:

創建Aggregate

自動構建.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 "腳本跑🏃完了"

framework腳本執行結果

自動構建.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 "腳本跑🏃完了"

lib.a靜態庫腳本執行結果

真機架構:

  • armv7
  • armv7s
  • arm64
  • arm64e

模擬器架構:

  • i386
  • x86_64

不過現在Xcode13默認armv7和 arm64爲標準架構,x86_64爲PC端模擬器架構,需要自己手動調整Xcode配置剔除

如圖:

Xcode SDK架構設置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章