3
3
4
4
# Adapted from https://github.com/vlcn-io/cr-sqlite/blob/main/core/all-ios-loadable.sh
5
5
6
-
7
6
BUILD_DIR=./build
8
- DIST_PACKAGE_DIR=./dist
7
+ TARGETS=(
8
+ # iOS and simulator
9
+ aarch64-apple-ios
10
+ aarch64-apple-ios-sim
11
+ x86_64-apple-ios
9
12
10
- function createXcframework() {
11
- plist=$( cat << EOF
13
+ # macOS
14
+ aarch64-apple-darwin
15
+ x86_64-apple-darwin
16
+
17
+ # watchOS and simulator
18
+ aarch64-apple-watchos
19
+ aarch64-apple-watchos-sim
20
+ x86_64-apple-watchos-sim
21
+ arm64_32-apple-watchos
22
+ )
23
+ VERSION=0.4.0
24
+
25
+ function generatePlist() {
26
+ min_os_version=0
27
+ additional_keys=" "
28
+ # We support versions 11.0 or later for iOS and macOS. For watchOS, we need 9.0 or later.
29
+ case $1 in
30
+ * " watchos" * )
31
+ additional_keys=$( cat << EOF
32
+ <key>CFBundleSupportedPlatforms</key>
33
+ <array>
34
+ <string>WatchOS</string>
35
+ </array>
36
+ <key>UIDeviceFamily</key>
37
+ <array>
38
+ <integer>4</integer>
39
+ </array>
40
+ EOF
41
+ )
42
+ min_os_version=" 9.0" ;;
43
+ * )
44
+ min_os_version=" 11.0" ;;
45
+ esac
46
+
47
+ cat << EOF
12
48
<?xml version="1.0" encoding="UTF-8"?>
13
49
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
14
50
<plist version="1.0">
@@ -26,34 +62,41 @@ function createXcframework() {
26
62
<key>CFBundleSignature</key>
27
63
<string>????</string>
28
64
<key>MinimumOSVersion</key>
29
- <string>11.0 </string>
65
+ <string>$min_os_version </string>
30
66
<key>CFBundleVersion</key>
31
- <string>0.4.0 </string>
67
+ <string>$VERSION </string>
32
68
<key>CFBundleShortVersionString</key>
33
- <string>0.4.0</string>
69
+ <string>$VERSION </string>
70
+ $additional_keys
34
71
</dict>
35
72
</plist>
36
73
EOF
37
- )
74
+ }
75
+
76
+ function createXcframework() {
77
+ ios_plist=$( generatePlist " ios" )
78
+ macos_plist=$( generatePlist " macos" )
79
+ watchos_plist=$( generatePlist " watchos" )
80
+
38
81
echo " ===================== create ios device framework ====================="
39
82
mkdir -p " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework"
40
- echo " ${plist } " > " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework/Info.plist"
83
+ echo " ${ios_plist } " > " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework/Info.plist"
41
84
cp -f " ./target/aarch64-apple-ios/release_apple/libpowersync.dylib" " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework/powersync-sqlite-core"
42
85
install_name_tool -id " @rpath/powersync-sqlite-core.framework/powersync-sqlite-core" " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework/powersync-sqlite-core"
43
86
# Generate dSYM for iOS Device
44
87
dsymutil " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework/powersync-sqlite-core" -o " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework.dSYM"
45
88
46
89
echo " ===================== create ios simulator framework ====================="
47
90
mkdir -p " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework"
48
- echo " ${plist } " > " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework/Info.plist"
91
+ echo " ${ios_plist } " > " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework/Info.plist"
49
92
lipo ./target/aarch64-apple-ios-sim/release_apple/libpowersync.dylib ./target/x86_64-apple-ios/release_apple/libpowersync.dylib -create -output " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework/powersync-sqlite-core"
50
93
install_name_tool -id " @rpath/powersync-sqlite-core.framework/powersync-sqlite-core" " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework/powersync-sqlite-core"
51
94
# Generate dSYM for iOS Simulator
52
95
dsymutil " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework/powersync-sqlite-core" -o " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework.dSYM"
53
96
54
97
echo " ===================== create macos framework ====================="
55
98
mkdir -p " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/Resources"
56
- echo " ${plist } " > " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/Resources/Info.plist"
99
+ echo " ${ios_plist } " > " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/Resources/Info.plist"
57
100
lipo ./target/x86_64-apple-darwin/release_apple/libpowersync.dylib ./target/aarch64-apple-darwin/release_apple/libpowersync.dylib -create -output " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/powersync-sqlite-core"
58
101
install_name_tool -id " @rpath/powersync-sqlite-core.framework/powersync-sqlite-core" " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/powersync-sqlite-core"
59
102
ln -sf A " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/Current"
62
105
# Generate dSYM for macOS
63
106
dsymutil " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework/Versions/A/powersync-sqlite-core" -o " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework.dSYM"
64
107
108
+ echo " ===================== create watchos device framework ====================="
109
+ mkdir -p " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/Versions/A/Resources"
110
+ echo " ${watchos_plist} " > " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/Versions/A/Resources/Info.plist"
111
+ lipo ./target/aarch64-apple-watchos/release_apple/libpowersync.a ./target/arm64_32-apple-watchos/release_apple/libpowersync.a -create -output " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/Versions/A/powersync-sqlite-core"
112
+ # install_name_tool isn't necessary, we use a statically-linked library
113
+ ln -sf A " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/Versions/Current"
114
+ ln -sf Versions/Current/powersync-sqlite-core " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/powersync-sqlite-core"
115
+ ln -sf Versions/Current/Resources " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework/Resources"
116
+
117
+ echo " ===================== create watchos simulator framework ====================="
118
+ mkdir -p " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/Versions/A/Resources"
119
+ echo " ${watchos_plist} " > " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/Versions/A/Resources/Info.plist"
120
+ lipo ./target/aarch64-apple-watchos-sim/release_apple/libpowersync.a ./target/x86_64-apple-watchos-sim/release_apple/libpowersync.a -create -output " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/Versions/A/powersync-sqlite-core"
121
+ # install_name_tool isn't necessary, we use a statically-linked library
122
+ ln -sf A " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/Versions/Current"
123
+ ln -sf Versions/Current/powersync-sqlite-core " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/powersync-sqlite-core"
124
+ ln -sf Versions/Current/Resources " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework/Resources"
125
+
65
126
echo " ===================== create xcframework ====================="
66
127
rm -rf " ${BUILD_DIR} /powersync-sqlite-core.xcframework"
67
- # "-debug-symbols" requires the absolute path
128
+
68
129
xcodebuild -create-xcframework \
69
130
-framework " ${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework" \
70
131
-debug-symbols " $( pwd -P) /${BUILD_DIR} /ios-arm64/powersync-sqlite-core.framework.dSYM" \
71
132
-framework " ${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework" \
72
133
-debug-symbols " $( pwd -P) /${BUILD_DIR} /ios-arm64_x86_64-simulator/powersync-sqlite-core.framework.dSYM" \
73
134
-framework " ${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework" \
74
135
-debug-symbols " $( pwd -P) /${BUILD_DIR} /macos-arm64_x86_64/powersync-sqlite-core.framework.dSYM" \
75
- -output " ${BUILD_DIR} /powersync-sqlite-core.xcframework" \
136
+ -framework " ${BUILD_DIR} /watchos-arm64_arm64_32_armv7k/powersync-sqlite-core.framework" \
137
+ -framework " ${BUILD_DIR} /watchos-arm64_x86_64-simulator/powersync-sqlite-core.framework" \
138
+ -output " ${BUILD_DIR} /powersync-sqlite-core.xcframework"
76
139
77
140
cp -Rf " ${BUILD_DIR} /powersync-sqlite-core.xcframework" " powersync-sqlite-core.xcframework"
78
141
zip -r --symlinks powersync-sqlite-core.xcframework.zip powersync-sqlite-core.xcframework LICENSE README.md
84
147
85
148
rm -rf powersync-sqlite-core.xcframework
86
149
87
- # iOS
88
- cargo build -p powersync_loadable --profile release_apple --target aarch64-apple-ios -Zbuild-std
89
- # Simulator
90
- cargo build -p powersync_loadable --profile release_apple --target aarch64-apple-ios-sim -Zbuild-std
91
- cargo build -p powersync_loadable --profile release_apple --target x86_64-apple-ios -Zbuild-std
92
- # macOS
93
- cargo build -p powersync_loadable --profile release_apple --target aarch64-apple-darwin -Zbuild-std
94
- cargo build -p powersync_loadable --profile release_apple --target x86_64-apple-darwin -Zbuild-std
150
+ for TARGET in ${TARGETS[@]} ; do
151
+ echo " Building PowerSync loadable extension for $TARGET "
152
+
153
+ if [[ $TARGET == * " watchos" * ]]; then
154
+ cargo build \
155
+ -p powersync_static \
156
+ --profile release_apple \
157
+ --target $TARGET \
158
+ -Zbuild-std
159
+ else
160
+ cargo build -p powersync_loadable --profile release_apple --target $TARGET -Zbuild-std
161
+ fi
162
+ done
95
163
96
164
createXcframework
0 commit comments