Skip to content

[Issue #365] Move to Xcode 27 builds; align minOS to Apple min on Xcode 27; Drop Cocoapods support; Add visionOS support - #366

Merged
alexanderdibenedetto merged 21 commits into
v4-0-0from
feature/365-xcode27-min-os-drop-cocoapods
Oct 19, 2026
Merged

alexanderdibenedetto merged 21 commits into
v4-0-0from
feature/365-xcode27-min-os-drop-cocoapods

Conversation

@alexanderdibenedetto

@alexanderdibenedetto alexanderdibenedetto commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Groundwork for TrustKit 4.0. It builds with Xcode 27, raises the minimum OS versions to Xcode 27's floors, drops CocoaPods, adds visionOS, and runs the unit tests on every platform.

Closes #365

Breaking changes

  • Minimum OS versions: iOS 15, mac catalyst 15, macOS 12, tvOS 15, watchOS 9, visionOS 1. Previously iOS 12, macOS 10.13, tvOS 12, watchOS 4.
  • CocoaPods is no longer supported. TrustKit.podspec is removed. TrustKit 3.x remains available on CocoaPods.
  • Package.swift uses swift-tools-version 5.9, so resolving the package needs Xcode 15 or later.
  • Public headers moved to TrustKit/public/TrustKit/. #import <TrustKit/TrustKit.h> now works through SPM as well as with the framework, and @import TrustKit; works everywhere.
  • macOS 12 and 13 now evaluate trust with SecTrustEvaluateWithError, like every other platform. The deprecated SecTrustEvaluate fallback is gone, along with the NSError code 2 it produced.

Platforms

  • New visionOS framework and test targets ("TrustKit visionOS"). visionOS is also in Package.swift, the XCFramework and CI.
  • Mac Catalyst is now a supported platform, built from the iOS target. It's declared in Package.swift, tested in CI, and has an XCFramework slice.
  • New watchOS test target that runs the shared unit test suite. watchOS previously had no tests.
  • Pin failure reports now send VISIONOS, MAC_CATALYST and IOS_ON_MAC (iPhone or iPad apps running on a Mac) instead of IOS for their respective platforms.

Library and build settings

  • Fixes for Xcode 27's errors:
    • NS_FORMAT_FUNCTION on TSKLog
    • a format specifier fix in configuration_utils.m
    • an OSStatus cast for watchOS arm64_32
  • C is now gnu17 and C++ is gnu++20. The module verifier checks gnu99 through gnu17 and gnu++11 through gnu++20.
  • Hardening: ENABLE_ENHANCED_SECURITY turns on pointer authentication and the hardware-checked pointer arithmetic slice, so the XCFramework now includes arm64e slices. Release builds also use BUILD_LIBRARY_FOR_DISTRIBUTION. Debug turns pointer authentication off, because OCMock built through SPM is arm64 only.
  • Removed the TrustKit_Static target. The static XCFramework attached to each release replaces it.
  • Removed target build settings that duplicated project settings.
  • Removed availability checks and deprecated Security fallbacks that the new minimums make unreachable: SecTrustEvaluate, SecTrustCopyPublicKey, and the dlsym lookup of SecTrustGetCertificateAtIndex.

Tests and CI

  • CI and release workflows run on the xcode-27 runner with Xcode 27.0.
  • Unit tests run on the macOS, mac catalyst, iOS simulator, tvOS simulator, watchOS simulator and visionOS simulator destinations.
  • OCMock now comes from SPM, pinned to the 3.9.4 commit, and the bundled OCMock binaries are removed. Its manifest uses unsafe flags, so Xcode rejects a version-range pin.
  • Swift package validation builds a Swift consumer and an Objective-C consumer (#import <TrustKit/TrustKit.h>) for all five platforms.
  • New Demo UI tests job for both demo apps.

Demo apps

  • Use TrustKit as a local Swift package. The Podfile, Pods and workspace are removed.
  • Adopt the UIScene lifecycle, which apps built with the iOS 27 SDK need in order to launch.
  • Three scenarios with UI tests:
    • google.com with bad pins: expect Blocked
    • datatheorem.com with good pins: expect Connected
    • yahoo.com, unpinned: expect Connected
  • Evaluate trust off the main thread.

Docs

  • README: platform list updated; the CocoaPods badges are replaced with SwiftPM and GitHub badges.
  • Getting started:
    • SPM is listed first, with the HTTPS URL
    • shows the Objective-C import
    • says 4.0+ isn't published to CocoaPods
  • .jazzy.yaml: points at the umbrella header's new location.
  • LICENSE: updated to the current MIT template and year.

Testing

All CI scripts pass locally with Xcode 27.0:

Job Result
Unit tests macOS 86, iOS 88, tvOS 88, watchOS 86, visionOS 88, all passing
Demo UI tests Objective-C 3/3, Swift 3/3
XCFramework 9 slices (5 platforms, device + simulator)
Swift package validation iOS, macOS, tvOS, watchOS and visionOS

watchOS and macOS run two fewer tests than the other platforms because those two tests mock UIApplication.

Alexander DiBenedetto added 12 commits October 15, 2026 09:46
Drop project-level staticlib and LTO, disable pointer auth in Debug,
pin OCMock by commit, and remove the vendored OCMock references.
Reference the repo root as a local Swift package, delete the Podfile,
Pods and workspace, and raise the demo's iOS deployment target to 15.0.
Move the public headers into public/TrustKit/ so SPM consumers can use
the framework-style import, and check it in validate_swift_package.sh.
Remove the podspec, and update the README and getting-started guide.
Lower tvOS to 15 and declare iOS 15, macOS 12, tvOS 15 and watchOS 9
in Package.swift (tools 5.7) and the README. Drop availability checks
and deprecated Security fallbacks that the new minimums make dead, adopt
the UIScene lifecycle in both demos, and remove the stale circle.yml
reference.
Add visionOS framework and test targets (visionOS 1.0), include visionOS
in Package.swift, the XCFramework, CI and pin failure reports, and run
the unit test suite on watchOS. Give both demos good-pin, bad-pin and
unpinned buttons with UI tests run in a new CI job, and evaluate trust
off the main thread.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The broad security, platform, build, and distribution migration requires final human review.

0 open findings

What changed in this PR

Prepares TrustKit 4.0 for Xcode 27, higher OS minimums, visionOS support, and SwiftPM-focused distribution.

Changes:

  • Removes CocoaPods support, bundled OCMock frameworks, and obsolete Security API fallbacks.
  • Relocates public headers and expands platform testing and XCFramework packaging.
  • Modernizes demo lifecycles and adds UI tests.
File Description
TrustKitTests/​TSKReporterTests.m Updates public-header imports.
TrustKitTests/​TSKPublicKeyAlgorithmTests.m Updates imports and watchOS guards.
TrustKitTests/​TSKPinningValidatorTests.m Updates imports and watchOS guards.
TrustKitTests/​TSKPinConfigurationTests.m Updates public-header imports.
TrustKitTests/​TSKNSURLSessionTests.m Updates public-header imports.
TrustKitTests/​TSKNSURLConnectionTests.m Updates public-header imports.
TrustKitTests/​TSKLoggerTests.m Updates umbrella-header import.
TrustKitTests/​TSKEndToEndSwizzlingTests.m Updates umbrella-header import.
TrustKitTests/​TSKEndToEndNSURLSessionTests.m Updates public-header imports.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Modules/​module.modulemap Removes bundled module map.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMVerifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMStubRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMQuantifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMockObject.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMockMacros.h Removes bundled macros.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMock.h Removes bundled umbrella header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMMacroState.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMLocation.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMFunctions.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMConstraint.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​OCMArg.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​Headers/​NSNotificationCenter+OCMAdditions.h Removes bundled category header.
TrustKitTests/​Dependencies/​OCMock/​tvOS/​OCMock.framework/​_CodeSignature/​CodeResources Removes bundled signature metadata.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Resources/​Info.plist Removes bundled framework metadata.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Modules/​module.modulemap Removes bundled module map.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMVerifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMStubRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMQuantifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMockObject.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMockMacros.h Removes bundled macros.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMock.h Removes bundled umbrella header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMMacroState.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMLocation.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMFunctions.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMConstraint.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​OCMArg.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​Headers/​NSNotificationCenter+OCMAdditions.h Removes bundled category header.
TrustKitTests/​Dependencies/​OCMock/​Mac/​OCMock.framework/​Versions/​A/​_CodeSignature/​CodeResources Removes bundled signature metadata.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Modules/​module.modulemap Removes bundled module map.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMVerifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMStubRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMRecorder.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMQuantifier.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMockObject.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMockMacros.h Removes bundled macros.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMock.h Removes bundled umbrella header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMMacroState.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMLocation.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMFunctions.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMConstraint.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​OCMArg.h Removes bundled header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​Headers/​NSNotificationCenter+OCMAdditions.h Removes bundled category header.
TrustKitTests/​Dependencies/​OCMock/​iOS/​OCMock.framework/​_CodeSignature/​CodeResources Removes bundled signature metadata.
TrustKitDemo/​TrustKitDemoUITests/​TrustKitDemoUITests.swift Tests three connection scenarios.
TrustKitDemo/​TrustKitDemo.xcworkspace/​xcshareddata/​IDEWorkspaceChecks.plist Removes obsolete workspace metadata.
TrustKitDemo/​TrustKitDemo.xcworkspace/​contents.xcworkspacedata Removes CocoaPods workspace.
TrustKitDemo/​TrustKitDemo.xcodeproj/​xcshareddata/​xcschemes/​TrustKitDemo-Swift.xcscheme Enables Swift demo UI tests.
TrustKitDemo/​TrustKitDemo.xcodeproj/​xcshareddata/​xcschemes/​TrustKitDemo-ObjC.xcscheme Enables Objective-C demo UI tests.
TrustKitDemo/​TrustKitDemo-Swift/​SceneDelegate.swift Adds scene delegate.
TrustKitDemo/​TrustKitDemo-Swift/​Main.storyboard Adds unpinned-domain scenario.
TrustKitDemo/​TrustKitDemo-Swift/​Info.plist Configures scene lifecycle.
TrustKitDemo/​TrustKitDemo-Swift/​DTViewController.swift Moves validation off-main; displays outcomes.
TrustKitDemo/​TrustKitDemo-Swift/​AppDelegate.swift Updates lifecycle and failing-pin domain.
TrustKitDemo/​TrustKitDemo-ObjC/​ViewController.m Moves validation off-main; displays outcomes.
TrustKitDemo/​TrustKitDemo-ObjC/​ViewController.h Updates scenario outlets.
TrustKitDemo/​TrustKitDemo-ObjC/​SceneDelegate.m Implements scene delegate.
TrustKitDemo/​TrustKitDemo-ObjC/​SceneDelegate.h Declares scene delegate.
TrustKitDemo/​TrustKitDemo-ObjC/​Info.plist Configures scene lifecycle.
TrustKitDemo/​TrustKitDemo-ObjC/​Base.lproj/​Main.storyboard Adds unpinned-domain scenario.
TrustKitDemo/​TrustKitDemo-ObjC/​AppDelegate.m Updates imports and failing-pin domain.
TrustKitDemo/​TrustKitDemo-ObjC/​AppDelegate.h Transfers window ownership to scene.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library.xcconfig Removes generated pod configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library.release.xcconfig Removes generated release configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library.modulemap Removes generated module map.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library.debug.xcconfig Removes generated debug configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library-umbrella.h Removes generated umbrella header.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library-prefix.pch Removes generated prefix header.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-library/​TrustKit-library-dummy.m Removes generated pod source.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework.xcconfig Removes generated pod configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework.release.xcconfig Removes generated release configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework.modulemap Removes generated module map.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework.debug.xcconfig Removes generated debug configuration.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework-umbrella.h Removes generated umbrella header.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework-prefix.pch Removes generated prefix header.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework-Info.plist Removes generated framework metadata.
TrustKitDemo/​Pods/​Target Support Files/​TrustKit-framework/​TrustKit-framework-dummy.m Removes generated pod source.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift.release.xcconfig Removes CocoaPods release configuration.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift.modulemap Removes CocoaPods module map.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift.debug.xcconfig Removes CocoaPods debug configuration.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-umbrella.h Removes CocoaPods umbrella header.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-Info.plist Removes generated bundle metadata.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-frameworks.sh Removes CocoaPods embedding script.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-dummy.m Removes generated pod source.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-acknowledgements.plist Removes generated acknowledgements.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-Swift/​Pods-TrustKitDemo-Swift-acknowledgements.markdown Removes generated acknowledgements.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-ObjC/​Pods-TrustKitDemo-ObjC.release.xcconfig Removes CocoaPods release configuration.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-ObjC/​Pods-TrustKitDemo-ObjC.debug.xcconfig Removes CocoaPods debug configuration.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-ObjC/​Pods-TrustKitDemo-ObjC-dummy.m Removes generated pod source.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-ObjC/​Pods-TrustKitDemo-ObjC-acknowledgements.plist Removes generated acknowledgements.
TrustKitDemo/​Pods/​Target Support Files/​Pods-TrustKitDemo-ObjC/​Pods-TrustKitDemo-ObjC-acknowledgements.markdown Removes generated acknowledgements.
TrustKitDemo/​Pods/​Manifest.lock Removes installed-pod manifest.
TrustKitDemo/​Pods/​Local Podspecs/​TrustKit.podspec.json Removes local pod specification.
TrustKitDemo/​Podfile.lock Removes CocoaPods lockfile.
TrustKitDemo/​Podfile Removes CocoaPods dependency declaration.
TrustKit/​TSKTrustKitConfig.m Updates public-header import.
TrustKit/​TSKPinningValidatorResult.m Updates public-header import.
TrustKit/​TSKPinningValidator.m Updates public-header imports.
TrustKit/​TSKLog.h Enables format-string checking.
TrustKit/​TrustKit.m Updates public-header imports.
TrustKit/​Swizzling/​TSKNSURLSessionDelegateProxy.m Updates public-header imports.
TrustKit/​Swizzling/​TSKNSURLConnectionDelegateProxy.m Updates public-header imports.
TrustKit/​Reporting/​TSKBackgroundReporter.m Adds visionOS reporting identifier.
TrustKit/​public/​TrustKit/​TSKTrustKitConfig.h Relocates configuration API header.
TrustKit/​public/​TrustKit/​TSKTrustDecision.h Relocates trust-decision API header.
TrustKit/​public/​TrustKit/​TSKPinningValidatorResult.h Relocates validation-result API header.
TrustKit/​public/​TrustKit/​TSKPinningValidatorCallback.h Relocates callback API header.
TrustKit/​public/​TrustKit/​TSKPinningValidator.h Relocates validator API header.
TrustKit/​public/​TrustKit/​TrustKit.h Relocates and expands umbrella header.
TrustKit/​Pinning/​TSKSPKIHashCache.m Corrects status-code formatting.
TrustKit/​Pinning/​ssl_pin_verifier.h Updates trust-decision header import.
TrustKit/​Pinning/​pinning_utils.m Removes legacy Security API fallbacks.
TrustKit/​parse_configuration.m Updates configuration-header import.
TrustKit/​configuration_utils.m Updates import and integer formatting.
TrustKit/​configuration_utils.h Updates callback-header import.
TrustKit.xcodeproj/​xcshareddata/​xcschemes/​TrustKit.xcscheme Updates Xcode upgrade metadata.
TrustKit.xcodeproj/​xcshareddata/​xcschemes/​TrustKit watchOS.xcscheme Enables watchOS tests.
TrustKit.xcodeproj/​xcshareddata/​xcschemes/​TrustKit visionOS.xcscheme Configures visionOS framework and tests.
TrustKit.xcodeproj/​xcshareddata/​xcschemes/​TrustKit tvOS.xcscheme Updates Xcode upgrade metadata.
TrustKit.xcodeproj/​xcshareddata/​xcschemes/​TrustKit OS X.xcscheme Updates Xcode upgrade metadata.
TrustKit.xcodeproj/​project.xcworkspace/​xcshareddata/​swiftpm/​Package.resolved Pins OCMock source revision.
TrustKit.podspec Removes CocoaPods distribution specification.
scripts/​validate_swift_package.sh Validates Swift and Objective-C consumers.
scripts/​run_unit_tests.sh Documents additional test platforms.
scripts/​run_demo_ui_tests.sh Adds demo UI-test runner.
scripts/​lib.sh Adds watchOS and visionOS destinations.
scripts/​build_xcframework.sh Adds visionOS framework variants.
README.md Updates platforms and distribution badges.
Package.swift Raises toolchain minimums and adds visionOS.
LICENSE Updates MIT license presentation.
docs/​getting-started.md Prioritizes SwiftPM; documents CocoaPods retirement.
.jazzy.yaml Updates umbrella-header location.
.gitignore Removes CocoaPods commentary.
.github/​workflows/​release.yml Moves release builds to Xcode 27.
.github/​workflows/​ci.yml Expands platform and demo validation.
Files not reviewed (69)
  • TrustKitDemo/Pods/Headers/Private/TrustKit/RSSwizzle.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKBackgroundReporter.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKLog.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKNSURLConnectionDelegateProxy.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKNSURLSessionDelegateProxy.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPinFailureReport.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPinningValidator.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPinningValidatorCallback.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPinningValidatorResult.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPinningValidator_Private.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKPublicKeyAlgorithm.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKReportsRateLimiter.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKSPKIHashCache.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKTrustDecision.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TSKTrustKitConfig.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TrustKit-Bridging-Header.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/TrustKit.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/configuration_utils.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/domain_registry.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/parse_configuration.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/pinning_utils.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/registry_tables.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/registry_types.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/reporting_utils.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/ssl_pin_verifier.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/string_util.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/trie_node.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/trie_search.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/tsk_assert.h: Generated file
  • TrustKitDemo/Pods/Headers/Private/TrustKit/vendor_identifier.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TSKPinningValidator.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TSKPinningValidatorCallback.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TSKPinningValidatorResult.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TSKTrustDecision.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TSKTrustKitConfig.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TrustKit-library-umbrella.h: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TrustKit-library.modulemap: Generated file
  • TrustKitDemo/Pods/Headers/Public/TrustKit/TrustKit.h: Generated file
  • TrustKitDemo/Pods/Local Podspecs/TrustKit.podspec.json: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-ObjC/Pods-TrustKitDemo-ObjC-acknowledgements.markdown: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-ObjC/Pods-TrustKitDemo-ObjC-acknowledgements.plist: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-ObjC/Pods-TrustKitDemo-ObjC-dummy.m: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-ObjC/Pods-TrustKitDemo-ObjC.debug.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-ObjC/Pods-TrustKitDemo-ObjC.release.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-Info.plist: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-acknowledgements.markdown: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-acknowledgements.plist: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-dummy.m: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-frameworks.sh: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift-umbrella.h: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift.debug.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift.modulemap: Generated file
  • TrustKitDemo/Pods/Target Support Files/Pods-TrustKitDemo-Swift/Pods-TrustKitDemo-Swift.release.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework-Info.plist: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework-dummy.m: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework-prefix.pch: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework-umbrella.h: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework.debug.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework.modulemap: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework.release.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-framework/TrustKit-framework.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library-dummy.m: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library-prefix.pch: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library-umbrella.h: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library.debug.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library.modulemap: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library.release.xcconfig: Generated file
  • TrustKitDemo/Pods/Target Support Files/TrustKit-library/TrustKit-library.xcconfig: Generated file
  • TrustKitDemo/TrustKitDemo.xcworkspace/contents.xcworkspacedata: Generated file

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@alexanderdibenedetto

Copy link
Copy Markdown
Contributor Author

Also closes #289 by moving the demo apps off of using the main thread queue, documenting the better practice and eliminating the warnings generated by Xcode.

Also closes #318 by adding explicit visionOS support in Package.swift and targets/test targets in the Xcode project and CI.

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing blocking. The comments below are optional suggestions. There is no need to push a fix for them before merging.

Beyond the inline finding, I also checked the trust-evaluation simplification in TrustKit/Pinning/pinning_utils.m. evaluateCertificateChainTrust, getCertificateAtIndex and copyKey now behave the same as the old @ available/SecTrustCopyCertificateChain branches, and the new minimum OS versions guarantee those APIs exist. So removing the fallbacks doesn't change pin validation on supported platforms.

Extended reasoning...

The PR touches the pinning trust-evaluation helpers in pinning_utils.m. The SecTrustEvaluate, dlsym and SecTrustCopyPublicKey fallbacks are removed, and the code that remains matches the earlier modern-API branches line for line. Every API it calls directly is available at the new floors of iOS 15, macOS 12, tvOS 15, watchOS 9 and visionOS 1.

Comment thread TrustKit.xcodeproj/project.pbxproj Outdated
Enable Mac Catalyst on the iOS framework and test targets, declare it in
Package.swift, and add it to CI, the XCFramework and package validation.
Pin failure reports now send MAC_CATALYST and IOS_ON_MAC.
Alexander DiBenedetto added 5 commits October 16, 2026 10:44
(TrustKit.xcodeproj/project.pbxproj)

Stop demo UI test failures from hanging CI and report the alert contents
(scripts/run_demo_ui_tests.sh, TrustKitDemo/TrustKitDemoUITests/TrustKitDemoUITests.swift)
Replace the runtime check in the test scripts with an install step that
runs before the watchOS tests: warm up CoreSimulator, export the runtime
image and add it with simctl.
Always warm up CoreSimulator. If the simulator still isn't available,
replace the registered runtime image with a fresh export, since adding
a second copy is rejected as a duplicate.
@alexanderdibenedetto
alexanderdibenedetto merged commit a3635a4 into v4-0-0 Oct 19, 2026
10 checks passed
@alexanderdibenedetto
alexanderdibenedetto deleted the feature/365-xcode27-min-os-drop-cocoapods branch October 19, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants