From e1738b51198fa96c323fbc3676e9252b2a56a362 Mon Sep 17 00:00:00 2001
From: Dan Federman <dfed@me.com>
Date: Tue, 23 Apr 2024 08:31:42 -0700
Subject: [PATCH] Get CI running Xcode 15 (#310)

* Get CI running Xcode 14

* Add SPM build too

* Use checkout@v4

* Get Carthage build on Xcode 15

* Use Xcode 15 and macOS-14 when possible
---
 .github/workflows/ci.yml | 51 +++++++++++++++++++++++++++++-----------
 Scripts/build.swift      |  6 ++---
 2 files changed, 40 insertions(+), 17 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 495f9dde..41a9804c 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -24,7 +24,7 @@ jobs:
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -48,7 +48,7 @@ jobs:
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -58,23 +58,24 @@ jobs:
       - name: Upload Coverage Reports
         if: success()
         run: Scripts/upload-coverage-reports.sh ${{ matrix.platforms }}
-  xcode-build-14:
-    name: Xcode 14 Build
-    runs-on: macOS-13
+  xcode-build-15:
+    name: Xcode 15 Build
+    runs-on: macOS-14
     strategy:
       matrix:
         platforms: [
           'iOS_16,tvOS_16,watchOS_9',
+          'iOS_17,tvOS_17,watchOS_10',
         ]
       fail-fast: false
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
-        run: sudo xcode-select --switch /Applications/Xcode_14.3.app/Contents/Developer
+        run: sudo xcode-select --switch /Applications/Xcode_15.3.app/Contents/Developer
       - name: Build and Test Framework
         run: Scripts/build.swift ${{ matrix.platforms }} xcode
       - name: Upload Coverage Reports
@@ -86,7 +87,7 @@ jobs:
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -95,15 +96,15 @@ jobs:
         run: bundle exec pod lib lint --verbose --fail-fast --swift-version=5.4
   carthage:
     name: Carthage
-    runs-on: macOS-13
+    runs-on: macOS-14
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
-        run: sudo xcode-select --switch /Applications/Xcode_14.3.app/Contents/Developer
+        run: sudo xcode-select --switch /Applications/Xcode_15.3.app/Contents/Developer
       - name: Install Carthage
         run: brew outdated carthage || brew upgrade carthage
       - name: Build Framework
@@ -122,7 +123,7 @@ jobs:
       fail-fast: false
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -151,7 +152,7 @@ jobs:
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -173,7 +174,7 @@ jobs:
     timeout-minutes: 30
     steps:
       - name: Checkout Repo
-        uses: actions/checkout@v3
+        uses: actions/checkout@v4
       - name: Bundle Install
         run: bundle install
       - name: Select Xcode Version
@@ -182,3 +183,25 @@ jobs:
         run: Scripts/github/prepare-simulators.sh ${{ matrix.platforms }}
       - name: Build Framework
         run: Scripts/build.swift ${{ matrix.platforms }} spm
+  spm-14:
+    name: SPM Build macOS 14
+    runs-on: macOS-14
+    strategy:
+      matrix:
+        platforms: [
+          'iOS_17,tvOS_17,watchOS_10',
+          'macOS_14',
+        ]
+      fail-fast: false
+    timeout-minutes: 30
+    steps:
+      - name: Checkout Repo
+        uses: actions/checkout@v4
+      - name: Bundle Install
+        run: bundle install
+      - name: Select Xcode Version
+        run: sudo xcode-select --switch /Applications/Xcode_15.3.app/Contents/Developer
+      - name: Prepare Simulator Runtimes
+        run: Scripts/github/prepare-simulators.sh ${{ matrix.platforms }}
+      - name: Build Framework
+        run: Scripts/build.swift ${{ matrix.platforms }} spm
diff --git a/Scripts/build.swift b/Scripts/build.swift
index 8d615a76..7a14c9aa 100755
--- a/Scripts/build.swift
+++ b/Scripts/build.swift
@@ -52,7 +52,7 @@ enum Platform: String, CustomStringConvertible {
         case .iOS_16:
             return "platform=iOS Simulator,OS=16.4,name=iPad Pro (12.9-inch) (6th generation)"
         case .iOS_17:
-            return "platform=iOS Simulator,OS=17.0,name=iPad Pro (12.9-inch) (6th generation)"
+            return "platform=iOS Simulator,OS=17.4,name=iPad Pro (12.9-inch) (6th generation)"
 
         case .tvOS_13:
             return "platform=tvOS Simulator,OS=13.4,name=Apple TV"
@@ -63,7 +63,7 @@ enum Platform: String, CustomStringConvertible {
         case .tvOS_16:
             return "platform=tvOS Simulator,OS=16.4,name=Apple TV"
         case .tvOS_17:
-            return "platform=tvOS Simulator,OS=17.0,name=Apple TV"
+            return "platform=tvOS Simulator,OS=17.4,name=Apple TV"
 
         case .macOS_11,
              .macOS_12,
@@ -80,7 +80,7 @@ enum Platform: String, CustomStringConvertible {
         case .watchOS_9:
             return "OS=9.4,name=Apple Watch Series 6 - 44mm"
         case .watchOS_10:
-            return "OS=10.0,name=Apple Watch Series 6 - 44mm"
+            return "OS=10.4,name=Apple Watch Series 6 - 44mm"
         }
     }