mkdir Framework mkdir XCFramework for a in SampleFramework do # create iOS Device framework xcodebuild archive -scheme $a -destination "generic/platform=iOS" -archivePath Framework/$a-iOS.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES # create iOS simulator framework xcodebuild archive -scheme $a -destination "generic/platform=iOS Simulator" -archivePath Framework/$a-Sim.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES targetInTvOS="" case "$a" in "SampleFramework") targetInTvOS="SampleFrameworkTvOS" esac if [ ${#targetInTvOS} -ge 1 ]; then # create tvOS framework xcodebuild archive -scheme $targetInTvOS -destination "generic/platform=tvOS" -archivePath Framework/$a-tvOS.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES # create tvOS simulator framework xcodebuild archive -scheme $targetInTvOS -destination "generic/platform=tvOS Simulator" -archivePath Framework/$a-tvOS-Sim.xcarchive SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES fi characterbase="_vers.c" FRAMEWORKNAME=$a FRAMEWORKNAME+=$characterbase BCSYMBOLFILEPATH="" BCSYMBOLFILEPATHTvOS="" # Loop through BCSymbolMaps directory for fileName in `ls Framework/$a-iOS.xcarchive/BCSymbolMaps/` do # give permission sudo chmod 777 $(pwd)/Framework/$a-iOS.xcarchive/BCSymbolMaps/$fileName # search for framework name in file if grep $FRAMEWORKNAME $(pwd)/Framework/$a-iOS.xcarchive/BCSymbolMaps/$fileName then BCSYMBOLFILEPATH+=" -debug-symbols $(pwd)/Framework/$a-iOS.xcarchive/BCSymbolMaps/$fileName" if [[ ! -f "$(pwd)/Framework/$a-iOS.xcarchive/BCSymbolMaps/$fileName" ]] then echo "INVALID BCSYMBOL FILE PATH" exit 0; fi fi done if [ ${#targetInTvOS} -ge 1 ]; then for fileName in `ls Framework/$a-tvOS.xcarchive/BCSymbolMaps/` do # give permission sudo chmod 777 $(pwd)/Framework/$a-tvOS.xcarchive/BCSymbolMaps/$fileName # search for framework name in file if grep $FRAMEWORKNAME $(pwd)/Framework/$a-tvOS.xcarchive/BCSymbolMaps/$fileName then BCSYMBOLFILEPATHTvOS+=" -debug-symbols $(pwd)/Framework/$a-tvOS.xcarchive/BCSymbolMaps/$fileName" if [[ ! -f "$(pwd)/Framework/$a-tvOS.xcarchive/BCSymbolMaps/$fileName" ]] then echo "INVALID BCSYMBOL FILE PATH" exit 0; fi fi done fi # dsym file path for simulator and device for iOS device DSYMFILEPATHDEVICE="$(pwd)/Framework/$a-iOS.xcarchive/dSYMs/$a.framework.dSYM" DSYMFILEPATHSIM="$(pwd)/Framework/$a-Sim.xcarchive/dSYMs/$a.framework.dSYM" if [[ ! -d "$DSYMFILEPATHDEVICE" ]] || [[ ! -d "$DSYMFILEPATHSIM" ]] then echo "INVALID DSYM FILE PATH" exit 0; fi # create xcframework if [ ${#targetInTvOS} -ge 1 ]; then DSYMFILEPATHDEVICETVOS="$(pwd)/Framework/$a-tvOS.xcarchive/dSYMs/$a.framework.dSYM" DSYMFILEPATHSIMTVOS="$(pwd)/Framework/$a-tvOS-Sim.xcarchive/dSYMs/$a.framework.dSYM" xcodebuild -create-xcframework -framework Framework/$a-iOS.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHDEVICE $BCSYMBOLFILEPATH -framework Framework/$a-Sim.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHSIM -framework Framework/$a-tvOS.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHDEVICETVOS $BCSYMBOLFILEPATHTvOS -framework Framework/$a-tvOS-Sim.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHSIMTVOS -output XCFramework/$a.xcframework else xcodebuild -create-xcframework -framework Framework/$a-iOS.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHDEVICE $BCSYMBOLFILEPATH -framework Framework/$a-Sim.xcarchive/Products/Library/Frameworks/$a.framework -debug-symbols $DSYMFILEPATHSIM -output XCFramework/$a.xcframework fi done #remove Framework directory rm -r Framework