diff --git a/.gitignore b/.gitignore
index 7a7671d..cf97457 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,4 +8,5 @@ DerivedData/
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
bdkFFI.xcframework.zip
bdkFFI
+libbdkffi.a
bdkFFI.h
diff --git a/Package.swift b/Package.swift
index 1306bab..52cba67 100644
--- a/Package.swift
+++ b/Package.swift
@@ -24,8 +24,8 @@ let package = Package(
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.binaryTarget(
name: "bdkFFI",
- url: "https://github.com/notmandatory/bdk-swift/releases/download/0.1.3/bdkFFI.xcframework.zip",
- checksum: "c0b1e3ea09376b3f316d7d83575e1cd513fc4ad39ef8cf01120a3a1d7757fb97"),
+ url: "https://github.com/notmandatory/bdk-swift/releases/download/0.1.7/bdkFFI.xcframework.zip",
+ checksum: "dc51c5c61b78e06fba45fe7d55978726f6f6bb609c2b369f12f3f2e5c24b9ed5"),
// .binaryTarget(name: "bdkFFI", path: "./bdkFFI.xcframework"),
.target(
name: "BitcoinDevKit",
diff --git a/bdkFFI.xcframework/Info.plist b/bdkFFI.xcframework/Info.plist
index 3b0157a..cda8ded 100644
--- a/bdkFFI.xcframework/Info.plist
+++ b/bdkFFI.xcframework/Info.plist
@@ -6,27 +6,16 @@
LibraryIdentifier
- macos-x86_64
- LibraryPath
- bdkFFI.framework
- SupportedArchitectures
-
- x86_64
-
- SupportedPlatform
- macos
-
-
- LibraryIdentifier
- ios-arm64
+ macos-arm64_x86_64
LibraryPath
bdkFFI.framework
SupportedArchitectures
arm64
+ x86_64
SupportedPlatform
- ios
+ macos
LibraryIdentifier
@@ -43,6 +32,18 @@
SupportedPlatformVariant
simulator
+
+ LibraryIdentifier
+ ios-arm64
+ LibraryPath
+ bdkFFI.framework
+ SupportedArchitectures
+
+ arm64
+
+ SupportedPlatform
+ ios
+
CFBundlePackageType
XFWK
diff --git a/bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h b/bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h
similarity index 100%
rename from bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h
rename to bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Headers/bdkFFI-umbrella.h
diff --git a/bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Modules/module.modulemap b/bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Modules/module.modulemap
similarity index 100%
rename from bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/Modules/module.modulemap
rename to bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/Modules/module.modulemap
diff --git a/build.sh b/build.sh
index c278b29..d238346 100755
--- a/build.sh
+++ b/build.sh
@@ -6,47 +6,64 @@ pushd bdk-ffi
echo "Confirm bdk-ffi rust lib builds"
cargo build --release
-## build bdk-ffi rust libs for apple targets
-echo "Build bdk-ffi libs for apple targets"
+echo "Generate bdk-ffi swift bindings"
+uniffi-bindgen generate src/bdk.udl --no-format --out-dir ../Sources/BitcoinDevKit --language swift
-TARGET_TRIPLES=("x86_64-apple-darwin" "x86_64-apple-ios" "aarch64-apple-ios")
+## build bdk-ffi rust libs for apple targets and add to xcframework
+echo "Build bdk-ffi libs for apple targets and add to xcframework"
+
+TARGET_TRIPLES=("x86_64-apple-darwin" "aarch64-apple-darwin" "x86_64-apple-ios" "aarch64-apple-ios")
+#XCFRAMEWORK_LIBS=""
for TARGET in ${TARGET_TRIPLES[@]}; do
echo "Build bdk-ffi lib for target $TARGET"
cargo build --release --target $TARGET
+ #XCFRAMEWORK_LIBS="$XCFRAMEWORK_LIBS -library target/$TARGET/release/libbdkffi.a"
done
+# special build for M1 ios simulator
+cargo +nightly build --release -Z build-std --target aarch64-apple-ios-sim
-echo "Generate bdk-ffi swift bindings"
-uniffi-bindgen generate src/bdk.udl --no-format --out-dir ../Sources/BitcoinDevKit --language swift
+echo "Create lipo static libs for ios-sim to support M1"
+mkdir -p target/lipo-ios-sim/release
+lipo target/aarch64-apple-ios-sim/release/libbdkffi.a target/x86_64-apple-ios/release/libbdkffi.a -create -output target/lipo-ios-sim/release/libbdkffi.a
+
+echo "Create lipo static libs for macos to support M1"
+mkdir -p target/lipo-macos/release
+lipo target/aarch64-apple-darwin/release/libbdkffi.a target/x86_64-apple-darwin/release/libbdkffi.a -create -output target/lipo-macos/release/libbdkffi.a
+
+#echo "Create xcframework with xcodebuild"
+#xcodebuild -create-xcframework \
+# -library target/lipo-ios-sim/release/libbdkffi.a \
+# -library target/lipo-macos/release/libbdkffi.a \
+# -library target/aarch64-apple-ios/release/libbdkffi.a \
+# -output ../bdkFFI.xcframework
+
popd
# rename bdk.swift bindings to BitcoinDevKit.swift
mv Sources/BitcoinDevKit/bdk.swift Sources/BitcoinDevKit/BitcoinDevKit.swift
-# copy bdkFFI.h to bdkFFI.xcframework platforms
-PLATFORMS=("macos-x86_64" "ios-arm64_x86_64-simulator" "ios-arm64")
-for PLATFORM in ${PLATFORMS[@]}; do
- cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/$PLATFORM/bdkFFI.framework/Headers
+XCFRAMEWORK_LIBS=("ios-arm64" "ios-arm64_x86_64-simulator" "macos-arm64_x86_64")
+for LIB in ${XCFRAMEWORK_LIBS[@]}; do
+ # copy possibly updated header file
+ cp Sources/BitcoinDevKit/bdkFFI.h bdkFFI.xcframework/$LIB/bdkFFI.framework/Headers
done
+echo "Copy libbdkffi.a files to bdkFFI.xcframework/bdkFFI"
+cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI
+cp bdk-ffi/target/lipo-ios-sim/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI
+cp bdk-ffi/target/lipo-macos/release/libbdkffi.a bdkFFI.xcframework/macos-arm64_x86_64/bdkFFI.framework/bdkFFI
+
# remove unneed .h and .modulemap files
rm Sources/BitcoinDevKit/bdkFFI.h
rm Sources/BitcoinDevkit/bdkFFI.modulemap
-# add bdkFFI libs to bdkFFI.xcframework
-
-# macos-x86_64 platform
-cp bdk-ffi/target/x86_64-apple-darwin/release/libbdkffi.a bdkFFI.xcframework/macos-x86_64/bdkFFI.framework/bdkFFI
-
-# ios-arm64 platform
-cp bdk-ffi/target/aarch64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64/bdkFFI.framework/bdkFFI
-
-# ios-arm64_x86_64-simulator, currently x86_64 only (need to make fat binary to add M1)
-cp bdk-ffi/target/x86_64-apple-ios/release/libbdkffi.a bdkFFI.xcframework/ios-arm64_x86_64-simulator/bdkFFI.framework/bdkFFI
-
# TODO add license info
-# remove any existing bdkFFI.xcframework.zip
-rm bdkFFI.xcframework.zip
+if test -f "bdkFFI.xcframework.zip"; then
+ echo "Remove old bdkFFI.xcframework.zip"
+ rm bdkFFI.xcframework.zip
+fi
+
# zip bdkFFI.xcframework directory into a bundle for distribution
zip -9 -r bdkFFI.xcframework.zip bdkFFI.xcframework