Repository navigation
[Issue #365] Move to Xcode 27 builds; align minOS to Apple min on Xcode 27; Drop Cocoapods support; Add visionOS support - #366
Conversation
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.
There was a problem hiding this comment.
🔵 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.
There was a problem hiding this comment.
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.
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.
(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.
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
TrustKit.podspecis removed. TrustKit 3.x remains available on CocoaPods.Package.swiftuses swift-tools-version 5.9, so resolving the package needs Xcode 15 or later.TrustKit/public/TrustKit/.#import <TrustKit/TrustKit.h>now works through SPM as well as with the framework, and@import TrustKit;works everywhere.SecTrustEvaluateWithError, like every other platform. The deprecatedSecTrustEvaluatefallback is gone, along with theNSErrorcode 2 it produced.Platforms
Package.swift, the XCFramework and CI.Package.swift, tested in CI, and has an XCFramework slice.VISIONOS,MAC_CATALYSTandIOS_ON_MAC(iPhone or iPad apps running on a Mac) instead ofIOSfor their respective platforms.Library and build settings
NS_FORMAT_FUNCTIONonTSKLogconfiguration_utils.mOSStatuscast for watchOSarm64_32ENABLE_ENHANCED_SECURITYturns on pointer authentication and the hardware-checked pointer arithmetic slice, so the XCFramework now includesarm64eslices. Release builds also useBUILD_LIBRARY_FOR_DISTRIBUTION. Debug turns pointer authentication off, because OCMock built through SPM is arm64 only.TrustKit_Statictarget. The static XCFramework attached to each release replaces it.SecTrustEvaluate,SecTrustCopyPublicKey, and thedlsymlookup ofSecTrustGetCertificateAtIndex.Tests and CI
xcode-27runner with Xcode 27.0.#import <TrustKit/TrustKit.h>) for all five platforms.Demo apps
Docs
.jazzy.yaml: points at the umbrella header's new location.Testing
All CI scripts pass locally with Xcode 27.0:
watchOS and macOS run two fewer tests than the other platforms because those two tests mock
UIApplication.