This is an automated email from the ASF dual-hosted git repository.
GitToTheHub pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-ios.git
The following commit(s) were added to refs/heads/master by this push:
new 0b7e76b0 chore(versions): Vary minimum version based on compile SDK
(#1663)
0b7e76b0 is described below
commit 0b7e76b09d14949a98caba773986c55c4376b09c
Author: Darryl Pogue <[email protected]>
AuthorDate: Wed Sep 23 06:27:23 2026 -0700
chore(versions): Vary minimum version based on compile SDK (#1663)
* chore(versions): Replace min versions with macros
Xcode is getting more strict about minimum supported OS requirements,
what used to be a warning about version numbers being out of range is
being turned into an error.
To avoid needing to raise our actual minimum OS version unnecessarily,
we can use an Xcode macro that automatically results in the minimum
supported OS version in the current Xcode version. These macros were
introduced in Xcode 14, which is older than our minimum Xcode
requirement.
The end result of this is that the realistic minimum supported OS
version for a Cordova app will be determined by the Xcode version used
to build it.
It doesn't seem to care about the minimum version declared in
Package.swift and whether that's in the range of supported versions or
not.
I would feel better if there were a way to use this conditionally and
still set a hardcoded minimum, or a way to see clearly what the
Xcode-supported minimum is, but I can't see a way to do that without
delving into complex xcconfig chaining :(
* fix(versions): Vary min version by SDK target
Rather than using the (very unclear) macro for the recommended target
version, we can explicitly vary the target version based on the SDK
being used to compile. Since the SDK is tied to the Xcode version, this
allows us to declare that our minimum iOS version is 13.0, except in
Xcode 27 where it's 15.0.
Documenting this behaviour is still going to be a pain, but Xcode really
doesn't seem to want to give us any other choices here.
I left the CordovaTests project still targeting the recommended SDK
since that's effectively a development project and doesn't impact
Cordova consumers.
* ci: Add Xcode 27 (beta, for now) to the CI matrix
* fix(Podfile): Set min version to 15.0 for Xcode 27
This seems absolutely awful, but I don't have a better suggestion that
keeps the Xcodeproj behaviour of determining the version at build-time
based on the target toolset.
Fixes #1723
---
.github/workflows/ci.yml | 2 +-
CordovaLib/CordovaLib.xcodeproj/project.pbxproj | 20 ++++++++------------
lib/Podfile.js | 6 +++++-
templates/project/App.xcodeproj/project.pbxproj | 14 ++++++++------
.../CordovaTests.xcodeproj/project.pbxproj | 8 ++------
5 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9a867521..823ee41a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -61,7 +61,7 @@ jobs:
strategy:
matrix:
- os: [macos-15, macos-26, macos-26-intel]
+ os: [macos-15, macos-26, macos-26-intel, xcode-27]
env:
CDV_IOS_SIM: ${{ matrix.os == 'macos-15' && 'iPhone 16e' || 'iPhone 17'
}}
diff --git a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
index 47c5a5ca..f1b9f5bd 100644
--- a/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
+++ b/CordovaLib/CordovaLib.xcodeproj/project.pbxproj
@@ -682,10 +682,7 @@
MODULE_VERIFIER_SUPPORTED_LANGUAGES =
"objective-c objective-c++";
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
- TARGETED_DEVICE_FAMILY = "1,2,7";
- XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
@@ -696,10 +693,7 @@
MODULE_VERIFIER_SUPPORTED_LANGUAGES =
"objective-c objective-c++";
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
PUBLIC_HEADERS_FOLDER_PATH = include/Cordova;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
- TARGETED_DEVICE_FAMILY = "1,2,7";
- XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
@@ -762,6 +756,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ "IPHONEOS_DEPLOYMENT_TARGET[sdk=*27.*]" = 15.0;
MERGEABLE_LIBRARY = YES;
MODULE_VERIFIER_SUPPORTED_LANGUAGES =
"objective-c objective-c++";
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
@@ -773,6 +768,9 @@
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos
xrsimulator xros";
+ TARGETED_DEVICE_FAMILY = "1,2,7";
+ XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
@@ -830,6 +828,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ "IPHONEOS_DEPLOYMENT_TARGET[sdk=*27.*]" = 15.0;
MERGEABLE_LIBRARY = YES;
MODULE_VERIFIER_SUPPORTED_LANGUAGES =
"objective-c objective-c++";
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
@@ -840,7 +839,10 @@
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos
xrsimulator xros";
+ TARGETED_DEVICE_FAMILY = "1,2,7";
VALIDATE_PRODUCT = YES;
+ XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
@@ -861,12 +863,9 @@
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
PRODUCT_BUNDLE_IDENTIFIER =
org.apache.cordova.Cordova;
SKIP_INSTALL = NO;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
- TARGETED_DEVICE_FAMILY = "1,2,7";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
- XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
@@ -887,12 +886,9 @@
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS =
"gnu11 gnu++14";
PRODUCT_BUNDLE_IDENTIFIER =
org.apache.cordova.Cordova;
SKIP_INSTALL = NO;
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
- TARGETED_DEVICE_FAMILY = "1,2,7";
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
- XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
diff --git a/lib/Podfile.js b/lib/Podfile.js
index 94aac6cf..79af1377 100644
--- a/lib/Podfile.js
+++ b/lib/Podfile.js
@@ -165,7 +165,11 @@ Podfile.prototype.escapeSingleQuotes = function (string) {
Podfile.prototype.getTemplate = function () {
return '# DO NOT MODIFY -- auto-generated by Apache Cordova\n' +
`${this.sourceToken}\n` +
- `platform :ios, '${this.minDeploymentTarget}'\n` +
+ `deploymentTarget = '${this.minDeploymentTarget}'\n` +
+ 'if deploymentTarget < \'15.0\' && `xcodebuild
-version`.lines.first.split(\' \')[1].to_i >= 27\n' +
+ '\tdeploymentTarget = \'15.0\'\n' +
+ 'end\n' +
+ 'platform :ios, deploymentTarget\n' +
`${this.declarationToken}\n` +
'target \'App\' do\n' +
'\tproject \'App.xcodeproj\'\n' +
diff --git a/templates/project/App.xcodeproj/project.pbxproj
b/templates/project/App.xcodeproj/project.pbxproj
index a81089d5..428a5fce 100755
--- a/templates/project/App.xcodeproj/project.pbxproj
+++ b/templates/project/App.xcodeproj/project.pbxproj
@@ -345,18 +345,21 @@
"INSTALL_PATH[sdk=macosx*]" =
"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
"INSTALL_PATH[sdk=xrsimulator*]" =
"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ "IPHONEOS_DEPLOYMENT_TARGET[sdk=*27.*]" = 15.0;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG
$(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
- TARGETED_DEVICE_FAMILY = "1,2";
+ TARGETED_DEVICE_FAMILY = "1,2,6,7";
VALIDATE_WORKSPACE = NO;
+ XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
@@ -414,16 +417,19 @@
"INSTALL_PATH[sdk=macosx*]" =
"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
"INSTALL_PATH[sdk=xrsimulator*]" =
"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ "IPHONEOS_DEPLOYMENT_TARGET[sdk=*27.*]" = 15.0;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
STRING_CATALOG_GENERATE_SYMBOLS = YES;
+ SUPPORTED_PLATFORMS = "iphonesimulator iphoneos
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_COMPILATION_MODE = wholemodule;
- TARGETED_DEVICE_FAMILY = "1,2";
+ TARGETED_DEVICE_FAMILY = "1,2,6,7";
VALIDATE_PRODUCT = YES;
+ XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
@@ -455,14 +461,12 @@
);
PRODUCT_BUNDLE_IDENTIFIER =
"org.apache.cordova.AppTemplate$(DEVELOPMENT_TEAM)";
PRODUCT_NAME = "$(TARGET_NAME)";
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER =
"$(TARGET_NAME)/Bridging-Header.h";
SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2,6,7";
};
name = Debug;
};
@@ -494,14 +498,12 @@
);
PRODUCT_BUNDLE_IDENTIFIER =
"org.apache.cordova.AppTemplate$(DEVELOPMENT_TEAM)";
PRODUCT_NAME = "$(TARGET_NAME)";
- SUPPORTED_PLATFORMS = "iphoneos iphonesimulator
xros xrsimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER =
"$(TARGET_NAME)/Bridging-Header.h";
SWIFT_VERSION = 5.0;
- TARGETED_DEVICE_FAMILY = "1,2,6,7";
};
name = Release;
};
diff --git a/tests/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
b/tests/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
index 8468dd5d..05701d0a 100644
--- a/tests/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
+++ b/tests/CordovaLibTests/CordovaTests.xcodeproj/project.pbxproj
@@ -428,7 +428,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ IPHONEOS_DEPLOYMENT_TARGET =
"$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)";
LD_RUNPATH_SEARCH_PATHS =
"@executable_path/Frameworks";
MERGED_BINARY_TYPE = automatic;
ONLY_ACTIVE_ARCH = YES;
@@ -487,7 +487,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
+ IPHONEOS_DEPLOYMENT_TARGET =
"$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)";
LD_RUNPATH_SEARCH_PATHS =
"@executable_path/Frameworks";
MERGED_BINARY_TYPE = automatic;
ONLY_ACTIVE_ARCH = NO;
@@ -529,7 +529,6 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GENERATE_INFOPLIST_FILE = YES;
HEADER_SEARCH_PATHS = "$(inherited)";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -562,7 +561,6 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GENERATE_INFOPLIST_FILE = YES;
HEADER_SEARCH_PATHS = "$(inherited)";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -603,7 +601,6 @@
"$(BUILT_PRODUCTS_DIR)/include/Cordova/**",
);
INFOPLIST_FILE = "CordovaTests-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
ONLY_ACTIVE_ARCH = YES;
OTHER_LDFLAGS = (
"-all_load",
@@ -640,7 +637,6 @@
"$(BUILT_PRODUCTS_DIR)/include/Cordova/**",
);
INFOPLIST_FILE = "CordovaTests-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 13.0;
ONLY_ACTIVE_ARCH = NO;
OTHER_LDFLAGS = (
"-all_load",
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]