field_ios

In-the-field app for Radroots on iOS
git clone https://radroots.dev/git/field_ios.git
Log | Files | Refs | README | LICENSE

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"