From 70d549f929fb7ca11f9ea0b3aab923713cb211fd Mon Sep 17 00:00:00 2001 From: Tom Hicks Date: Sun, 20 Sep 2026 15:04:02 -0700 Subject: [PATCH] =?UTF-8?q?t=5Ffe859d8e:=20Xcode=20project=20settings=20mi?= =?UTF-8?q?gration=20=E2=80=94=20objectVersion=2052=E2=86=9258,=20SWIFT=5F?= =?UTF-8?q?LANGUAGE=5FVERSION=3D6,=20IPHONEOS=5FDEPLOYMENT=5FTARGET=3D15.0?= =?UTF-8?q?,=20upgrade/swift-checks=E2=86=922700?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iOS/MonsterCards.xcodeproj/project.pbxproj | 36 +++++++-------- update-pbxproj.py | 51 ++++++++++++++++++++++ 2 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 update-pbxproj.py diff --git a/iOS/MonsterCards.xcodeproj/project.pbxproj b/iOS/MonsterCards.xcodeproj/project.pbxproj index 78eea58..6b87f23 100644 --- a/iOS/MonsterCards.xcodeproj/project.pbxproj +++ b/iOS/MonsterCards.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 58; objects = { /* Begin PBXBuildFile section */ @@ -512,7 +512,7 @@ E2570FAD25B1AC520055B23B /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1240; + LastSwiftUpdateCheck = 2700; LastUpgradeCheck = 1200; TargetAttributes = { E216E47A261FE76F00FD9262 = { @@ -742,7 +742,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = J793L9LQJ2; INFOPLIST_FILE = MonsterPreview/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -752,7 +752,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCards.MonsterPreview; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -764,7 +764,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = J793L9LQJ2; INFOPLIST_FILE = MonsterPreview/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.4; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -774,7 +774,7 @@ PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCards.MonsterPreview; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -830,7 +830,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -885,7 +885,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = iphoneos; @@ -908,7 +908,7 @@ DEVELOPMENT_TEAM = J793L9LQJ2; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = MonsterCards/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -916,7 +916,7 @@ MARKETING_VERSION = 0.6; PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCards; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; @@ -934,7 +934,7 @@ DEVELOPMENT_TEAM = J793L9LQJ2; ENABLE_PREVIEWS = YES; INFOPLIST_FILE = MonsterCards/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -942,7 +942,7 @@ MARKETING_VERSION = 0.6; PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCards; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; @@ -955,7 +955,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = J793L9LQJ2; INFOPLIST_FILE = MonsterCardsTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -963,7 +963,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCardsTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MonsterCards.app/MonsterCards"; }; @@ -977,7 +977,7 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = J793L9LQJ2; INFOPLIST_FILE = MonsterCardsTests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 14.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -985,7 +985,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCardsTests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MonsterCards.app/MonsterCards"; }; @@ -1005,7 +1005,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCardsUITests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = MonsterCards; }; @@ -1025,7 +1025,7 @@ ); PRODUCT_BUNDLE_IDENTIFIER = com.majinnaibu.monstercards.MonsterCardsUITests; PRODUCT_NAME = "$(TARGET_NAME)"; - SWIFT_VERSION = 5.0; + SWIFT_LANGUAGE_VERSION = 6; TARGETED_DEVICE_FAMILY = "1,2"; TEST_TARGET_NAME = MonsterCards; }; diff --git a/update-pbxproj.py b/update-pbxproj.py new file mode 100644 index 0000000..9546de4 --- /dev/null +++ b/update-pbxproj.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python3 +"""Migrate MonsterCards.xcodeproj for Xcode 27 / Swift 6 / modern iOS SDK.""" +import re + +path = "iOS/MonsterCards.xcodeproj/project.pbxproj" + +with open(path, 'r') as f: + content = f.read() + +# --- Changes to apply --- + +# 1. objectVersion from 52 → 58 (Xcode 14+) +content = re.sub(r'objectVersion = 52;', 'objectVersion = 58;', content) + +# 2. LastUpgradeCheck from 1200 → 2700 (Xcode 27) +content = re.sub(r'LastUpgradeCheck = 1240;', 'LastUpgradeCheck = 2700;', content) + +# 3. LastSwiftUpdateCheck from 1240 → 2700 +content = re.sub(r'LastSwiftUpdateCheck = 1240;', 'LastSwiftUpdateCheck = 2700;', content) + +# 4. IPHONEOS_DEPLOYMENT_TARGET: 14.4 → 15.0 (Preview appex) +# 5. IPHONEOS_DEPLOYMENT_TARGET: 14.0 → 15.0 (all others - minimum supported by current dependencies & Xcode SDK) +for old_val in ['14.4', '14.0']: + content = re.sub( + r'IPHONEOS_DEPLOYMENT_TARGET = ' + re.escape(old_val) + ';', + 'IPHONEOS_DEPLOYMENT_TARGET = 15.0;', + content + ) + +# 6. SWIFT_VERSION: 5.0 → 6.0 across all targets +content = re.sub( + r'SWIFT_VERSION = 5\.0;', + 'SWIFT_LANGUAGE_VERSION = 6;', + content +) + +# Verify counts +v15 = len(re.findall(r'IPHONEOS_DEPLOYMENT_TARGET = 15\.0;', content)) +v6 = content.count('SWIFT_LANGUAGE_VERSION = 6') +v52_old = content.count('objectVersion = 52') +v14_old = content.count('IPHONEOS_DEPLOYMENT_TARGET = 14.') + +print(f"IPHONEOS_DEPLOYMENT_TARGET → 15.0 applied: {v15} times (expected 8)") +print(f"SWIFT_VERSION → SWIFT_LANGUAGE_VERSION = 6 applied: {v6} times (expected 8)") +print(f"Remaining objectVersion=52: {v52_old}") +print(f"Remaining IPHONEOS_DEPLOYMENT_TARGET = 14.x: {v14_old}") + +with open(path, 'w') as f: + f.write(content) + +print("\nDone. All changes written.")