11#! /usr/bin/env bash
22
3- set -e
3+ set -euo pipefail
44
5- BASE_PWD=" $PWD "
65SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " > /dev/null && pwd ) "
7- OUTPUT_DIR=$( mktemp -d )
8- COMMON_SETUP=" -project ${SCRIPT_DIR} /../CryptoSwift.xcodeproj -scheme CryptoSwift -configuration Release -quiet SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES"
9-
10- # macOS
11- DERIVED_DATA_PATH=$( mktemp -d )
12- xcrun xcodebuild build \
13- $COMMON_SETUP \
14- -derivedDataPath " ${DERIVED_DATA_PATH} " \
15- -destination ' generic/platform=macOS'
16-
17- mkdir -p " ${OUTPUT_DIR} /macos"
18- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release/CryptoSwift.framework" " ${OUTPUT_DIR} /macos/CryptoSwift.framework"
19- rm -rf " ${DERIVED_DATA_PATH} "
20-
21- # macOS Catalyst
22- DERIVED_DATA_PATH=$( mktemp -d )
23- xcrun xcodebuild build \
24- $COMMON_SETUP \
25- -derivedDataPath " ${DERIVED_DATA_PATH} " \
26- -destination ' generic/platform=macOS,variant=Mac Catalyst'
27-
28- mkdir -p " ${OUTPUT_DIR} /maccatalyst"
29- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-maccatalyst/CryptoSwift.framework" " ${OUTPUT_DIR} /maccatalyst/CryptoSwift.framework"
30- rm -rf " ${DERIVED_DATA_PATH} "
31-
32- # iOS
33- DERIVED_DATA_PATH=$( mktemp -d )
34- xcrun xcodebuild build \
35- $COMMON_SETUP \
36- -derivedDataPath " ${DERIVED_DATA_PATH} " \
37- -destination ' generic/platform=iOS'
38-
39- mkdir -p " ${OUTPUT_DIR} /iphoneos"
40- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-iphoneos/CryptoSwift.framework" " ${OUTPUT_DIR} /iphoneos/CryptoSwift.framework"
41- rm -rf " ${DERIVED_DATA_PATH} "
42-
43- # iOS Simulator
44- DERIVED_DATA_PATH=$( mktemp -d )
45- xcrun xcodebuild build \
46- $COMMON_SETUP \
47- -derivedDataPath " ${DERIVED_DATA_PATH} " \
48- -destination ' generic/platform=iOS Simulator'
49-
50- mkdir -p " ${OUTPUT_DIR} /iphonesimulator"
51- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-iphonesimulator/CryptoSwift.framework" " ${OUTPUT_DIR} /iphonesimulator/CryptoSwift.framework"
52- rm -rf " ${DERIVED_DATA_PATH} "
53-
54- # tvOS
55- DERIVED_DATA_PATH=$( mktemp -d )
56- xcrun xcodebuild build \
57- $COMMON_SETUP \
58- -derivedDataPath " ${DERIVED_DATA_PATH} " \
59- -destination ' generic/platform=tvOS'
60-
61- mkdir -p " ${OUTPUT_DIR} /appletvos"
62- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-appletvos/CryptoSwift.framework" " ${OUTPUT_DIR} /appletvos/CryptoSwift.framework"
63- rm -rf " ${DERIVED_DATA_PATH} "
64-
65- # tvOS Simulator
66- DERIVED_DATA_PATH=$( mktemp -d )
67- xcrun xcodebuild build \
68- $COMMON_SETUP \
69- -derivedDataPath " ${DERIVED_DATA_PATH} " \
70- -destination ' generic/platform=tvOS Simulator'
71-
72- mkdir -p " ${OUTPUT_DIR} /appletvsimulator"
73- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-appletvsimulator/CryptoSwift.framework" " ${OUTPUT_DIR} /appletvsimulator/CryptoSwift.framework"
74- rm -rf " ${DERIVED_DATA_PATH} "
75-
76- # watchOS
77- DERIVED_DATA_PATH=$( mktemp -d )
78- xcrun xcodebuild build \
79- $COMMON_SETUP \
80- -derivedDataPath " ${DERIVED_DATA_PATH} " \
81- -destination ' generic/platform=watchOS'
82-
83- mkdir -p " ${OUTPUT_DIR} /watchos"
84- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-watchos/CryptoSwift.framework" " ${OUTPUT_DIR} /watchos/CryptoSwift.framework"
85- rm -rf " ${DERIVED_DATA_PATH} "
86-
87- # watchOS Simulator
88- DERIVED_DATA_PATH=$( mktemp -d )
89- xcrun xcodebuild build \
90- $COMMON_SETUP \
91- -derivedDataPath " ${DERIVED_DATA_PATH} " \
92- -destination ' generic/platform=watchOS Simulator'
93-
94- mkdir -p " ${OUTPUT_DIR} /watchsimulator"
95- ditto " ${DERIVED_DATA_PATH} /Build/Products/Release-watchsimulator/CryptoSwift.framework" " ${OUTPUT_DIR} /watchsimulator/CryptoSwift.framework"
96- rm -rf " ${DERIVED_DATA_PATH} "
6+ PROJECT=" ${SCRIPT_DIR} /../CryptoSwift.xcodeproj"
7+ XCFRAMEWORK=" ${SCRIPT_DIR} /../CryptoSwift.xcframework"
8+ OUTPUT_DIR=" $( mktemp -d ) "
9+ DERIVED_DATA_PATH=" "
10+
11+ # Clean up temporary build output on any exit (success or failure).
12+ trap ' rm -rf "${OUTPUT_DIR}" "${DERIVED_DATA_PATH}"' EXIT
13+
14+ COMMON_SETUP=(
15+ -project " ${PROJECT} "
16+ -scheme CryptoSwift
17+ -configuration Release
18+ -quiet
19+ SKIP_INSTALL=NO
20+ BUILD_LIBRARY_FOR_DISTRIBUTION=YES
21+ )
22+
23+ # destination | Build/Products subdirectory | output slice directory
24+ PLATFORMS=(
25+ " generic/platform=macOS|Release|macos"
26+ " generic/platform=macOS,variant=Mac Catalyst|Release-maccatalyst|maccatalyst"
27+ " generic/platform=iOS|Release-iphoneos|iphoneos"
28+ " generic/platform=iOS Simulator|Release-iphonesimulator|iphonesimulator"
29+ " generic/platform=tvOS|Release-appletvos|appletvos"
30+ " generic/platform=tvOS Simulator|Release-appletvsimulator|appletvsimulator"
31+ " generic/platform=watchOS|Release-watchos|watchos"
32+ " generic/platform=watchOS Simulator|Release-watchsimulator|watchsimulator"
33+ )
34+
35+ frameworks=()
36+ for entry in " ${PLATFORMS[@]} " ; do
37+ IFS=' |' read -r destination products_subdir slice <<< " ${entry}"
38+
39+ DERIVED_DATA_PATH=" $( mktemp -d ) "
40+ xcrun xcodebuild build \
41+ " ${COMMON_SETUP[@]} " \
42+ -derivedDataPath " ${DERIVED_DATA_PATH} " \
43+ -destination " ${destination} "
44+
45+ mkdir -p " ${OUTPUT_DIR} /${slice} "
46+ ditto \
47+ " ${DERIVED_DATA_PATH} /Build/Products/${products_subdir} /CryptoSwift.framework" \
48+ " ${OUTPUT_DIR} /${slice} /CryptoSwift.framework"
49+ rm -rf " ${DERIVED_DATA_PATH} "
50+ DERIVED_DATA_PATH=" "
51+
52+ frameworks+=(-framework " ${OUTPUT_DIR} /${slice} /CryptoSwift.framework" )
53+ done
9754
9855# XCFRAMEWORK
99- rm -rf ${SCRIPT_DIR} /../CryptoSwift.xcframework
56+ rm -rf " ${XCFRAMEWORK} "
10057xcrun xcodebuild -quiet -create-xcframework \
101- -framework " ${OUTPUT_DIR} /iphoneos/CryptoSwift.framework" \
102- -framework " ${OUTPUT_DIR} /iphonesimulator/CryptoSwift.framework" \
103- -framework " ${OUTPUT_DIR} /appletvos/CryptoSwift.framework" \
104- -framework " ${OUTPUT_DIR} /appletvsimulator/CryptoSwift.framework" \
105- -framework " ${OUTPUT_DIR} /watchos/CryptoSwift.framework" \
106- -framework " ${OUTPUT_DIR} /watchsimulator/CryptoSwift.framework" \
107- -framework " ${OUTPUT_DIR} /macos/CryptoSwift.framework" \
108- -framework " ${OUTPUT_DIR} /maccatalyst/CryptoSwift.framework" \
109- -output ${SCRIPT_DIR} /../CryptoSwift.xcframework
110-
111- # pushd ${OUTPUT_DIR}
112- # xcrun zip --symlinks -r -o ${BASE_PWD}/CryptoSwift.xcframework.zip CryptoSwift.xcframework
113- # popd
114-
115- echo " ✔️ CryptoSwift.xcframework"
116- echo ${OUTPUT_DIR}
58+ " ${frameworks[@]} " \
59+ -output " ${XCFRAMEWORK} "
11760
118- rm -rf ${OUTPUT_DIR}
119- cd ${BASE_PWD}
61+ echo " ✔️ ${XCFRAMEWORK} "
0 commit comments