Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ef4f9da
g-orchestrated: raise podspec deployment targets for Xcode 27
w-goog Aug 12, 2026
ecf2c08
g-orchestrated: raise SPM platform minimums and swift-tools-version f…
w-goog Aug 12, 2026
f66e134
g-orchestrated: raise Xcode project deployment targets for Xcode 27
w-goog Aug 12, 2026
48c9ad7
g-orchestrated: raise Example-iOS_ObjC deployment target to iOS 15
w-goog Aug 12, 2026
46385be
g-orchestrated: raise Example-macOS deployment target to macOS 12
w-goog Aug 12, 2026
85f4c6d
g-orchestrated: raise Example-tvOS deployment target to tvOS 15
w-goog Aug 12, 2026
44546dd
g-orchestrated: raise Carthage example deployment targets to iOS 15
w-goog Aug 12, 2026
faffbe4
g-orchestrated: update README minimum supported OS versions
w-goog Aug 12, 2026
7ef4d29
g-orchestrated: add CHANGELOG entry for deployment target bump
w-goog Aug 12, 2026
1307f92
Merge codegen/deployment-target-bump-lib
w-goog Aug 12, 2026
9f476cb
Merge codegen/deployment-target-bump-examples
w-goog Aug 12, 2026
c8d1aed
Merge codegen/deployment-target-bump-docs
w-goog Aug 12, 2026
959bfd4
g-orchestrated: use modern secure-coding APIs in unit tests
w-goog Aug 12, 2026
7425e4c
g-orchestrated: add an advisory Xcode 27 CI job
w-goog Aug 12, 2026
4147a64
g-orchestrated: name the tvOS 27 simulator explicitly
w-goog Aug 12, 2026
687fcf3
g-orchestrated: address review nits on the secure-coding test cleanup
w-goog Aug 17, 2026
fa461a8
Merge chore/xcode-27-deployment-targets
w-goog Aug 17, 2026
0c2b264
g-orchestrated: restore a real assertion in the NSCoding error test
w-goog Aug 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,32 @@ jobs:
uses: codecov/codecov-action@v6
with:
version: v0.7.3

xcode-27-preview-test:
# Xcode 27 is currently only available on the preview `xcode-27` image,
# on which Xcode 27 beta is the only (thus, default) Xcode and the simulator
# runtimes are the 27.0 generation. The image is preview, so this job is does
# not block merges.
# https://github.com/actions/runner-images/issues/14404
runs-on: xcode-27
continue-on-error: true
strategy:
fail-fast: false
matrix:
flags: [
"-scheme AppAuth-iOS -destination 'platform=iOS Simulator,name=iPhone 17,OS=27.0' -sdk 'iphonesimulator'",
"-scheme AppAuth-macOS -destination 'platform=macOS' -sdk 'macosx'",
"-scheme AppAuth_macOS -destination 'platform=macOS' -sdk 'macosx'",
"-scheme AppAuth-tvOS -destination 'platform=tvOS Simulator,name=Apple TV 4K (3rd generation),OS=27.0' -sdk 'appletvsimulator'",
"-scheme AppAuth_tvOS -destination 'platform=tvOS Simulator,name=Apple TV 4K (3rd generation),OS=27.0' -sdk 'appletvsimulator'",
"-scheme AppAuthTV -destination 'platform=tvOS Simulator,name=Apple TV 4K (3rd generation),OS=27.0' -sdk 'appletvsimulator'"
]
steps:
- uses: actions/checkout@v5
- name: Warm up simulator runtimes
run: xcrun simctl list devices available
- name: Run unit test targets
run: |
xcodebuild test \
-project AppAuth.xcodeproj \
${{ matrix.flags }}
8 changes: 4 additions & 4 deletions AppAuth.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,12 @@ It follows the OAuth 2.0 for Native Apps best current practice
# classes of AppAuth with tokens on watchOS and tvOS, but currently the
# library won't help you obtain authorization grants on those platforms.

ios_deployment_target = "12.0"
osx_deployment_target = "10.12"
ios_deployment_target = "15.0"
osx_deployment_target = "12.0"
s.ios.deployment_target = ios_deployment_target
s.osx.deployment_target = osx_deployment_target
s.watchos.deployment_target = "2.0"
s.tvos.deployment_target = "9.0"
s.watchos.deployment_target = "9.0"
s.tvos.deployment_target = "15.0"

