BURelyFoundation-xcframeworks.sh 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #!/bin/sh
  2. set -e
  3. set -u
  4. set -o pipefail
  5. function on_error {
  6. echo "$(realpath -mq "${0}"):$1: error: Unexpected failure"
  7. }
  8. trap 'on_error $LINENO' ERR
  9. # This protects against multiple targets copying the same framework dependency at the same time. The solution
  10. # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
  11. RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
  12. variant_for_slice()
  13. {
  14. case "$1" in
  15. "BURelyFoundationAFN.xcframework/ios-arm64_armv7")
  16. echo ""
  17. ;;
  18. "BURelyFoundationAFN.xcframework/ios-arm64_i386_x86_64-simulator")
  19. echo "simulator"
  20. ;;
  21. "BURelyFoundationHeader.xcframework/ios-arm64_armv7")
  22. echo ""
  23. ;;
  24. "BURelyFoundationHeader.xcframework/ios-arm64_i386_x86_64-simulator")
  25. echo "simulator"
  26. ;;
  27. "CSJLottie.xcframework/ios-arm64_armv7")
  28. echo ""
  29. ;;
  30. "CSJLottie.xcframework/ios-arm64_i386_x86_64-simulator")
  31. echo "simulator"
  32. ;;
  33. "ELCoreTokenizer.xcframework/ios-arm64_armv7")
  34. echo ""
  35. ;;
  36. "ELCoreTokenizer.xcframework/ios-arm64_i386_x86_64-simulator")
  37. echo "simulator"
  38. ;;
  39. "BURelyFoundationFoundation.xcframework/ios-arm64_armv7")
  40. echo ""
  41. ;;
  42. "BURelyFoundationFoundation.xcframework/ios-arm64_i386_x86_64-simulator")
  43. echo "simulator"
  44. ;;
  45. "BURelyFoundationGecko.xcframework/ios-arm64_armv7")
  46. echo ""
  47. ;;
  48. "BURelyFoundationGecko.xcframework/ios-arm64_i386_x86_64-simulator")
  49. echo "simulator"
  50. ;;
  51. "HM.xcframework/ios-arm64_armv7")
  52. echo ""
  53. ;;
  54. "HM.xcframework/ios-arm64_i386_x86_64-simulator")
  55. echo "simulator"
  56. ;;
  57. "BURelyFoundationNETWork.xcframework/ios-arm64_armv7")
  58. echo ""
  59. ;;
  60. "BURelyFoundationNETWork.xcframework/ios-arm64_i386_x86_64-simulator")
  61. echo "simulator"
  62. ;;
  63. "BURelyFoundationSDWebImage.xcframework/ios-arm64_armv7")
  64. echo ""
  65. ;;
  66. "BURelyFoundationSDWebImage.xcframework/ios-arm64_i386_x86_64-simulator")
  67. echo "simulator"
  68. ;;
  69. "BUADServiceKit.xcframework/ios-arm64_armv7")
  70. echo ""
  71. ;;
  72. "BUADServiceKit.xcframework/ios-arm64_i386_x86_64-simulator")
  73. echo "simulator"
  74. ;;
  75. "Ugen.xcframework/ios-arm64_armv7")
  76. echo ""
  77. ;;
  78. "Ugen.xcframework/ios-arm64_i386_x86_64-simulator")
  79. echo "simulator"
  80. ;;
  81. "BURelyFoundationYYModel.xcframework/ios-arm64_armv7")
  82. echo ""
  83. ;;
  84. "BURelyFoundationYYModel.xcframework/ios-arm64_i386_x86_64-simulator")
  85. echo "simulator"
  86. ;;
  87. "BURelyFoundationZFPlayer.xcframework/ios-arm64_armv7")
  88. echo ""
  89. ;;
  90. "BURelyFoundationZFPlayer.xcframework/ios-arm64_i386_x86_64-simulator")
  91. echo "simulator"
  92. ;;
  93. "BURelyFoundationZip.xcframework/ios-arm64_armv7")
  94. echo ""
  95. ;;
  96. "BURelyFoundationZip.xcframework/ios-arm64_i386_x86_64-simulator")
  97. echo "simulator"
  98. ;;
  99. esac
  100. }
  101. archs_for_slice()
  102. {
  103. case "$1" in
  104. "BURelyFoundationAFN.xcframework/ios-arm64_armv7")
  105. echo "arm64 armv7"
  106. ;;
  107. "BURelyFoundationAFN.xcframework/ios-arm64_i386_x86_64-simulator")
  108. echo "arm64 i386 x86_64"
  109. ;;
  110. "BURelyFoundationHeader.xcframework/ios-arm64_armv7")
  111. echo "arm64 armv7"
  112. ;;
  113. "BURelyFoundationHeader.xcframework/ios-arm64_i386_x86_64-simulator")
  114. echo "arm64 i386 x86_64"
  115. ;;
  116. "CSJLottie.xcframework/ios-arm64_armv7")
  117. echo "arm64 armv7"
  118. ;;
  119. "CSJLottie.xcframework/ios-arm64_i386_x86_64-simulator")
  120. echo "arm64 i386 x86_64"
  121. ;;
  122. "ELCoreTokenizer.xcframework/ios-arm64_armv7")
  123. echo "arm64 armv7"
  124. ;;
  125. "ELCoreTokenizer.xcframework/ios-arm64_i386_x86_64-simulator")
  126. echo "arm64 i386 x86_64"
  127. ;;
  128. "BURelyFoundationFoundation.xcframework/ios-arm64_armv7")
  129. echo "arm64 armv7"
  130. ;;
  131. "BURelyFoundationFoundation.xcframework/ios-arm64_i386_x86_64-simulator")
  132. echo "arm64 i386 x86_64"
  133. ;;
  134. "BURelyFoundationGecko.xcframework/ios-arm64_armv7")
  135. echo "arm64 armv7"
  136. ;;
  137. "BURelyFoundationGecko.xcframework/ios-arm64_i386_x86_64-simulator")
  138. echo "arm64 i386 x86_64"
  139. ;;
  140. "HM.xcframework/ios-arm64_armv7")
  141. echo "arm64 armv7"
  142. ;;
  143. "HM.xcframework/ios-arm64_i386_x86_64-simulator")
  144. echo "arm64 i386 x86_64"
  145. ;;
  146. "BURelyFoundationNETWork.xcframework/ios-arm64_armv7")
  147. echo "arm64 armv7"
  148. ;;
  149. "BURelyFoundationNETWork.xcframework/ios-arm64_i386_x86_64-simulator")
  150. echo "arm64 i386 x86_64"
  151. ;;
  152. "BURelyFoundationSDWebImage.xcframework/ios-arm64_armv7")
  153. echo "arm64 armv7"
  154. ;;
  155. "BURelyFoundationSDWebImage.xcframework/ios-arm64_i386_x86_64-simulator")
  156. echo "arm64 i386 x86_64"
  157. ;;
  158. "BUADServiceKit.xcframework/ios-arm64_armv7")
  159. echo "arm64 armv7"
  160. ;;
  161. "BUADServiceKit.xcframework/ios-arm64_i386_x86_64-simulator")
  162. echo "arm64 i386 x86_64"
  163. ;;
  164. "Ugen.xcframework/ios-arm64_armv7")
  165. echo "arm64 armv7"
  166. ;;
  167. "Ugen.xcframework/ios-arm64_i386_x86_64-simulator")
  168. echo "arm64 i386 x86_64"
  169. ;;
  170. "BURelyFoundationYYModel.xcframework/ios-arm64_armv7")
  171. echo "arm64 armv7"
  172. ;;
  173. "BURelyFoundationYYModel.xcframework/ios-arm64_i386_x86_64-simulator")
  174. echo "arm64 i386 x86_64"
  175. ;;
  176. "BURelyFoundationZFPlayer.xcframework/ios-arm64_armv7")
  177. echo "arm64 armv7"
  178. ;;
  179. "BURelyFoundationZFPlayer.xcframework/ios-arm64_i386_x86_64-simulator")
  180. echo "arm64 i386 x86_64"
  181. ;;
  182. "BURelyFoundationZip.xcframework/ios-arm64_armv7")
  183. echo "arm64 armv7"
  184. ;;
  185. "BURelyFoundationZip.xcframework/ios-arm64_i386_x86_64-simulator")
  186. echo "arm64 i386 x86_64"
  187. ;;
  188. esac
  189. }
  190. copy_dir()
  191. {
  192. local source="$1"
  193. local destination="$2"
  194. # Use filter instead of exclude so missing patterns don't throw errors.
  195. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" \"${source}*\" \"${destination}\""
  196. rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" "${source}"/* "${destination}"
  197. }
  198. SELECT_SLICE_RETVAL=""
  199. select_slice() {
  200. local xcframework_name="$1"
  201. xcframework_name="${xcframework_name##*/}"
  202. local paths=("${@:2}")
  203. # Locate the correct slice of the .xcframework for the current architectures
  204. local target_path=""
  205. # Split archs on space so we can find a slice that has all the needed archs
  206. local target_archs=$(echo $ARCHS | tr " " "\n")
  207. local target_variant=""
  208. if [[ "$PLATFORM_NAME" == *"simulator" ]]; then
  209. target_variant="simulator"
  210. fi
  211. if [[ ! -z ${EFFECTIVE_PLATFORM_NAME+x} && "$EFFECTIVE_PLATFORM_NAME" == *"maccatalyst" ]]; then
  212. target_variant="maccatalyst"
  213. fi
  214. for i in ${!paths[@]}; do
  215. local matched_all_archs="1"
  216. local slice_archs="$(archs_for_slice "${xcframework_name}/${paths[$i]}")"
  217. local slice_variant="$(variant_for_slice "${xcframework_name}/${paths[$i]}")"
  218. for target_arch in $target_archs; do
  219. if ! [[ "${slice_variant}" == "$target_variant" ]]; then
  220. matched_all_archs="0"
  221. break
  222. fi
  223. if ! echo "${slice_archs}" | tr " " "\n" | grep -F -q -x "$target_arch"; then
  224. matched_all_archs="0"
  225. break
  226. fi
  227. done
  228. if [[ "$matched_all_archs" == "1" ]]; then
  229. # Found a matching slice
  230. echo "Selected xcframework slice ${paths[$i]}"
  231. SELECT_SLICE_RETVAL=${paths[$i]}
  232. break
  233. fi
  234. done
  235. }
  236. install_xcframework() {
  237. local basepath="$1"
  238. local name="$2"
  239. local package_type="$3"
  240. local paths=("${@:4}")
  241. # Locate the correct slice of the .xcframework for the current architectures
  242. select_slice "${basepath}" "${paths[@]}"
  243. local target_path="$SELECT_SLICE_RETVAL"
  244. if [[ -z "$target_path" ]]; then
  245. 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}})."
  246. return
  247. fi
  248. local source="$basepath/$target_path"
  249. local destination="${PODS_XCFRAMEWORKS_BUILD_DIR}/${name}"
  250. if [ ! -d "$destination" ]; then
  251. mkdir -p "$destination"
  252. fi
  253. copy_dir "$source/" "$destination"
  254. echo "Copied $source to $destination"
  255. }
  256. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationAFN/BURelyFoundationAFN.xcframework" "BURelyFoundation/AFNetworking" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  257. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationHeader/BURelyFoundationHeader.xcframework" "BURelyFoundation/BURelyFoundation" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  258. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/CSJLottie/CSJLottie.xcframework" "BURelyFoundation/CSJLottie" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  259. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/ELCoreTokenizer/ELCoreTokenizer.xcframework" "BURelyFoundation/ELCoreTokenizer" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  260. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationFoundation/BURelyFoundationFoundation.xcframework" "BURelyFoundation/Foundation" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  261. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationGecko/BURelyFoundationGecko.xcframework" "BURelyFoundation/Gecko" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  262. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/HM/HM.xcframework" "BURelyFoundation/HM" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  263. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationNETWork/BURelyFoundationNETWork.xcframework" "BURelyFoundation/NETWork" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  264. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationSDWebImage/BURelyFoundationSDWebImage.xcframework" "BURelyFoundation/SDWebImage" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  265. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/ServiceKit/BUADServiceKit.xcframework" "BURelyFoundation/ServiceCenter" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  266. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/Ugen/Ugen.xcframework" "BURelyFoundation/Ugen" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  267. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationYYModel/BURelyFoundationYYModel.xcframework" "BURelyFoundation/YYModel" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  268. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationZFPlayer/BURelyFoundationZFPlayer.xcframework" "BURelyFoundation/ZFPlayer" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"
  269. install_xcframework "${PODS_ROOT}/BURelyFoundation/Frameworks/SDK/BURelyFoundationZip/BURelyFoundationZip.xcframework" "BURelyFoundation/Zip" "library" "ios-arm64_armv7" "ios-arm64_i386_x86_64-simulator"