app-api-snapshot.sh (2204B)
1 #!/bin/bash 2 set -euo pipefail 3 4 operation=${1:-} 5 case "$operation" in 6 write|check) ;; 7 *) echo "usage: $0 {write|check}" >&2; exit 64 ;; 8 esac 9 10 for variable in XCODE_DERIVED_DATA XCODE_SOURCE_PACKAGES; do 11 if [[ -z "${!variable:-}" ]]; then 12 echo "error: $variable is required; run this command through cargo extbuild" >&2 13 exit 1 14 fi 15 done 16 17 repo_root=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd) 18 work_dir="$XCODE_DERIVED_DATA/tera-app-api" 19 symbol_dir="$work_dir/symbols" 20 rendered="$work_dir/TeraApp.symbols.json" 21 snapshot="$repo_root/api/TeraApp.symbols.json" 22 products="$XCODE_DERIVED_DATA/Build/Products/Debug-iphonesimulator" 23 generated_module_maps="$XCODE_DERIVED_DATA/Build/Intermediates.noindex/GeneratedModuleMaps-iphonesimulator" 24 secp_headers="$XCODE_SOURCE_PACKAGES/checkouts/swift-secp256k1/Sources/libsecp256k1/include" 25 ffi_headers="$repo_root/Tera/Frameworks/TeraFFI.xcframework/ios-arm64-simulator/Headers" 26 sdk=$(xcrun --sdk iphonesimulator --show-sdk-path) 27 28 rm -rf "$work_dir" 29 mkdir -p "$symbol_dir" 30 xcrun swift-symbolgraph-extract \ 31 -module-name TeraApp \ 32 -target arm64-apple-ios18.0-simulator \ 33 -sdk "$sdk" \ 34 -I "$products" \ 35 -I "$ffi_headers" \ 36 -F "$products" \ 37 -Xcc "-fmodule-map-file=$generated_module_maps/libsecp256k1.modulemap" \ 38 -Xcc "-I$secp_headers" \ 39 -minimum-access-level public \ 40 -skip-inherited-docs \ 41 -skip-synthesized-members \ 42 -output-dir "$symbol_dir" 43 44 jq -cS \ 45 '{schema:"radroots.swift-api-snapshot.v1",module:.module,symbols:(.symbols | map({kind:.kind.identifier,precise:.identifier.precise,path:.pathComponents,access:.accessLevel,declaration:.declarationFragments}) | sort_by(.precise)),relationships:(.relationships | map({kind,source,target}) | sort_by(.kind,.source,.target))}' \ 46 "$symbol_dir/TeraApp.symbols.json" > "$rendered" 47 48 if [[ "$operation" == write ]]; then 49 mkdir -p "$(dirname -- "$snapshot")" 50 cp "$rendered" "$snapshot" 51 else 52 if [[ ! -f "$snapshot" ]]; then 53 echo "error: missing public API snapshot; run 'make api-snapshot-write'" >&2 54 exit 1 55 fi 56 cmp "$rendered" "$snapshot" 57 fi 58 59 echo "TeraApp public API snapshot $operation succeeded"