參考http://www.reibang.com/p/4e4defb528f7
1.項目自己制作的一些framework不方便適配模擬器搞糕,自己寫了個腳本,自動生成xcframework
- 單個xcframework文件提供多個平臺的分發(fā)二進(jìn)制文件,
- 多架構(gòu)合并蛛株,模擬器,真機可以通用巨柒,
- 上架AppStore智嚷,不需要將xcframework中的真機架構(gòu)分離,.framework還需要用腳本分離
#!/bin/bash
#xcodebuild: 在Xcode中實際使用的命令评姨。
#archive: 打包。
#project: 工程名萤晴。
#scheme: 選擇 scheme吐句。
#configuration: 哪種環(huán)境下。
#destination: 要分發(fā)的平臺店读,當(dāng)前指定的是 iOS Simulator嗦枢。
#archivePath: 壓縮之后,存放的路徑屯断。
#SKIP_INSTALL=NO:如果設(shè)置為YES文虏,則不會將生成的framwork文件存放在Products目錄下。
echo '///-------------------------------------------------------'
echo '///--編譯變量定義 開始'
echo '///-------------------------------------------------------'
#工程名
project_name=ZYFramework
#scheme名
scheme_name=ZYBaseKit
#打包模式 Debug/Release
development_mode=Release
#build文件夾路徑
build_path=build
#xcarchive文件名稱
xcarchiveFileName=${build_path}/${project_name}-${compileEnvironment}
cd ../
#先將工程編譯為 iphoneSimulator架構(gòu)
xcodebuild archive -workspace ZYFramework/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-destination 'generic/platform=iOS Simulator' \
-archivePath 'archives/ZYBaseKit.framework-iphonesimulator.xcarchive' \
SKIP_INSTALL=NO
#將編譯的產(chǎn)物拷貝到殖演、archivePath/Products/Library/Frameworks/ 目錄中
#先將工程編譯為 編譯真機的架構(gòu)
xcodebuild archive -workspace ZYFramework/${project_name}.xcworkspace \
-scheme ${scheme_name} \
-configuration ${development_mode} \
-destination 'generic/platform=iOS' \
-archivePath 'archives/ZYBaseKit.framework-iphoneos.xcarchive' \
SKIP_INSTALL=NO
#創(chuàng)建xcframework
xcodebuild -create-xcframework \
-framework 'archives/ZYBaseKit.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/ZYBaseKit.framework' \
-framework 'archives/ZYBaseKit.framework-iphoneos.xcarchive/Products/Library/Frameworks/ZYBaseKit.framework' \
-output 'ZYBaseKit.xcframework'
#xcframework successfully written out to: /Users/zhanyu/ZYBaseKit.xcframework
#-debug-symbols '/Users/zhanyu/archives/ZYBaseKit.framework-iphoneos.xcarchive/dSYMs/Masonry.framework.dSYM' \
#-debug-symbols '/Users/zhanyu/archives/ZYBaseKit.framework-iphonesimulator.xcarchive/dSYMs/Masonry.framework.dSYM' \
exit 0
2氧秘、報錯
Multiple commands produce '/Users/zhanyu/Library/Developer/Xcode/DerivedData/YPCProject-gouhxeuiodlvpfditypkjpijlrbk/Build/Products/Debug-iphonesimulator/Masonry.framework.dSYM/Contents/Info.plist'
重復(fù)Masonry.framework.dSYM'
#-debug-symbols '/Users/zhanyu/archives/LZBaseKit.framework-iphoneos.xcarchive/dSYMs/Masonry.framework.dSYM' \
#-debug-symbols '/Users/zhanyu/archives/LZBaseKit.framework-iphonesimulator.xcarchive/dSYMs/Masonry.framework.dSYM' \
3、
刪除:EXCLUDED_ARCHS = arm64;
刪除:EXCLUDED_ARCHS = "EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_simulator__NATIVE_ARCH_64_BIT_x86_64=arm64 arm64e armv7 armv7s armv6 armv8 EXCLUDED_ARCHS=(EXCLUDED_ARCHS__EFFECTIVE_PLATFORM_SUFFIX_
(NATIVE_ARCH_64_BIT))";
4趴久、模擬器能跑了敏储,用真機報錯了
“Xcode Command PhaseScriptExecution failed with a nonzero exit code”
刪除:EXCLUDED_ARCHS = arm64;
刪除:EXCLUDED_ARCHS = arm64;
PS:Architectures參數(shù)的含義
Architectures
當(dāng)前設(shè)備環(huán)境下支持的指令架構(gòu)。真機環(huán)境下是armV7朋鞍、arm64已添。模擬器環(huán)境下是X86_64妥箕、 i386、arm64(m1設(shè)備)
Build Active Architecture Only
是否只編譯當(dāng)前設(shè)備的指令架構(gòu)更舞。值是YES或者NO畦幢。一般Debug環(huán)境下,為了提高編譯速度缆蝉,會選擇YES宇葱,表示只編譯當(dāng)前設(shè)備的指令架構(gòu)。Release環(huán)境下刊头,選擇NO黍瞧,編譯所有類型設(shè)備的指令架構(gòu)。
Excluded Architecture
排除的架構(gòu)原杂。排除的架構(gòu)將不參與編譯印颤。例如:這里選擇了arm64,編譯產(chǎn)物將不會包含arm64指令架構(gòu)穿肄。
VALID_ARCHS
用戶自己設(shè)置的可用架構(gòu)年局。這個選項在User-Defind里面,它的優(yōu)先級是最高的咸产。如果Architectures支持了很多架構(gòu)矢否,但是VALID_ARCHS只填寫了一小部分,那么實際上支持的架構(gòu)也是這一小部分脑溢。所以VALID_ARCHS的值一般和Architectures保持一致僵朗。
EXCLUDED_ARCHS
在Xcode12之后的release note中,VALID_ARCHS已經(jīng)不推薦使用了deprecate屑彻,我們應(yīng)該使用EXCLUDED_ARCHS
這個EXCLUDED_ARCHS和Excluded Architecture是同一個意思验庙,所以我們使用Excluded Architecture就好了。
當(dāng)然酱酬,你繼續(xù)使用VALID_ARCHS也沒有什么問題。測試發(fā)現(xiàn)云矫,修改VALID_ARCHS仍然會影響編譯結(jié)果膳沽。
xcframework 報錯情況
報錯信息為 eerror: the path does not point to a valid framework: /Users/zhanyu/work/repair-ios/archives/ZY_SDK.framework-iphonesimulator.xcarchive/Products/Library/Frameworks/ZY_SDK.framework
/Users/zhanyu/work/repair-ios/ZY_SDK/Pods/Pods.xcodeproj: warning: The iOS deployment target 'IPHONEOS_DEPLOYMENT_TARGET' is set to 8.0, but the range of supported deployment target versions is 11.0 to 16.2.99. (in target 'RxCocoa' from project 'Pods')
分析 IPHONEOS_DEPLOYMENT_TARGET 設(shè)置為 8.0,但支持的部署目標(biāo)版本范圍為 11.0 到 16.2.99
解決方法:全局搜索IPHONEOS_DEPLOYMENT_TARGET 在pods中找到錯誤信息對應(yīng)的第三方让禀,修改該庫的 iOS Depolyment Target 字段挑社,改成建議的范圍之內(nèi)就好。