Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
126da4f
fix(swift-sdk): use workspace root target dir for dash-spv-ffi build …
lklimek Feb 19, 2026
6b5c2fd
fix(swift-sdk): merge SPV lib into librs_sdk_ffi.a for consistent XCF…
lklimek Feb 19, 2026
ccceb50
chore(swift-sdk): add debug output for SPV symbol investigation
lklimek Feb 19, 2026
43b6d5d
fix(swift-sdk): avoid SIGPIPE in symbol verification under pipefail
lklimek Feb 19, 2026
a4db18d
fix(swift-sdk): fix Option type in C header and suppress libtool dupl…
lklimek Feb 19, 2026
f8c9429
fix(swift-sdk): update Swift SDK for FFINetworks removal in rust-dash…
lklimek Feb 19, 2026
96b3af6
fix(swift-sdk): update SPVClient for new dash_spv_ffi_init_logging si…
lklimek Feb 19, 2026
c426f65
chore(swift-sdk): upgrade cbindgen from 0.27 to 0.29.2
lklimek Feb 19, 2026
e793323
Merge branch 'v3.1-dev' into fix/swift-sdk-missing-spv-symbols
lklimek Feb 19, 2026
10b1d21
fix(swift-sdk): address PR review comments for iOS build and Swift SDK
lklimek Feb 19, 2026
9095c0e
chore: cargo.lock update
lklimek Feb 19, 2026
22fe6a2
fix(swift-sdk): replace deprecated clearSyncState() call with clearSt…
lklimek Feb 19, 2026
7532189
fix(swift-sdk): update SwiftExampleApp to use non-deprecated SDK methods
lklimek Feb 19, 2026
7b7369c
fix(swift-sdk): honour CARGO_TARGET_DIR override for SPV target direc…
lklimek Feb 23, 2026
a2d9d19
fix(swift-sdk): make simulator SPV lib selection strictly architectur…
lklimek Feb 23, 2026
46ac1fa
fix(swift-sdk): clean up temporary fat SPV archive on libtool failure
lklimek Feb 23, 2026
6ca7174
fix(swift-sdk): remove double-free in Wallet.init(xpub:network:)
lklimek Feb 23, 2026
0aa0dd9
fix(swift-sdk): correct misleading log message after clearStorage()
lklimek Feb 23, 2026
e15234e
fix(swift-sdk): reinitialise FFIError before each sequential FFI call
lklimek Feb 23, 2026
090126f
fix(swift-sdk): warn when multi-network wallet overloads silently dro…
lklimek Feb 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 20 additions & 45 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/rs-sdk-ffi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ once_cell = "1.20"
reqwest = { version = "0.12", features = ["json", "rustls-tls-native-roots"] }

[build-dependencies]
cbindgen = "0.27"
cbindgen = "0.29.2"

