Files
MonsterCards/update-pbxproj.py

52 lines
1.7 KiB
Python

#!/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.")