s.source = { :git => "https://github.com/openid/AppAuth-iOS.git", :tag => s.version }
s.requires_arc = true
Expand Down
72 changes: 36 additions & 36 deletions AppAuth.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -2653,7 +2653,7 @@
PRODUCT_BUNDLE_IDENTIFIER = net.openid.AppAuthTVTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Debug;
};
Expand All @@ -2668,7 +2668,7 @@
PRODUCT_BUNDLE_IDENTIFIER = net.openid.AppAuthTVTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Release;
};
Expand Down Expand Up @@ -2702,7 +2702,7 @@
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down Expand Up @@ -2733,7 +2733,7 @@
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand Down Expand Up @@ -2815,14 +2815,14 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MACOSX_DEPLOYMENT_TARGET = 10.12;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
WARNING_CFLAGS = "-Wno-gnu";
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Debug;
};
Expand Down Expand Up @@ -2873,22 +2873,22 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
MACOSX_DEPLOYMENT_TARGET = 10.12;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
VALIDATE_PRODUCT = YES;
WARNING_CFLAGS = "-Wno-gnu";
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Release;
};
340E73861C5D819B0076B1F6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
Expand All @@ -2897,7 +2897,7 @@
340E73871C5D819B0076B1F6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
};
Expand All @@ -2909,7 +2909,7 @@
CLANG_ENABLE_MODULES = YES;
HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/";
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = net.openid.appauth.AppAuthTests;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -2926,7 +2926,7 @@
CLANG_ENABLE_MODULES = YES;
HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/";
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = net.openid.appauth.AppAuthTests;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -2979,7 +2979,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Debug;
};
Expand All @@ -2994,7 +2994,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Release;
};
Expand All @@ -3008,7 +3008,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Debug;
};
Expand All @@ -3022,7 +3022,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Release;
};
Expand All @@ -3040,7 +3040,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Sources/CoreFramework/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = net.openid.AppAuthCore;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -3066,7 +3066,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Sources/CoreFramework/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = net.openid.AppAuthCore;
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -3091,7 +3091,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Sources/Framework/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-iOS";
PRODUCT_NAME = AppAuth;
Expand All @@ -3116,7 +3116,7 @@
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = Sources/Framework/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-iOS";
PRODUCT_NAME = AppAuth;
Expand All @@ -3135,7 +3135,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
HEADER_SEARCH_PATHS = .;
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -3149,7 +3149,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
HEADER_SEARCH_PATHS = .;
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-iOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down Expand Up @@ -3178,7 +3178,7 @@
TARGETED_DEVICE_FAMILY = 4;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Debug;
};
Expand All @@ -3204,7 +3204,7 @@
TARGETED_DEVICE_FAMILY = 4;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Release;
};
Expand All @@ -3227,7 +3227,7 @@
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand All @@ -3252,7 +3252,7 @@
SDKROOT = appletvos;
SKIP_INSTALL = YES;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
Expand All @@ -3269,7 +3269,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Debug;
};
Expand All @@ -3284,7 +3284,7 @@
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TVOS_DEPLOYMENT_TARGET = 9.0;
TVOS_DEPLOYMENT_TARGET = 15.0;
};
name = Release;
};
Expand Down Expand Up @@ -3379,7 +3379,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Debug;
};
Expand All @@ -3392,7 +3392,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = watchos;
SKIP_INSTALL = YES;
WATCHOS_DEPLOYMENT_TARGET = 2.0;
WATCHOS_DEPLOYMENT_TARGET = 9.0;
};
name = Release;
};
Expand All @@ -3403,7 +3403,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
HEADER_SEARCH_PATHS = .;
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-ExtensionTests";
PRODUCT_NAME = "$(TARGET_NAME)";
Expand All @@ -3417,7 +3417,7 @@
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
HEADER_SEARCH_PATHS = .;
INFOPLIST_FILE = UnitTests/UnitTestsInfo.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "net.openid.AppAuth-ExtensionTests";
PRODUCT_NAME = "$(TARGET_NAME)";
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# UNRELEASED
- BREAKING: Updates made to support Xcode 27.
-- Raised minimum deployment targets to iOS 15.0, macOS 12.0, tvOS 15.0 and watchOS 9.0 (minimum for Xcode 27).
-- Swift Package Manager users: The required `swift-tools-version` bump from 5.3 to 5.7, to pickup the new platforms,
results in package resolution now requiring Swift 5.7 / Xcode 14 or later.
-- Projects that must keep supporting iOS 12-14 should stay on AppAuth 2.x, which remains buildable with Xcode 26 and earlier.
- BREAKING: `resumeExternalUserAgentFlowWithURL:error:` is now required in `OIDExternalUserAgentSession` to fix a Swift compiler crash (no workaround) caused by its `@optional` status with `NSError **`. Implementers must now provide this method. Affects projects since 2.1.0. ([#955](https://github.com/openid/AppAuth-iOS/pull/955))
- Swift callers now spell the method `resumeExternalUserAgentFlow(_:)`. Since the method is no longer optional, you don't need optional-chaining anymore. For those migrating from 2.1.0, replace `try session.resumeExternalUserAgentFlow?(with: url)` with `try session.resumeExternalUserAgentFlow(url)`. Objective-C callers are unaffected. ([#966](https://github.com/openid/AppAuth-iOS/pull/966))
- Replace case range with explicit case labels in OIDTokenUtilities. Addresses issue #947. ([#963](https://github.com/openid/AppAuth-iOS/pull/963))
Expand Down
Loading