Skip to content

Commit 3a9b232

Browse files
committed
fix(swift): use binary target and versioned macOS framework for Xcode 26 compatibility
1 parent ac6b545 commit 3a9b232

7 files changed

Lines changed: 55 additions & 95 deletions

File tree

.github/workflows/main.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -369,6 +369,22 @@ jobs:
369369
fi
370370
done
371371
372+
- name: update Package.swift checksum and version
373+
run: |
374+
VERSION=$(make version)
375+
ZIP="cloudsync-apple-xcframework-${VERSION}.zip"
376+
if [ -f "$ZIP" ]; then
377+
CHECKSUM=$(swift package compute-checksum "$ZIP")
378+
URL="https://github.com/sqliteai/sqlite-sync/releases/download/${VERSION}/${ZIP}"
379+
sed -i "s|url: \".*cloudsync-apple-xcframework.*\"|url: \"${URL}\"|" Package.swift
380+
sed -i "s|checksum: \".*\"|checksum: \"${CHECKSUM}\"|" Package.swift
381+
git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
382+
git config --global user.name "$GITHUB_ACTOR"
383+
git add Package.swift
384+
git commit -m "Update Package.swift checksum for ${VERSION} [skip ci]" || true
385+
git push origin main || true
386+
fi
387+
372388
- name: release tag version from cloudsync.h
373389
id: tag
374390
run: |

Makefile

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,7 @@ endef
384384
LIB_NAMES = ios.dylib ios-sim.dylib macos.dylib
385385
FMWK_NAMES = ios-arm64 ios-arm64_x86_64-simulator macos-arm64_x86_64
386386
$(DIST_DIR)/%.xcframework: $(LIB_NAMES)
387-
@$(foreach i,1 2 3,\
387+
@$(foreach i,1 2,\
388388
lib=$(word $(i),$(LIB_NAMES)); \
389389
fmwk=$(word $(i),$(FMWK_NAMES)); \
390390
mkdir -p $(DIST_DIR)/$$fmwk/CloudSync.framework/Headers; \
@@ -395,6 +395,21 @@ $(DIST_DIR)/%.xcframework: $(LIB_NAMES)
395395
mv $(DIST_DIR)/$$lib $(DIST_DIR)/$$fmwk/CloudSync.framework/CloudSync; \
396396
install_name_tool -id "@rpath/CloudSync.framework/CloudSync" $(DIST_DIR)/$$fmwk/CloudSync.framework/CloudSync; \
397397
)
398+
@lib=$(word 3,$(LIB_NAMES)); \
399+
fmwk=$(word 3,$(FMWK_NAMES)); \
400+
mkdir -p $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Headers; \
401+
mkdir -p $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Modules; \
402+
mkdir -p $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Resources; \
403+
cp src/cloudsync.h $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Headers/CloudSync.h; \
404+
printf "$(PLIST)" > $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Resources/Info.plist; \
405+
printf "$(MODULEMAP)" > $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/Modules/module.modulemap; \
406+
mv $(DIST_DIR)/$$lib $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/CloudSync; \
407+
install_name_tool -id "@rpath/CloudSync.framework/CloudSync" $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions/A/CloudSync; \
408+
cd $(DIST_DIR)/$$fmwk/CloudSync.framework/Versions && ln -sf A Current; \
409+
cd $(DIST_DIR)/$$fmwk/CloudSync.framework && ln -sf Versions/Current/CloudSync CloudSync; \
410+
cd $(DIST_DIR)/$$fmwk/CloudSync.framework && ln -sf Versions/Current/Headers Headers; \
411+
cd $(DIST_DIR)/$$fmwk/CloudSync.framework && ln -sf Versions/Current/Modules Modules; \
412+
cd $(DIST_DIR)/$$fmwk/CloudSync.framework && ln -sf Versions/Current/Resources Resources;
398413
xcodebuild -create-xcframework $(foreach fmwk,$(FMWK_NAMES),-framework $(DIST_DIR)/$(fmwk)/CloudSync.framework) -output $@
399414
rm -rf $(foreach fmwk,$(FMWK_NAMES),$(DIST_DIR)/$(fmwk))
400415

Package.swift

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,20 @@ let package = Package(
77
name: "CloudSync",
88
platforms: [.macOS(.v11), .iOS(.v11)],
99
products: [
10-
// Products can be used to vend plugins, making them visible to other packages.
11-
.plugin(
12-
name: "CloudSyncPlugin",
13-
targets: ["CloudSyncPlugin"]),
1410
.library(
1511
name: "CloudSync",
1612
targets: ["CloudSync"])
1713
],
1814
targets: [
19-
// Build tool plugin that invokes the Makefile
20-
.plugin(
21-
name: "CloudSyncPlugin",
22-
capability: .buildTool(),
23-
path: "packages/swift/plugin"
15+
.binaryTarget(
16+
name: "CloudSyncBinary",
17+
url: "https://github.com/sqliteai/sqlite-sync/releases/download/1.0.0/cloudsync-apple-xcframework-1.0.0.zip",
18+
checksum: "024b30a6e53e726344e16d83b9583b6524d30b24eac4c0b7d4704f36d84e24f8"
2419
),
25-
// CloudSync library target
2620
.target(
2721
name: "CloudSync",
28-
dependencies: [],
29-
path: "packages/swift/extension",
30-
plugins: ["CloudSyncPlugin"]
22+
dependencies: ["CloudSyncBinary"],
23+
path: "packages/swift"
3124
),
3225
]
33-
)
26+
)

packages/swift/CloudSync.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// CloudSync.swift
2+
// Provides the path to the CloudSync SQLite extension for use with sqlite3_load_extension.
3+
4+
import Foundation
5+
6+
public struct CloudSync {
7+
/// Returns the absolute path to the CloudSync dylib for use with sqlite3_load_extension.
8+
public static var path: String {
9+
#if os(macOS)
10+
return Bundle.main.bundlePath + "/Contents/Frameworks/CloudSync.framework/CloudSync"
11+
#else
12+
return Bundle.main.bundlePath + "/Frameworks/CloudSync.framework/CloudSync"
13+
#endif
14+
}
15+
}

packages/swift/extension/CloudSync.swift

Lines changed: 0 additions & 19 deletions
This file was deleted.

packages/swift/plugin/CloudSync.swift

Lines changed: 0 additions & 60 deletions
This file was deleted.

src/cloudsync.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
extern "C" {
1919
#endif
2020

21-
#define CLOUDSYNC_VERSION "1.0.0"
21+
#define CLOUDSYNC_VERSION "1.0.1"
2222
#define CLOUDSYNC_MAX_TABLENAME_LEN 512
2323

2424
#define CLOUDSYNC_VALUE_NOTSET -1

0 commit comments

Comments
 (0)