mirror of
https://github.com/EthanShoeDev/fressh.git
synced 2026-01-12 23:02:49 +00:00
76 lines
3.0 KiB
Bash
Executable File
76 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
|
|
set -e
|
|
set -u
|
|
|
|
# NOTE: You MUST run this every time you make changes to the core. Unfortunately, calling this from Xcode directly
|
|
# does not work so well.
|
|
|
|
# In release mode, we create a ZIP archive of the xcframework and update Package.swift with the computed checksum.
|
|
# This is only needed when cutting a new release, not for local development.
|
|
release=false
|
|
|
|
for arg in "$@"
|
|
do
|
|
case $arg in
|
|
--release)
|
|
release=true
|
|
shift # Remove --release from processing
|
|
;;
|
|
*)
|
|
shift # Ignore other argument from processing
|
|
;;
|
|
esac
|
|
done
|
|
|
|
|
|
# Potential optimizations for the future:
|
|
#
|
|
# * Only build one simulator arch for local development (we build both since many still use Intel Macs)
|
|
# * Option to do debug builds instead for local development
|
|
fat_simulator_lib_dir="target/ios-simulator-fat/release"
|
|
|
|
generate_ffi() {
|
|
echo "Generating framework module mapping and FFI bindings"
|
|
# NOTE: Convention requires the modulemap be named module.modulemap
|
|
cargo run -p uniffi-bindgen-swift -- target/aarch64-apple-ios/release/lib$1.a target/uniffi-xcframework-staging --swift-sources --headers --modulemap --module-name $1FFI --modulemap-filename module.modulemap
|
|
mkdir -p ../apple/Sources/UniFFI/
|
|
mv target/uniffi-xcframework-staging/*.swift ../apple/Sources/UniFFI/
|
|
mv target/uniffi-xcframework-staging/module.modulemap target/uniffi-xcframework-staging/module.modulemap
|
|
}
|
|
|
|
create_fat_simulator_lib() {
|
|
echo "Creating a fat library for x86_64 and aarch64 simulators"
|
|
mkdir -p $fat_simulator_lib_dir
|
|
lipo -create target/x86_64-apple-ios/release/lib$1.a target/aarch64-apple-ios-sim/release/lib$1.a -output $fat_simulator_lib_dir/lib$1.a
|
|
}
|
|
|
|
build_xcframework() {
|
|
# Builds an XCFramework
|
|
echo "Generating XCFramework"
|
|
rm -rf target/ios # Delete the output folder so we can regenerate it
|
|
xcodebuild -create-xcframework \
|
|
-library target/aarch64-apple-ios/release/lib$1.a -headers target/uniffi-xcframework-staging \
|
|
-library target/ios-simulator-fat/release/lib$1.a -headers target/uniffi-xcframework-staging \
|
|
-output target/ios/lib$1-rs.xcframework
|
|
|
|
if $release; then
|
|
echo "Building xcframework archive"
|
|
ditto -c -k --sequesterRsrc --keepParent target/ios/lib$1-rs.xcframework target/ios/lib$1-rs.xcframework.zip
|
|
checksum=$(swift package compute-checksum target/ios/lib$1-rs.xcframework.zip)
|
|
version=$(cargo metadata --format-version 1 | jq -r --arg pkg_name "$1" '.packages[] | select(.name==$pkg_name) .version')
|
|
sed -i "" -E "s/(let releaseTag = \")[^\"]+(\")/\1$version\2/g" ../Package.swift
|
|
sed -i "" -E "s/(let releaseChecksum = \")[^\"]+(\")/\1$checksum\2/g" ../Package.swift
|
|
fi
|
|
}
|
|
|
|
basename=uniffi-russh
|
|
|
|
cargo build -p $basename --lib --release --target x86_64-apple-ios
|
|
cargo build -p $basename --lib --release --target aarch64-apple-ios-sim
|
|
cargo build -p $basename --lib --release --target aarch64-apple-ios
|
|
|
|
generate_ffi $basename
|
|
create_fat_simulator_lib $basename
|
|
build_xcframework $basename
|