From 321bf3717badfb4801ca66adc531a46bde291c72 Mon Sep 17 00:00:00 2001 From: Wes Date: Wed, 14 Oct 2026 13:57:33 -0700 Subject: [PATCH] fix(ios): accept Xcode 27 pod targets and DeviceHub Xcode 27 rejects deployment targets below iOS 15, and several pods and their resource bundles still declare 9.0 to 13.0. Raise any pod target below the app's iOS 16.0 minimum to 16.0 in post_install. `just mobile-dev` also failed immediately because Xcode 27 replaced Simulator.app with DeviceHub.app; accept either. Co-authored-by: Carl <32a2e2c9d428ee08902cab75d956da2c1d235a22d4766b0dd4138bf6e2e5db1d@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 Signed-off-by: Wes --- Justfile | 5 +++-- mobile/ios/Podfile | 12 +++++++++++- mobile/ios/Podfile.lock | 4 ++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Justfile b/Justfile index 312ec115b9..2fb1708316 100644 --- a/Justfile +++ b/Justfile @@ -1021,8 +1021,9 @@ mobile-build-android: mobile-dev: #!/usr/bin/env bash set -euo pipefail - if ! pgrep -x Simulator &>/dev/null; then - open -a Simulator + # Xcode 27 replaced Simulator.app with DeviceHub.app. + if ! pgrep -x Simulator &>/dev/null && ! pgrep -x DeviceHub &>/dev/null; then + open -a Simulator 2>/dev/null || open -a DeviceHub sleep 3 fi ./scripts/mobile-worktree-overrides.sh diff --git a/mobile/ios/Podfile b/mobile/ios/Podfile index 901ba5aaa1..3c6e476b8b 100644 --- a/mobile/ios/Podfile +++ b/mobile/ios/Podfile @@ -1,4 +1,5 @@ -platform :ios, '16.0' +ios_deployment_target = '16.0' +platform :ios, ios_deployment_target # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -36,8 +37,17 @@ target 'Runner' do end post_install do |installer| + minimum_ios_version = Gem::Version.new(ios_deployment_target) installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) + # Pods and their resource bundles can retain older podspec deployment + # targets that newer Xcode versions no longer support. + target.build_configurations.each do |config| + deployment_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] + if deployment_target.nil? || Gem::Version.new(deployment_target) < minimum_ios_version + config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = ios_deployment_target + end + end end # Flutter creates plugin symlinks during installation, so load the upstream # helper here rather than requiring an existing Pods install at parse time. diff --git a/mobile/ios/Podfile.lock b/mobile/ios/Podfile.lock index e25ae22ac6..fce4d0c6f1 100644 --- a/mobile/ios/Podfile.lock +++ b/mobile/ios/Podfile.lock @@ -227,6 +227,6 @@ SPEC CHECKSUMS: url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a -PODFILE CHECKSUM: 3aac4aa13c3166f951fe137719268b7dc62b9110 +PODFILE CHECKSUM: 11998d8439eb9f4efd90e244a9209463c423d566 -COCOAPODS: 1.16.2 +COCOAPODS: 1.17.0