[profile.release]
lto = "fat" # Enable cross-crate optimization
Expand Down
72 changes: 52 additions & 20 deletions packages/rs-sdk-ffi/build_ios.sh
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,7 @@ fi
# Build dash-spv-ffi from local rust-dashcore for device and simulator
RUST_DASHCORE_PATH="$PROJECT_ROOT/../rust-dashcore"
SPV_CRATE_PATH="$RUST_DASHCORE_PATH/dash-spv-ffi"
SPV_TARGET_DIR="${CARGO_TARGET_DIR:-$RUST_DASHCORE_PATH/target}" # honour override; default to workspace root
if [ -d "$SPV_CRATE_PATH" ]; then
echo -e "${GREEN}Building dash-spv-ffi (local rust-dashcore)${NC}"
pushd "$SPV_CRATE_PATH" >/dev/null
Expand All @@ -343,7 +344,15 @@ if [ -d "$SPV_CRATE_PATH" ]; then
cargo build --lib --target aarch64-apple-ios-sim --release > /tmp/cargo_build_spv_sim_arm.log 2>&1 || { echo -e "${RED}✗ dash-spv-ffi sim (arm64) build failed${NC}"; cat /tmp/cargo_build_spv_sim_arm.log; exit 1; }
cargo build --lib --target x86_64-apple-ios --release > /tmp/cargo_build_spv_sim_x86.log 2>&1 || { echo -e "${RED}✗ dash-spv-ffi sim (x86_64) build failed${NC}"; cat /tmp/cargo_build_spv_sim_x86.log; exit 1; }
fi
elif [ "$BUILD_ARCH" = "x86" ]; then
if [ -n "${RUST_DASHCORE_TOOLCHAIN:-}" ]; then
echo -e "${GREEN}Using toolchain '+${RUST_DASHCORE_TOOLCHAIN}' for sim build (x86_64)${NC}"
cargo +"${RUST_DASHCORE_TOOLCHAIN}" build --lib --target x86_64-apple-ios --release > /tmp/cargo_build_spv_sim_x86.log 2>&1 || { echo -e "${RED}✗ dash-spv-ffi sim (x86_64) build failed${NC}"; cat /tmp/cargo_build_spv_sim_x86.log; exit 1; }
else
cargo build --lib --target x86_64-apple-ios --release > /tmp/cargo_build_spv_sim_x86.log 2>&1 || { echo -e "${RED}✗ dash-spv-ffi sim (x86_64) build failed${NC}"; cat /tmp/cargo_build_spv_sim_x86.log; exit 1; }
fi
else
# arm64-sim only (arm default)
if [ -n "${RUST_DASHCORE_TOOLCHAIN:-}" ]; then
echo -e "${GREEN}Using toolchain '+${RUST_DASHCORE_TOOLCHAIN}' for sim build${NC}"
cargo +"${RUST_DASHCORE_TOOLCHAIN}" build --lib --target aarch64-apple-ios-sim --release > /tmp/cargo_build_spv_sim_arm.log 2>&1 || { echo -e "${RED}✗ dash-spv-ffi sim (arm64) build failed${NC}"; cat /tmp/cargo_build_spv_sim_arm.log; exit 1; }
Expand Down Expand Up @@ -376,13 +385,22 @@ fi
if [ "$BUILD_ARCH" != "x86" ]; then
mkdir -p "$OUTPUT_DIR/device"
cp "$PROJECT_ROOT/target/aarch64-apple-ios/release/librs_sdk_ffi.a" "$OUTPUT_DIR/device/"
# Merge with dash-spv-ffi device lib if available
if [ -f "$SPV_CRATE_PATH/target/aarch64-apple-ios/release/libdash_spv_ffi.a" ]; then
# Merge with dash-spv-ffi device lib if available (overwrite librs_sdk_ffi.a
# so the XCFramework always uses a consistent library name)
if [ -f "$SPV_TARGET_DIR/aarch64-apple-ios/release/libdash_spv_ffi.a" ]; then
echo -e "${GREEN}Merging device libs (rs-sdk-ffi + dash-spv-ffi)${NC}"
libtool -static -o "$OUTPUT_DIR/device/libDashSDKFFI_combined.a" \
LIBTOOL_LOG=$(mktemp)
if ! libtool -static -o "$OUTPUT_DIR/device/librs_sdk_ffi_merged.a" \
"$OUTPUT_DIR/device/librs_sdk_ffi.a" \
"$SPV_CRATE_PATH/target/aarch64-apple-ios/release/libdash_spv_ffi.a"
COMBINED_DEVICE_LIB=1
"$SPV_TARGET_DIR/aarch64-apple-ios/release/libdash_spv_ffi.a" 2>"$LIBTOOL_LOG"; then
cat "$LIBTOOL_LOG" >&2
rm -f "$LIBTOOL_LOG"
exit 1
fi
# Filter out expected duplicate member warnings (shared deps between the two libs)
grep -v "duplicate member name" "$LIBTOOL_LOG" >&2 || true
rm -f "$LIBTOOL_LOG"
mv "$OUTPUT_DIR/device/librs_sdk_ffi_merged.a" "$OUTPUT_DIR/device/librs_sdk_ffi.a"
fi
fi

Expand Down Expand Up @@ -435,30 +453,44 @@ rm -rf "$OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
XCFRAMEWORK_CMD="xcodebuild -create-xcframework"

