iOS TestFlight: patch LibTorch Info.plist to match binary LC_BUILD_VERSION

LibTorch.xcframework ships with each slice's Info.plist claiming
MinimumOSVersion=12.0, but the Mach-O LC_BUILD_VERSION inside the
binaries actually requires 13.0 (device) and 14.0 (simulator). Apple's
validator catches the lie and rejects TestFlight uploads with ITMS-90208
("LibTorch.framework does not support the minimum OS Version specified
in the Info.plist") regardless of the app's deployment target.

Revert the previous 15.0 deployment-target bump (which was based on the
wrong hypothesis) back to 13.0 — that's actually what LibTorch supports.
Add a workflow step that plutil-rewrites both slice Info.plists to match
the value their binary actually requires. Bump build number 1.0.0+2 ->
1.0.0+3 for the re-upload.
This commit is contained in:
jwinterm
2026-06-02 13:39:30 -04:00
parent 52fd1d784f
commit ac294874bf
5 changed files with 28 additions and 18 deletions
+19 -9
View File
@@ -144,15 +144,25 @@ jobs:
tar -xzf torch_dart.tar.gz -C torch_dart
rm torch_dart.tar.gz
popd
# Diagnostic: print LibTorch.xcframework's required min iOS so we
# know whether the app's IPHONEOS_DEPLOYMENT_TARGET in pbxproj is
# high enough. Apple's TestFlight ITMS-90208 fires when the app
# claims to support an older iOS than this framework does.
LIBTORCH_PLIST=$(find scripts/torch_dart -path '*LibTorch.xcframework/*' -name Info.plist 2>/dev/null | head -1)
if [[ -n "$LIBTORCH_PLIST" ]]; then
echo "LibTorch xcframework Info.plist: $LIBTORCH_PLIST"
plutil -p "$LIBTORCH_PLIST" 2>/dev/null | grep -E "MinimumOSVersion|SupportedPlatform|SupportedArchitectures" || true
fi
# LibTorch.xcframework ships with a lie: each slice's Info.plist
# claims MinimumOSVersion=12.0, but the Mach-O LC_BUILD_VERSION
# in the binaries says 13.0 (device) and 14.0 (simulator).
# Apple's TestFlight validator catches this mismatch and rejects
# the upload with ITMS-90208. Patch the Info.plists to match
# the actual binary build versions.
DEVICE_PLIST=scripts/torch_dart/ios/LibTorch.xcframework/ios-arm64/LibTorch.framework/Info.plist
SIM_PLIST=scripts/torch_dart/ios/LibTorch.xcframework/ios-arm64-simulator/LibTorch.framework/Info.plist
for entry in "$DEVICE_PLIST:13.0" "$SIM_PLIST:14.0"; do
plist="${entry%:*}"
min="${entry#*:}"
if [[ -f "$plist" ]]; then
plutil -replace MinimumOSVersion -string "$min" "$plist"
echo "patched $plist -> MinimumOSVersion $min"
plutil -p "$plist" | grep -E "MinimumOSVersion|CFBundleName" || true
else
echo "WARNING: $plist not found"
fi
done
- name: Fetch prebuilt reown_flutter
run: |