在Xcode中從動態庫剝離不需要的架構
自從iOS 8釋出以來,開發人員已經能夠利用動態庫對iOS開發的好處。對於一般開發,為所有需要的架構設定一個單一的動態庫是非常好的,所以您可以在所有裝置和iOS模擬器上執行,而無需更改任何東西。然而,這種方法有一個缺點 - 因為它們在執行時連結,當一個動態庫被單獨編譯到最終應用程式時,不可能知道實際需要哪些架構。因此,Xcode將在編譯時將整個事物複製到應用程式包中。除了浪費的磁碟空間,理論上沒有真正的缺點。但是實際上,iTunes Connect不喜歡我們新增未使用的二進位制切片:這時候,打包上傳Appstore會報如下錯誤:
那麼,我們如何解決這個問題呢?
步驟如下:
在Build Phases中加入run script。在裡面新增Shell指令碼,
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
該指令碼將檢視您構建的應用程式的Frameworks資料夾,並確保只有您正在構建的架構存在於每個框架中。
好多了!現在我可以在我的專案中新增包含我所需要的所有架構的胖動態庫,而我的構建過程將會在任何給定的時刻處理哪些架構。
相關文章
- 架構中的分離架構
- 剝析surging的架構思想架構
- 如何將 css 從 Application bundle 資源中剝離出來CSSAPP
- 在Linux中建立靜態庫和動態庫Linux
- 動態代理架構架構
- Xcode新增Shell指令碼打包靜態庫和動態庫XCode指令碼
- MySQL的BlackHole引擎在主從架構中的作用MySql架構
- SSL剝離工具sslstrip
- DNS在架構中的使用DNS架構
- 【架構設計】無狀態狀態機在程式碼中的實踐架構
- 看懂架構設計中的服務隔離架構
- 乾貨 | CDN搭配OSS最佳實踐 ——搭建動靜態分離的應用架構應用架構
- 在Xcode中手動新增pch檔案XCode
- 網際網路動靜分離架構架構
- ndk-build 編譯多個CPU架構的動態連結庫UI編譯架構
- 前後端分離架構中的介面設計後端架構
- Java架構-Java JDK 動態代理Java架構JDK
- 從xcode中移除ARCXCode
- Xcode動態除錯原理XCode除錯
- 《從零構建前後分離web專案》探究 - 深入聊聊前後分離架構Web架構
- 移動端基於動態路由的架構設計路由架構
- 在 Linux中如何使用動態連結模組庫?Linux
- 從資料庫中動態選取下拉選單的方法 (轉)資料庫
- iOS中的動態庫,靜態庫和framework介紹iOSFramework
- 事件驅動架構EDA中的元件事件架構元件
- 混合雲中的事件驅動架構事件架構
- 三種架構在Flutter中的嘗試架構Flutter
- 高可用、彈性動態的金融級移動架構在螞蟻金服的演進之路架構
- Linux 依賴動態庫 / 靜態庫的動態態庫 / 靜態庫Linux
- ios 開發中 動態庫 與靜態庫的區別iOS
- 資料庫治理利器:動態讀寫分離資料庫
- 愛奇藝在 Dubbo 生態下的微服務架構實踐微服務架構
- MySQL 高可用架構:主從備份及讀寫分離MySql架構
- 如何在SSR架構中實現離線可用?(一)架構
- Xcode 6製作動態及靜態FrameworkXCodeFramework
- Product settype在CRM WebClient UI架構中的地位WebclientUI架構
- MVVM架構在Flutter中的簡單實踐MVVM架構Flutter
- [動態代理三部曲:中] - 從動態代理,看Class檔案結構定義