75d24c15
yangbin
123
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#!/bin/sh
set -e
set -u
set -o pipefail
function on_error {
echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
}
trap 'on_error $LINENO' ERR
# This protects against multiple targets copying the same framework dependency at the same time. The solution
# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
|
76bb5f50
daifengyi
fix project confi...
|
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
variant_for_slice()
{
case "$1" in
"realm-monorepo.xcframework/macos-x86_64_arm64")
echo ""
;;
"realm-monorepo.xcframework/ios-armv7_arm64")
echo ""
;;
"realm-monorepo.xcframework/ios-arm64_x86_64_i386-simulator")
echo "simulator"
;;
"realm-monorepo.xcframework/ios-x86_64_arm64-maccatalyst")
echo "maccatalyst"
;;
"realm-monorepo.xcframework/watchos-armv7k_arm64_32")
echo ""
;;
"realm-monorepo.xcframework/watchos-arm64_i386_x86_64-simulator")
echo "simulator"
;;
"realm-monorepo.xcframework/tvos-arm64")
echo ""
;;
"realm-monorepo.xcframework/tvos-arm64_x86_64-simulator")
echo "simulator"
;;
esac
}
archs_for_slice()
{
case "$1" in
"realm-monorepo.xcframework/macos-x86_64_arm64")
echo "arm64 x86_64"
;;
"realm-monorepo.xcframework/ios-armv7_arm64")
echo "arm64 armv7"
;;
"realm-monorepo.xcframework/ios-arm64_x86_64_i386-simulator")
echo "arm64 i386 x86_64"
;;
"realm-monorepo.xcframework/ios-x86_64_arm64-maccatalyst")
echo "arm64 x86_64"
;;
"realm-monorepo.xcframework/watchos-armv7k_arm64_32")
echo "arm64_32 armv7k"
;;
"realm-monorepo.xcframework/watchos-arm64_i386_x86_64-simulator")
echo "arm64 i386 x86_64"
;;
"realm-monorepo.xcframework/tvos-arm64")
echo "arm64"
;;
"realm-monorepo.xcframework/tvos-arm64_x86_64-simulator")
echo "arm64 x86_64"
;;
esac
}
|
75d24c15
yangbin
123
|
77
78
79
80
81
82
83
84
85
86
87
88
89
|
copy_dir()
{
local source="$1"
local destination="$2"
# Use filter instead of exclude so missing patterns don't throw errors.
echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
}
SELECT_SLICE_RETVAL=""
select_slice() {
|
76bb5f50
daifengyi
fix project confi...
|
90
91
92
|
local xcframework_name="$1"
xcframework_name="${xcframework_name##*/}"
local paths=("${@:2}")
|
75d24c15
yangbin
123
|
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
# Locate the correct slice of the .xcframework for the current architectures
local target_path=""
# Split archs on space so we can find a slice that has all the needed archs
local target_archs=$(echo $ARCHS | tr " " "\n")
local target_variant=""
if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
target_variant="simulator"
fi
if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
target_variant="maccatalyst"
fi
for i in ${!paths[@]}; do
local matched_all_archs="1"
|
76bb5f50
daifengyi
fix project confi...
|
108
109
110
111
|
local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
for target_arch in $target_archs; do
if ! [[ "${slice_variant}" == "$target_variant" ]]; then
|
75d24c15
yangbin
123
|
112
113
114
115
|
matched_all_archs="0"
break
fi
|
76bb5f50
daifengyi
fix project confi...
|
116
|
if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
|
75d24c15
yangbin
123
|
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
matched_all_archs="0"
break
fi
done
if [[ "$matched_all_archs" == "1" ]]; then
# Found a matching slice
echo "Selected xcframework slice ${paths[$i]}"
SELECT_SLICE_RETVAL=${paths[$i]}
break
fi
done
}
install_xcframework() {
local basepath="$1"
local name="$2"
local package_type="$3"
local paths=("${@:4}")
# Locate the correct slice of the .xcframework for the current architectures
|
76bb5f50
daifengyi
fix project confi...
|
138
|
select_slice "${basepath}" "${paths[@]}"
|
75d24c15
yangbin
123
|
139
140
|
local target_path="$SELECT_SLICE_RETVAL"
if [[ -z "$target_path" ]]; then
|
76bb5f50
daifengyi
fix project confi...
|
141
|
echo "warning: [CP] $(basename ${basepath}): Unable to find matching slice in '${paths[@]}' for the current build architectures ($ARCHS) and platform (${EFFECTIVE_PLATFORM_NAME-${PLATFORM_NAME}})."
|
75d24c15
yangbin
123
|
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
return
fi
local source="$basepath/$target_path"
local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
if [ ! -d "$destination" ]; then
mkdir -p "$destination"
fi
copy_dir "$source/" "$destination"
echo "Copied $source to $destination"
}
install_xcframework "${PODS_ROOT}/Realm/core/realm-monorepo.xcframework" "Realm" "library" "ios-armv7_arm64" "ios-arm64_x86_64_i386-simulator" "ios-x86_64_arm64-maccatalyst"
|