From 52fd1d784ff5201d379fbc7c69b293f6f825fa60 Mon Sep 17 00:00:00 2001 From: jwinterm Date: Tue, 2 Jun 2026 12:40:45 -0400 Subject: [PATCH] =?UTF-8?q?iOS:=20bump=20deployment=20target=2012/13=20?= =?UTF-8?q?=E2=86=92=2015=20(Apple=20ITMS-90208=20fix)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit First TestFlight upload was accepted and processed all the way through, then Apple's binary validation kicked back ITMS-90208 Invalid Bundle: The bundle Runner.app/Frameworks/LibTorch.framework does not support the minimum OS Version specified in the Info.plist. torch_dart-v1.0.17 ships a LibTorch.xcframework whose Info.plist declares a higher MinimumOSVersion than our app's 13.0. Apple's notarization-style check rejects an app that claims to run on iOS versions where a bundled framework refuses to load. Bump the four spots iOS deployment target lives: - ios/Podfile (was 13.0) - ios/Flutter/AppFrameworkInfo.plist MinimumOSVersion (was 12.0) - ios/Runner.xcodeproj/project.pbxproj — 6 IPHONEOS_DEPLOYMENT_TARGET entries (mixed 12.0 / 13.0) all → 15.0. iPhone 6s (2015) and newer; very wide 2026 coverage. Also bump build number 1.0.0+1 → 1.0.0+2 in pubspec_description.yaml. Apple rejects re-uploads with the same build number (ITMS-90478), so the next TestFlight upload after this fix needs a fresh +N. Workflow diagnostic step that dumps LibTorch.xcframework's Info.plist MinimumOSVersion now lives in the "Fetch prebuilt torch_dart" step. If 15.0 still isn't enough, the log tells us exactly what to bump to next. --- .github/workflows/build-ios-testflight.yml | 9 +++++++++ ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Podfile | 2 +- ios/Runner.xcodeproj/project.pbxproj | 12 ++++++------ pubspec_description.yaml | 2 +- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-ios-testflight.yml b/.github/workflows/build-ios-testflight.yml index 4178eba8b..9833e99d0 100644 --- a/.github/workflows/build-ios-testflight.yml +++ b/.github/workflows/build-ios-testflight.yml @@ -144,6 +144,15 @@ 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 - name: Fetch prebuilt reown_flutter run: | diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index cae654377..7b1095736 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 12.0 + 15.0 diff --git a/ios/Podfile b/ios/Podfile index cf24cb605..d98512585 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -platform :ios, '13.0' +platform :ios, '15.0' source 'https://github.com/CocoaPods/Specs.git' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 58cc6990a..a96351c68 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -469,7 +469,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -499,7 +499,7 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -568,7 +568,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -618,7 +618,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -650,7 +650,7 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -694,7 +694,7 @@ "$(PROJECT_DIR)", ); INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 13.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/pubspec_description.yaml b/pubspec_description.yaml index 07b224778..24757ad5f 100644 --- a/pubspec_description.yaml +++ b/pubspec_description.yaml @@ -1,6 +1,6 @@ name: hash_wallet description: Hash Bags — a noncustodial multi-currency wallet by Such Software LLC. -version: 1.0.0+1 +version: 1.0.0+2 publish_to: none environment: