@@ -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() {
249279EOF
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
259289EOF
260290
261291 # Create module.modulemap
262- cat > " $framework_dir /Modules /module.modulemap" << EOF
292+ cat > " $modules_path /module.modulemap" << EOF
263293framework 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