if [ "$BUILD_ARCH" != "x86" ] && [ -f "$OUTPUT_DIR/device/librs_sdk_ffi.a" ]; then
if [ -n "${COMBINED_DEVICE_LIB:-}" ] && [ -f "$OUTPUT_DIR/device/libDashSDKFFI_combined.a" ]; then
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/device/libDashSDKFFI_combined.a -headers $HEADERS_DIR"
else
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/device/librs_sdk_ffi.a -headers $HEADERS_DIR"
fi
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/device/librs_sdk_ffi.a -headers $HEADERS_DIR"
fi

if [ -f "$OUTPUT_DIR/simulator/librs_sdk_ffi.a" ]; then
# Try to merge with SPV sim lib if it exists
# Try to merge with SPV sim lib if it exists (must match BUILD_ARCH)
SIM_SPV_LIB=""
if [ -f "$SPV_CRATE_PATH/target/aarch64-apple-ios-sim/release/libdash_spv_ffi.a" ]; then
SIM_SPV_LIB="$SPV_CRATE_PATH/target/aarch64-apple-ios-sim/release/libdash_spv_ffi.a"
elif [ -f "$SPV_CRATE_PATH/target/x86_64-apple-ios/release/libdash_spv_ffi.a" ]; then
SIM_SPV_LIB="$SPV_CRATE_PATH/target/x86_64-apple-ios/release/libdash_spv_ffi.a"
SPV_SIM_ARM="$SPV_TARGET_DIR/aarch64-apple-ios-sim/release/libdash_spv_ffi.a"
SPV_SIM_X86="$SPV_TARGET_DIR/x86_64-apple-ios/release/libdash_spv_ffi.a"
if [ "$BUILD_ARCH" = "universal" ] && [ -f "$SPV_SIM_ARM" ] && [ -f "$SPV_SIM_X86" ]; then
# Universal: lipo both SPV sim slices into a fat library before merging
FAT_SPV_SIM="$OUTPUT_DIR/simulator/libdash_spv_ffi_fat.a"
lipo -create "$SPV_SIM_ARM" "$SPV_SIM_X86" -output "$FAT_SPV_SIM"
SIM_SPV_LIB="$FAT_SPV_SIM"
elif [ "$BUILD_ARCH" = "x86" ] && [ -f "$SPV_SIM_X86" ]; then
SIM_SPV_LIB="$SPV_SIM_X86"
elif [ "$BUILD_ARCH" != "x86" ] && [ -f "$SPV_SIM_ARM" ]; then
# arm64 (default) — only pick the arm64 SPV lib when NOT building for x86,
# to prevent merging a mismatched architecture from a stale build.
SIM_SPV_LIB="$SPV_SIM_ARM"
fi
if [ -n "$SIM_SPV_LIB" ]; then
echo -e "${GREEN}Merging simulator libs (rs-sdk-ffi + dash-spv-ffi)${NC}"
libtool -static -o "$OUTPUT_DIR/simulator/libDashSDKFFI_combined.a" \
LIBTOOL_LOG=$(mktemp)
if ! libtool -static -o "$OUTPUT_DIR/simulator/librs_sdk_ffi_merged.a" \
"$OUTPUT_DIR/simulator/librs_sdk_ffi.a" \
"$SIM_SPV_LIB"
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/simulator/libDashSDKFFI_combined.a -headers $HEADERS_DIR"
else
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/simulator/librs_sdk_ffi.a -headers $HEADERS_DIR"
"$SIM_SPV_LIB" 2>"$LIBTOOL_LOG"; then
cat "$LIBTOOL_LOG" >&2
rm -f "$LIBTOOL_LOG" "${FAT_SPV_SIM:-}"
exit 1
fi
# Filter out expected duplicate member warnings (shared deps between the two libs)
grep -v "duplicate member name" "$LIBTOOL_LOG" >&2 || true
rm -f "$LIBTOOL_LOG"
mv "$OUTPUT_DIR/simulator/librs_sdk_ffi_merged.a" "$OUTPUT_DIR/simulator/librs_sdk_ffi.a"
# Clean up temporary fat SPV archive if it was created
rm -f "${FAT_SPV_SIM:-}"
fi
XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -library $OUTPUT_DIR/simulator/librs_sdk_ffi.a -headers $HEADERS_DIR"
fi

XCFRAMEWORK_CMD="$XCFRAMEWORK_CMD -output $OUTPUT_DIR/$FRAMEWORK_NAME.xcframework"
Expand Down
Loading