diff --git a/.github/workflows/VerifyChanges.yaml b/.github/workflows/VerifyChanges.yaml index b47054f..8894d0e 100644 --- a/.github/workflows/VerifyChanges.yaml +++ b/.github/workflows/VerifyChanges.yaml @@ -1,5 +1,4 @@ name: Verify Changes - on: merge_group: pull_request: @@ -20,10 +19,11 @@ jobs: - name: Lint run: | Scripts/lint + build-and-test: name: Build and Test (${{ matrix.platform }}) needs: lint - runs-on: macos-15 + runs-on: macos-26 strategy: fail-fast: false matrix: @@ -50,25 +50,31 @@ jobs: XCODE_PROJECT: ${{ matrix.xcode_project }} XCODE_SCHEME: ${{ matrix.xcode_scheme }} XCODE_DESTINATION: ${{ matrix.xcode_destination }} + XCODE_TEST_PRODUCTS_PATH: .build/DevFoundation.xctestproducts + steps: + - name: Select Xcode 26.0.0 + run: sudo xcode-select -s /Applications/Xcode_26.0.0.app + - name: Checkout uses: actions/checkout@v4 + - name: Checkout DevBuilds uses: actions/checkout@v4 with: repository: DevKitOrganization/DevBuilds path: DevBuilds - - name: Download xccovPretty + + - name: Restore XCTestProducts if: github.event_name != 'push' - run: | - gh release download ${{ env.XCCOV_PRETTY_VERSION }} \ - --repo DevKitOrganization/xccovPretty \ - --pattern "xccovPretty-macos.tar.gz" \ - -O - | tar -xz - chmod +x xccovPretty - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + id: cache-xctestproducts-restore + uses: actions/cache/restore@v4 + with: + path: ${{ env.XCODE_TEST_PRODUCTS_PATH }} + key: cache-xctestproducts-${{ github.workflow }}-${{ matrix.platform }}-${{ github.sha }} + - uses: irgaly/xcode-cache@v1 + if: steps.cache-xctestproducts-restore.outputs.cache-hit != 'true' with: key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.platform }}-${{ github.sha }} restore-keys: | @@ -79,37 +85,50 @@ jobs: swiftpm-package-resolved-file: | **/*.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved Package.resolved - verbose: true - - name: Select Xcode 26.0.0 - run: | - sudo xcode-select -s /Applications/Xcode_26.0.0.app + - name: Build for Testing - run: | - "$DEV_BUILDS"/build_and_test.sh --action build-for-testing - - name: Test + id: build-for-testing + if: steps.cache-xctestproducts-restore.outputs.cache-hit != 'true' + run: ${{ env.DEV_BUILDS }}/build_and_test.sh --action build-for-testing + + - name: Test Without Building + id: test-without-building if: github.event_name != 'push' - run: | - "$DEV_BUILDS"/build_and_test.sh --action test + run: ${{ env.DEV_BUILDS }}/build_and_test.sh --action test-without-building + + - name: Save XCTestProducts + if: failure() && steps.cache-xctestproducts-restore.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + with: + path: ${{ env.XCODE_TEST_PRODUCTS_PATH }} + key: ${{ steps.cache-xctestproducts-restore.outputs.cache-primary-key }} + - name: Log Code Coverage if: github.event_name != 'push' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - xcrun xccov view --report .build/${{ matrix.xcode_scheme }}_test.xcresult --json \ - | ./xccovPretty --github-comment \ - > .build/xccovPretty-${{ matrix.platform }}.output - - name: Upload Logs - uses: actions/upload-artifact@v4 + gh release download ${{ env.XCCOV_PRETTY_VERSION }} \ + --repo DevKitOrganization/xccovPretty \ + --pattern "xccovPretty-macos.tar.gz" \ + -O - \ + | tar -xz + chmod +x xccovPretty + + xcrun xccov view --report .build/${XCODE_SCHEME}_test-without-building.xcresult --json \ + | ./xccovPretty --github-comment \ + > .build/xccovPretty-${{ matrix.platform }}.output + + - name: Upload Logs and XCResults if: success() || failure() - with: - name: Logs-${{ matrix.platform }} - path: .build/*.log - include-hidden-files: true - - name: Upload XCResults uses: actions/upload-artifact@v4 - if: success() || failure() with: - name: XCResults-${{ matrix.platform }} - path: .build/*.xcresult + name: Logs_and_XCResults-${{ matrix.platform }} + path: | + .build/*.log + .build/*.xcresult include-hidden-files: true + - name: Upload xccovPretty output if: github.event_name != 'push' uses: actions/upload-artifact@v4 @@ -117,18 +136,21 @@ jobs: name: xccovPrettyOutput-${{ matrix.platform }} path: .build/xccovPretty-${{ matrix.platform }}.output include-hidden-files: true + post-pr-comments: name: Post PR Comments needs: build-and-test + if: ${{ github.event_name == 'pull_request' }} permissions: pull-requests: write runs-on: ubuntu-latest - if: ${{ github.event_name == 'pull_request' }} + steps: - name: Download xccovPretty output uses: actions/download-artifact@v4 with: name: xccovPrettyOutput-macOS + - name: Post Code Coverage Comment uses: thollander/actions-comment-pull-request@v3 with: diff --git a/App/DevKeychain.xcodeproj/project.pbxproj b/App/DevKeychain.xcodeproj/project.pbxproj index 22167d8..e7d4503 100644 --- a/App/DevKeychain.xcodeproj/project.pbxproj +++ b/App/DevKeychain.xcodeproj/project.pbxproj @@ -300,6 +300,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -360,6 +361,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; @@ -394,7 +396,6 @@ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 15.5; @@ -433,7 +434,6 @@ "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 15.5; @@ -458,7 +458,6 @@ CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; MACOSX_DEPLOYMENT_TARGET = 15.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = devkitorganization.DevKeychainAppTests; @@ -482,7 +481,6 @@ CURRENT_PROJECT_VERSION = 1; DEAD_CODE_STRIPPING = YES; GENERATE_INFOPLIST_FILE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 18.5; MACOSX_DEPLOYMENT_TARGET = 15.5; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = devkitorganization.DevKeychainAppTests; diff --git a/App/DevKeychain.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/App/DevKeychain.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 116b308..71e36e9 100644 --- a/App/DevKeychain.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/App/DevKeychain.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "e7048cd6ad80369810fbc34c8b9cc4044b3cb2122fa1f6cf1c5172f9c2d75e84", + "originHash" : "b8a530ee7226c84a565126bfba741f190296a4e2640e77274408c16bd1203631", "pins" : [ { "identity" : "devtesting", "kind" : "remoteSourceControl", "location" : "https://github.com/Devkitorganization/devtesting", "state" : { - "revision" : "002b19df9088ac23827bcb571ea2f010857ae5c4", - "version" : "1.0.0" + "revision" : "7dcd0757a4fa146ffeede688d649953643014be9", + "version" : "1.2.0" } } ], diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f95126..9caf003 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # DevKeychain Changelog +## 1.1.0: September 24, 2025 + +This update bumps the minimum supported version of Apple’s OSes to 26. + + ## 1.0.0: September 2, 2025 This is the first release of DevKeychain. The initial feature set includes diff --git a/CLAUDE.md b/CLAUDE.md index 6a0c05c..f1c36e6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -7,8 +7,7 @@ repository. ## Project Overview DevKeychain is a Swift package providing a modern, type-safe interface to Apple's keychain -services. It supports iOS 18+, macOS 15+, tvOS 18+, visionOS 2+, and watchOS 11+, requiring -Swift 6.2+ toolchain. +services. It supports version 26 of Apple's OSes and requires a Swift 6.2+ toolchain. ## Common Development Commands @@ -137,7 +136,7 @@ pushing changes. - Swift 6.2+ toolchain required - Xcode 26.0 for CI/CD - - Apple platforms only (iOS 18+, macOS 15+, tvOS 18+, visionOS 2+, watchOS 11+) + - Apple platforms only (iOS/macOS/tvOS/visionOS/watchOS version 26) - Uses modern Swift concurrency features diff --git a/Package.resolved b/Package.resolved index 2e97fc7..f6512bf 100644 --- a/Package.resolved +++ b/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "cec5d9092a6d75c7b027fce01f57a087a666a44eef318938162022261738daef", + "originHash" : "f06526c11bdf149ff155cd0af3768d874ac1c852c6eaad9c672a968735b793a8", "pins" : [ { "identity" : "devtesting", "kind" : "remoteSourceControl", "location" : "https://github.com/DevKitOrganization/DevTesting", "state" : { - "revision" : "002b19df9088ac23827bcb571ea2f010857ae5c4", - "version" : "1.0.0" + "revision" : "7dcd0757a4fa146ffeede688d649953643014be9", + "version" : "1.2.0" } } ], diff --git a/Package.swift b/Package.swift index 0c2e571..f197a66 100644 --- a/Package.swift +++ b/Package.swift @@ -10,11 +10,11 @@ let swiftSettings: [SwiftSetting] = [ let package = Package( name: "DevKeychain", platforms: [ - .iOS(.v18), - .macOS(.v15), - .tvOS(.v18), - .visionOS(.v2), - .watchOS(.v11), + .iOS(.v26), + .macOS(.v26), + .tvOS(.v26), + .visionOS(.v26), + .watchOS(.v26), ], products: [ .library( @@ -23,7 +23,7 @@ let package = Package( ) ], dependencies: [ - .package(url: "https://github.com/DevKitOrganization/DevTesting", from: "1.0.0") + .package(url: "https://github.com/DevKitOrganization/DevTesting", from: "1.2.0") ], targets: [ .target( diff --git a/README.md b/README.md index 4256df0..1f00683 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # DevKeychain DevKeychain is a small Swift package that provides a Swift interface to Apple’s keychain services. -It is fully documented and tested and supports iOS 18+, macOS 15+, tvOS 18+, visionOS 2+, and -watchOS 11+. +It is fully documented and tested and supports version 26 of Apple’s OSes. + View our [changelog](CHANGELOG.md) to see what’s new.