Skip to content

Commit 3441e23

Browse files
committed
Fix xcframework structure
1 parent eba5018 commit 3441e23

1 file changed

Lines changed: 50 additions & 20 deletions

File tree

prepare_release.sh

Lines changed: 50 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -179,51 +179,81 @@ create_framework() {
179179
local platform=$1
180180
local arch=$2
181181
local install_dir="${workdir}/install-${platform}-${arch}"
182-
local framework_dir="${workdir}/frameworks/BloomFilter-${platform}-${arch}.framework"
182+
local framework_dir="${workdir}/frameworks/${platform}-${arch}/BloomFilter.framework"
183183
local framework_name="BloomFilter"
184-
local framework_binary_name="BloomFilter-${platform}-${arch}"
185184

186185
printf '%s' " * Creating framework for ${platform} ${arch} ... "
187186

188187
mkdir -p "$framework_dir"
189188

190-
# Create framework structure
191-
mkdir -p "$framework_dir/Headers"
192-
mkdir -p "$framework_dir/Modules"
193-
194-
# Copy library (binary name should match framework directory name without .framework extension)
195-
cp "$install_dir/libBloomFilter.a" "$framework_dir/$framework_binary_name"
196-
197-
# Copy headers
198-
local abs_cwd="$(cd "$cwd" && pwd)"
199-
cp "$abs_cwd/src/BloomFilter.hpp" "$framework_dir/Headers/"
189+
# Create framework structure based on platform
190+
if [[ "$platform" == "macOS" ]]; then
191+
# macOS uses deep bundle structure
192+
mkdir -p "$framework_dir/Versions/A/Headers"
193+
mkdir -p "$framework_dir/Versions/A/Modules"
194+
mkdir -p "$framework_dir/Versions/A/Resources"
195+
196+
# Create symlinks for deep bundle structure
197+
ln -sf "A" "$framework_dir/Versions/Current"
198+
ln -sf "Versions/Current/Headers" "$framework_dir/Headers"
199+
ln -sf "Versions/Current/Modules" "$framework_dir/Modules"
200+
ln -sf "Versions/Current/Resources" "$framework_dir/Resources"
201+
ln -sf "Versions/Current/$framework_name" "$framework_dir/$framework_name"
202+
203+
# Copy library
204+
cp "$install_dir/libBloomFilter.a" "$framework_dir/Versions/A/$framework_name"
205+
206+
# Copy headers
207+
local abs_cwd="$(cd "$cwd" && pwd)"
208+
cp "$abs_cwd/src/BloomFilter.hpp" "$framework_dir/Versions/A/Headers/"
209+
else
210+
# iOS uses shallow bundle structure
211+
mkdir -p "$framework_dir/Headers"
212+
mkdir -p "$framework_dir/Modules"
213+
214+
# Copy library
215+
cp "$install_dir/libBloomFilter.a" "$framework_dir/$framework_name"
216+
217+
# Copy headers
218+
local abs_cwd="$(cd "$cwd" && pwd)"
219+
cp "$abs_cwd/src/BloomFilter.hpp" "$framework_dir/Headers/"
220+
fi
200221

201222
# Create Info.plist with platform-specific settings
202-
local min_os_version supported_platforms
223+
local min_os_version supported_platforms info_plist_path headers_path modules_path
203224
case "$platform" in
204225
"macOS")
205226
min_os_version="10.15"
206227
supported_platforms="<string>MacOSX</string>"
228+
info_plist_path="$framework_dir/Versions/A/Resources/Info.plist"
229+
headers_path="$framework_dir/Versions/A/Headers"
230+
modules_path="$framework_dir/Versions/A/Modules"
207231
;;
208232
"iOS")
209233
min_os_version="14.0"
210234
supported_platforms="<string>iPhoneOS</string>"
235+
info_plist_path="$framework_dir/Info.plist"
236+
headers_path="$framework_dir/Headers"
237+
modules_path="$framework_dir/Modules"
211238
;;
212239
"iOS-Simulator")
213240
min_os_version="14.0"
214241
supported_platforms="<string>iPhoneSimulator</string>"
242+
info_plist_path="$framework_dir/Info.plist"
243+
headers_path="$framework_dir/Headers"
244+
modules_path="$framework_dir/Modules"
215245
;;
216246
esac
217247

218-
cat > "$framework_dir/Info.plist" << EOF
248+
cat > "$info_plist_path" << EOF
219249
<?xml version="1.0" encoding="UTF-8"?>
220250
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
221251
<plist version="1.0">
222252
<dict>
223253
<key>CFBundleDevelopmentRegion</key>
224254
<string>en</string>
225255
<key>CFBundleExecutable</key>
226-
<string>$framework_binary_name</string>
256+
<string>$framework_name</string>
227257
<key>CFBundleIdentifier</key>
228258
<string>com.duckduckgo.BloomFilter</string>
229259
<key>CFBundleInfoDictionaryVersion</key>
@@ -249,7 +279,7 @@ create_framework() {
249279
EOF
250280

251281
# Create an umbrella header for better compatibility
252-
cat > "$framework_dir/Headers/BloomFilter.h" << EOF
282+
cat > "$headers_path/BloomFilter.h" << EOF
253283
#ifndef BLOOMFILTER_H
254284
#define BLOOMFILTER_H
255285
@@ -259,7 +289,7 @@ EOF
259289
EOF
260290

261291
# Create module.modulemap
262-
cat > "$framework_dir/Modules/module.modulemap" << EOF
292+
cat > "$modules_path/module.modulemap" << EOF
263293
framework module $framework_name {
264294
umbrella header "BloomFilter.h"
265295
export *
@@ -336,9 +366,9 @@ build_xcframework() {
336366

337367
# Include all platform frameworks
338368
xcodebuild -create-xcframework \
339-
-framework "${workdir}/frameworks/BloomFilter-macOS-universal.framework" \
340-
-framework "${workdir}/frameworks/BloomFilter-iOS-arm64.framework" \
341-
-framework "${workdir}/frameworks/BloomFilter-iOS-Simulator-universal.framework" \
369+
-framework "${workdir}/frameworks/macOS-universal/BloomFilter.framework" \
370+
-framework "${workdir}/frameworks/iOS-arm64/BloomFilter.framework" \
371+
-framework "${workdir}/frameworks/iOS-Simulator-universal/BloomFilter.framework" \
342372
-output "$xcframework" >/dev/null 2>&1
343373
echo ""
344374

0 commit comments

Comments
 (0)