Skip to content

Commit 4b134af

Browse files
committed
fix(ios): inject CFBundleShortVersionString into xcframework slices for App Store validation
1 parent 1a70caf commit 4b134af

2 files changed

Lines changed: 80 additions & 3 deletions

File tree

sdk/runanywhere-commons/scripts/build-ios.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,44 @@ create_macos_versioned_framework() {
329329
codesign --force --sign - "${FLAT}/Versions/A/${FRAMEWORK_NAME}" 2>/dev/null || true
330330
}
331331

332+
# =============================================================================
333+
# Inject Info.plist into XCFramework slices for App Store validation
334+
# Library-format xcframeworks don't carry Info.plist automatically, so Xcode
335+
# generates a minimal one at embed time that may lack CFBundleShortVersionString.
336+
# =============================================================================
337+
338+
inject_xcframework_info_plist() {
339+
local XCFW_PATH=$1
340+
local FRAMEWORK_NAME=$2
341+
342+
for slice_dir in "${XCFW_PATH}"/*/; do
343+
[[ ! -d "$slice_dir" ]] && continue
344+
local slice_name
345+
slice_name=$(basename "$slice_dir")
346+
local min_os_key="MinimumOSVersion"
347+
local min_os_val="${IOS_DEPLOYMENT_TARGET}"
348+
if [[ "$slice_name" == *"macos"* ]]; then
349+
min_os_key="LSMinimumSystemVersion"
350+
min_os_val="14.0"
351+
fi
352+
cat > "${slice_dir}Info.plist" << EOF
353+
<?xml version="1.0" encoding="UTF-8"?>
354+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
355+
<plist version="1.0">
356+
<dict>
357+
<key>CFBundleExecutable</key><string>${FRAMEWORK_NAME}</string>
358+
<key>CFBundleIdentifier</key><string>ai.runanywhere.${FRAMEWORK_NAME}</string>
359+
<key>CFBundlePackageType</key><string>FMWK</string>
360+
<key>CFBundleShortVersionString</key><string>${VERSION}</string>
361+
<key>CFBundleVersion</key><string>${VERSION}</string>
362+
<key>${min_os_key}</key><string>${min_os_val}</string>
363+
</dict>
364+
</plist>
365+
EOF
366+
done
367+
log_info "Injected Info.plist into ${FRAMEWORK_NAME}.xcframework slices"
368+
}
369+
332370
# =============================================================================
333371
# Create XCFramework
334372
# =============================================================================
@@ -459,6 +497,7 @@ EOF
459497
fi
460498

461499
xcodebuild -create-xcframework "${XCFW_ARGS[@]}" -output "${XCFW_PATH}"
500+
inject_xcframework_info_plist "${XCFW_PATH}" "${FRAMEWORK_NAME}"
462501

463502
log_info "Created: ${XCFW_PATH}"
464503
echo " Size: $(du -sh "${XCFW_PATH}" | cut -f1)"
@@ -653,6 +692,7 @@ EOF
653692
fi
654693

655694
xcodebuild -create-xcframework "${XCFW_ARGS[@]}" -output "${XCFW_PATH}"
695+
inject_xcframework_info_plist "${XCFW_PATH}" "${FRAMEWORK_NAME}"
656696

657697
log_info "Created: ${XCFW_PATH}"
658698
echo " Size: $(du -sh "${XCFW_PATH}" | cut -f1)"

sdk/runanywhere-swift/scripts/create-onnxruntime-xcframework.sh

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,22 @@ if [[ ! -d "${IOS_ONNX}" ]]; then
5858
log_error "iOS ONNX Runtime not found at: ${IOS_ONNX}"
5959
fi
6060

61+
# Read ONNX Runtime version dynamically from the source xcframework's slice Info.plist.
62+
# The xcframework root Info.plist is metadata only; version lives inside each slice's framework.
63+
ONNX_VERSION_IOS=""
64+
for slice_plist in "${IOS_ONNX}"/*/onnxruntime.framework/Info.plist "${IOS_ONNX}"/*/Info.plist; do
65+
[[ -f "$slice_plist" ]] || continue
66+
ver=$(/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "$slice_plist" 2>/dev/null || true)
67+
if [[ -n "$ver" ]]; then
68+
ONNX_VERSION_IOS="$ver"
69+
break
70+
fi
71+
done
72+
if [[ -z "$ONNX_VERSION_IOS" ]]; then
73+
log_error "Could not determine ONNX Runtime version from ${IOS_ONNX}"
74+
fi
75+
log_info "ONNX Runtime version: ${ONNX_VERSION_IOS}"
76+
6177
# Verify macOS ONNX Runtime exists
6278
if [[ ! -d "${MACOS_ONNX}/lib" ]]; then
6379
log_error "macOS ONNX Runtime not found at: ${MACOS_ONNX}/lib\nRun: cd sdk/runanywhere-commons && ./scripts/macos/download-onnx.sh"
@@ -116,6 +132,27 @@ done
116132
IOS_XCFW="${OUTPUT_DIR}/onnxruntime-ios.xcframework"
117133
rm -rf "${IOS_XCFW}"
118134
xcodebuild -create-xcframework "${XCFW_ARGS[@]}" -output "${IOS_XCFW}"
135+
136+
# Inject Info.plist into each slice so Xcode uses it when embedding the framework.
137+
# Library-format xcframeworks don't carry Info.plist automatically, causing
138+
# App Store validation to fail with "missing CFBundleShortVersionString".
139+
for slice_dir in "${IOS_XCFW}"/*/; do
140+
[[ ! -d "$slice_dir" ]] && continue
141+
cat > "${slice_dir}Info.plist" << EOF
142+
<?xml version="1.0" encoding="UTF-8"?>
143+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
144+
<plist version="1.0">
145+
<dict>
146+
<key>CFBundleExecutable</key><string>onnxruntime</string>
147+
<key>CFBundleIdentifier</key><string>com.microsoft.onnxruntime</string>
148+
<key>CFBundlePackageType</key><string>FMWK</string>
149+
<key>CFBundleShortVersionString</key><string>${ONNX_VERSION_IOS}</string>
150+
<key>CFBundleVersion</key><string>${ONNX_VERSION_IOS}</string>
151+
<key>MinimumOSVersion</key><string>17.0</string>
152+
</dict>
153+
</plist>
154+
EOF
155+
done
119156
log_info "Created onnxruntime-ios.xcframework"
120157

121158
# ============================================================================
@@ -170,10 +207,10 @@ cat > "${MACOS_FW}/Versions/A/Resources/Info.plist" << 'EOF'
170207
<plist version="1.0">
171208
<dict>
172209
<key>CFBundleExecutable</key><string>onnxruntime</string>
173-
<key>CFBundleIdentifier</key><string>ai.onnxruntime</string>
210+
<key>CFBundleIdentifier</key><string>com.microsoft.onnxruntime</string>
174211
<key>CFBundlePackageType</key><string>FMWK</string>
175-
<key>CFBundleShortVersionString</key><string>1.17.1</string>
176-
<key>CFBundleVersion</key><string>1.17.1</string>
212+
<key>CFBundleShortVersionString</key><string>${ONNX_VERSION_IOS}</string>
213+
<key>CFBundleVersion</key><string>${ONNX_VERSION_IOS}</string>
177214
<key>LSMinimumSystemVersion</key><string>14.0</string>
178215
</dict>
179216
</plist>

0 commit comments

Comments
 (0)