# XCFramework 產生腳本 ###### tags: `Published` ## 使用步驟 1. 把下面腳本存成 `xcframework_generate_script.sh` 2. 終端機 `cd` 到專案目錄後執行 ```shell $ sh xcframework_generate_script.sh ``` ## 腳本正文 ```shell= #!/bin/bash echo "### start execute script" # 尋找當前目錄底下副檔名為 xcodeproj 的檔案,找不到則結束程式。 # 如果順利找到的話,應該會是像 "kkbox.xcodeproj" 這樣子的字串。 proj_name=( *.xcodeproj ) [[ -e $proj_name ]] || { echo "Not found *.xcodeproj"; exit 1; } # 字串處理,取前段半為專案 scheme name。 # 以上面提的範例的話,會得到 "kkbox" 這樣的字串。 scheme_name="${proj_name%.*}" echo "Successful get scheme name: $scheme_name" # 打印出目前 xcode 使用的版本 xcodebuild -version # archive 出實體機版本的 framework xcodebuild clean archive \ -project $proj_name \ -scheme $scheme_name \ -destination "generic/platform=iOS" \ -archivePath "archives/iOS" \ SKIP_INSTALL=NO \ BUILD_LIBRARY_FOR_DISTRIBUTION=YES # archive 出模擬器版本的 framework xcodebuild clean archive \ -project $proj_name \ -scheme $scheme_name \ -destination "generic/platform=iOS Simulator" \ -archivePath "archives/Simulator" \ SKIP_INSTALL=NO \ BUILD_LIBRARY_FOR_DISTRIBUTION=YES # 合併以上兩個版本成為一個 xcframework xcodebuild -create-xcframework \ -framework ./archives/iOS.xcarchive/Products/Library/Frameworks/$scheme_name.framework \ -framework ./archives/Simulator.xcarchive/Products/Library/Frameworks/$scheme_name.framework \ -output ./archives/$scheme_name.xcframework exit 0 ``` --- ### 補充資料: - -workspace - 指定 workspace 的名稱。如果你的專案沒有用 workspace 而是用 project 的話,就用 -project 指定 project 的名稱。 - -destination - 指定要 archive 的平台。[這邊有所有可使用的 destination 列表](https://github.com/bielikb/xcframeworks#list-of-destinations)。 - -archivePath - 指定產生出來 archive 的路徑。 - -SKIP_INSTALL=NO - 告訴 xcodebuild 不要安裝產生出來的 archive。 - -BUILD_LIBRARY_FOR_DISTRIBUTION=YES - 告訴 xcodebuild 是編譯可發佈的 library。 ### 參考資料: - https://github.com/bielikb/xcframeworks - https://waynestalk.com/create-xcframeworks/