Skip to content

Commit e94c4d5

Browse files
authoredJan 28, 2025··
feat: Remove support for Xcode 14 (#1835)
BREAKING CHANGE: This release removes support for Xcode 14.
1 parent 393a300 commit e94c4d5

File tree

9 files changed

+200
-37
lines changed

9 files changed

+200
-37
lines changed
 

‎.github/workflows/ci.yml

+97-16
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,106 @@ on:
88
branches:
99
- "**"
1010
env:
11-
CI_XCODE_14: /Applications/Xcode_14.2.app/Contents/Developer
1211
CI_XCODE_15: /Applications/Xcode_15.4.0.app/Contents/Developer
13-
CI_XCODE_16: /Applications/Xcode_16.0.app/Contents/Developer
12+
CI_XCODE_16: /Applications/Xcode_16.1.0.app/Contents/Developer
1413
jobs:
15-
tests:
14+
test-xcode:
1615
env:
1716
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1817
timeout-minutes: 45
1918
strategy:
2019
matrix:
21-
script:
22-
- test:ios
23-
- test:macos
24-
- test:parse_live_query:all
25-
- xcode14 # runs build:starters on Xcode 14
26-
- xcode15 # runs build:starters on Xcode 15
27-
- xcode16 # runs build:starters on Xcode 16
20+
include:
21+
# Xcode
22+
- name: Xcode 15
23+
script: build:starters
24+
iosVersion: '18.1'
25+
iosDeviceModel: iPhone 16
26+
watchOsVersion: '11.1'
27+
watchDeviceModel: Apple Watch Series 10 (46mm)
28+
tvOsVersion: '18.1'
29+
tvDeviceModel: Apple TV
30+
macosVersion: 14
31+
developerDir: CI_XCODE_15
32+
- name: Xcode 16
33+
script: build:starters
34+
iosVersion: '18.1'
35+
iosDeviceModel: iPhone 16
36+
watchOsVersion: '11.1'
37+
watchDeviceModel: Apple Watch Series 10 (46mm)
38+
tvOsVersion: '18.1'
39+
tvDeviceModel: Apple TV
40+
macosVersion: 14
41+
developerDir: CI_XCODE_16
42+
# Core Module
43+
- name: Core Module, iOS 17
44+
script: test:ios
45+
iosVersion: '17.5'
46+
iosDeviceModel: iPhone 15
47+
macosVersion: 15
48+
developerDir: CI_XCODE_16
49+
- name: Core Module, iOS 18
50+
script: test:ios
51+
iosVersion: '18.1'
52+
iosDeviceModel: iPhone 16
53+
macosVersion: 15
54+
developerDir: CI_XCODE_16
55+
- name: Core Module, macOS 14
56+
script: test:macos
57+
macosVersion: 14
58+
developerDir: CI_XCODE_16
59+
- name: Core Module, macOS 15
60+
script: test:macos
61+
macosVersion: 15
62+
developerDir: CI_XCODE_16
63+
# LiveQuery Module
64+
- name: LiveQuery Module, iOS 17
65+
script: test:parse_live_query:ios
66+
iosVersion: '17.5'
67+
iosDeviceModel: iPhone 15
68+
macosVersion: 15
69+
developerDir: CI_XCODE_16
70+
- name: LiveQuery Module, iOS 18
71+
script: test:parse_live_query:ios
72+
iosVersion: '18.1'
73+
iosDeviceModel: iPhone 16
74+
macosVersion: 15
75+
developerDir: CI_XCODE_16
76+
- name: LiveQuery Module, macOS 14
77+
script: test:parse_live_query:osx
78+
macosVersion: 14
79+
developerDir: CI_XCODE_15
80+
- name: LiveQuery Module, macOS 15
81+
script: test:parse_live_query:osx
82+
macosVersion: 15
83+
developerDir: CI_XCODE_16
84+
- name: LiveQuery Module, watchOS 10
85+
script: test:parse_live_query:watchos
86+
watchOsVersion: '10.5'
87+
watchDeviceModel: Apple Watch Series 9 (45mm)
88+
macosVersion: 15
89+
developerDir: CI_XCODE_15
90+
- name: LiveQuery Module, watchOS 11
91+
script: test:parse_live_query:watchos
92+
watchOsVersion: '11.1'
93+
watchDeviceModel: Apple Watch Series 10 (46mm)
94+
macosVersion: 15
95+
developerDir: CI_XCODE_16
96+
- name: LiveQuery Module, tvOS 17
97+
script: test:parse_live_query:tvos
98+
tvOsVersion: '17.5'
99+
tvDeviceModel: Apple TV
100+
macosVersion: 15
101+
developerDir: CI_XCODE_16
102+
- name: LiveQuery Module, tvOS 18
103+
script: test:parse_live_query:tvos
104+
tvOsVersion: '18.1'
105+
tvDeviceModel: Apple TV
106+
macosVersion: 15
107+
developerDir: CI_XCODE_16
28108
fail-fast: false
29-
runs-on: ${{ ((matrix.script == 'xcode15' || matrix.script == 'xcode16') && 'macos-14') || 'macos-13' }}
109+
runs-on: macos-${{ matrix.macosVersion }}
110+
name: ${{ matrix.name }}
30111
steps:
31112
- uses: actions/checkout@v4
32113
- name: Cache SPM
@@ -49,9 +130,9 @@ jobs:
49130
- name: Submodules
50131
run: git submodule update --init --recursive
51132
- name: Build-Test
52-
run: set -o pipefail && env NSUnbufferedIO=YES bundle exec rake ${{ ((matrix.script == 'xcode14' || matrix.script == 'xcode15' || matrix.script == 'xcode16') && 'build:starters') || matrix.script }}
133+
run: set -o pipefail && env NSUnbufferedIO=YES IOS_VERSION="${{ matrix.iosVersion }}" IOS_DEVICE_MODEL="${{ matrix.iosDeviceModel }}" WATCH_DEVICE_MODEL="${{ matrix.watchDeviceModel }}" WATCH_OS_VERSION="${{ matrix.watchOsVersion }}" TV_DEVICE_MODEL="${{ matrix.tvDeviceModel }}" TV_OS_VERSION="${{ matrix.tvOsVersion }}" bundle exec rake ${{ matrix.script }}
53134
env:
54-
DEVELOPER_DIR: ${{ (matrix.script == 'xcode15' && env.CI_XCODE_15) || (matrix.script == 'xcode16' && env.CI_XCODE_16) || env.CI_XCODE_14 }}
135+
DEVELOPER_DIR: ${{ env[matrix.developerDir] }}
55136
- name: Generate Environment Variables
56137
if: ${{ always() }}
57138
env:
@@ -68,7 +149,7 @@ jobs:
68149
echo "Build Result Location: $BUILD_RESULTS"
69150
- name: Upload Artifact Logs
70151
if: ${{ failure() }}
71-
uses: actions/upload-artifact@v3
152+
uses: actions/upload-artifact@v4
72153
with:
73154
name: ${{ env.ARTIFACT_NAME }}
74155
path: |
@@ -103,7 +184,7 @@ jobs:
103184
plugin: xcode
104185
file: ${{ env.COVERAGE_PATH }}
105186
docs:
106-
runs-on: macos-13
187+
runs-on: macos-14
107188
timeout-minutes: 15
108189
steps:
109190
- uses: actions/checkout@v4
@@ -117,7 +198,7 @@ jobs:
117198
run: |
118199
./Scripts/jazzy.sh
119200
env:
120-
DEVELOPER_DIR: ${{ env.CI_XCODE_14 }}
201+
DEVELOPER_DIR: ${{ env.CI_XCODE_16 }}
121202
concurrency:
122203
group: ${{ github.workflow }}-${{ github.ref }}
123204
cancel-in-progress: true

‎.github/workflows/release-automated.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ on:
33
push:
44
branches: [ master, release, alpha, beta ]
55
env:
6-
CI_XCODE_14: '/Applications/Xcode_14.2.app/Contents/Developer'
6+
CI_XCODE_16: /Applications/Xcode_16.1.0.app/Contents/Developer
77

88
jobs:
99
release:
10-
runs-on: macos-13
10+
runs-on: macos-14
1111
outputs:
1212
current_tag: ${{ steps.tag.outputs.current_tag }}
1313
steps:
@@ -46,7 +46,7 @@ jobs:
4646
publish-docs:
4747
needs: release
4848
if: needs.release.outputs.current_tag != ''
49-
runs-on: macos-13
49+
runs-on: macos-14
5050
steps:
5151
- name: Checkout repository
5252
uses: actions/checkout@v4
@@ -62,7 +62,7 @@ jobs:
6262
run: |
6363
./Scripts/jazzy.sh
6464
env:
65-
DEVELOPER_DIR: ${{ env.CI_XCODE_14 }}
65+
DEVELOPER_DIR: ${{ env.CI_XCODE_16 }}
6666
- name: Deploy Jazzy Docs
6767
uses: peaceiris/actions-gh-pages@v3
6868
with:

‎.github/workflows/release-manual-docs.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ on:
66
default: ''
77
description: 'Version tag:'
88
env:
9-
CI_XCODE_14: '/Applications/Xcode_14.2.app/Contents/Developer'
9+
CI_XCODE_16: /Applications/Xcode_16.1.0.app/Contents/Developer
1010

1111
jobs:
1212
publish-docs:
1313
if: github.event.inputs.tag != ''
14-
runs-on: macos-13
14+
runs-on: macos-14
1515
steps:
1616
- name: Checkout repository
1717
uses: actions/checkout@v4
@@ -27,7 +27,7 @@ jobs:
2727
run: |
2828
./Scripts/jazzy.sh
2929
env:
30-
DEVELOPER_DIR: ${{ env.CI_XCODE_14 }}
30+
DEVELOPER_DIR: ${{ env.CI_XCODE_16 }}
3131
- name: Deploy Jazzy Docs
3232
uses: peaceiris/actions-gh-pages@v3
3333
with:

‎Gemfile

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
source 'https://rubygems.org'
22

33
# Docs
4-
gem 'jazzy', '~> 0.15.3'
4+
gem 'jazzy', '0.15.3'
55

66
# Development
7-
gem 'xcpretty', '~> 0.4.0'
8-
gem 'rake', '~> 13.2.1'
9-
gem 'plist', '~> 3.7.1'
7+
gem 'xcpretty', '0.3.0'
8+
gem 'rake', '13.2.1'
9+
gem 'plist', '3.7.1'

‎Gemfile.lock

+7-7
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ GEM
103103
rake (13.2.1)
104104
redcarpet (3.6.0)
105105
rexml (3.3.9)
106-
rouge (3.28.0)
106+
rouge (2.0.7)
107107
ruby-macho (2.5.1)
108108
sassc (2.4.0)
109109
ffi (~> 1.9)
@@ -123,18 +123,18 @@ GEM
123123
colored2 (~> 3.1)
124124
nanaimo (~> 0.4.0)
125125
rexml (>= 3.3.6, < 4.0)
126-
xcpretty (0.4.0)
127-
rouge (~> 3.28.0)
126+
xcpretty (0.3.0)
127+
rouge (~> 2.0.7)
128128

129129
PLATFORMS
130130
arm64-darwin
131131
x86_64-darwin
132132

133133
DEPENDENCIES
134-
jazzy (~> 0.15.3)
135-
plist (~> 3.7.1)
136-
rake (~> 13.2.1)
137-
xcpretty (~> 0.4.0)
134+
jazzy (= 0.15.3)
135+
plist (= 3.7.1)
136+
rake (= 13.2.1)
137+
xcpretty (= 0.3.0)
138138

139139
BUNDLED WITH
140140
2.5.22

‎Parse/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS.xcscheme

+9
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@
8181
<Test
8282
Identifier = "ExtensionDataSharingTests">
8383
</Test>
84+
<Test
85+
Identifier = "InstallationUnitTests/testInstallationHasApplicationBadge">
86+
</Test>
87+
<Test
88+
Identifier = "InstallationUnitTests/testInstallationSetsApplicationBadge">
89+
</Test>
8490
<Test
8591
Identifier = "PFTestCase">
8692
</Test>
@@ -90,6 +96,9 @@
9096
<Test
9197
Identifier = "ParseClientConfigurationTests/testExtensionDataSharing">
9298
</Test>
99+
<Test
100+
Identifier = "ParseClientConfigurationTests/testServerValidation">
101+
</Test>
93102
</SkippedTests>
94103
</TestableReference>
95104
</Testables>

‎Parse/Parse.xcodeproj/xcshareddata/xcschemes/Parse-macOS.xcscheme

+5
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
BlueprintName = "ParseUnitTests-macOS"
6363
ReferencedContainer = "container:Parse.xcodeproj">
6464
</BuildableReference>
65+
<SkippedTests>
66+
<Test
67+
Identifier = "ParseClientConfigurationTests/testServerValidation">
68+
</Test>
69+
</SkippedTests>
6570
</TestableReference>
6671
</Testables>
6772
</TestAction>

‎README.md

+24
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ A library that gives you access to the powerful Parse Server backend from your i
3232
---
3333

3434
- [Getting Started](#getting-started)
35+
- [Compatibility](#compatibility)
36+
- [Parse Server](#parse-server)
37+
- [Xcode, iOS, macOS](#xcode-ios-macos)
3538
- [How Do I Contribute?](#how-do-i-contribute)
3639
- [Dependencies](#dependencies)
3740

@@ -49,6 +52,27 @@ The easiest way to install the SDK is via Swift Package Manager.
4952

5053
Take a look at the public [documentation][docs] & [API][api] and start building.
5154

55+
## Compatibility
56+
57+
### Parse Server
58+
59+
Parse Apple SDK is compatible with the following versions of Parse Server.
60+
61+
| Parse Apple SDK | Parse Server |
62+
|-----------------|--------------|
63+
| 1.0.0 | >= 1.0.0 |
64+
65+
### Xcode, iOS, macOS
66+
67+
The Parse Apple SDK is continuously tested with the most recent releases of Xcode to ensure compatibility. We follow the annual release schedule of Xcode to support the current and previous major Xcode version.
68+
69+
| Xcode Version | iOS Version | macOS Version | macOS Version | Release Date | End-of-Support Date | Parse Apple SDK Support |
70+
|---------------|-------------|---------------|---------------|----------------|---------------------|-------------------------|
71+
| Xcode 13 | iOS 15 | macOS 12 | watchOS 8 | September 2021 | October 2023 | >= 1.19.3 <2.7.2 |
72+
| Xcode 14 | iOS 16 | macOS 13 | watchOS 9 | September 2022 | October 2024 | >= 2.7.2 <= 5.0.0 |
73+
| Xcode 15 | iOS 17 | macOS 14 | watchOS 10 | September 2023 | October 2025 | >= 3.0.0 |
74+
| Xcode 16 | iOS 18 | macOS 15 | watchOS 11 | September 2024 | tbd | >= 4.2.0 |
75+
5276
## How Do I Contribute?
5377

5478
We want to make contributing to this project as easy and transparent as possible. Please refer to the [Contribution Guidelines][contributing].

‎Rakefile

+47-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,23 @@ require_relative 'Vendor/xctoolchain/Scripts/xctask/build_task'
1212
SCRIPT_PATH = File.expand_path(File.dirname(__FILE__))
1313
starters_path = File.join(SCRIPT_PATH, 'ParseStarterProject')
1414

15-
ios_simulator = 'platform="iOS Simulator",name="iPhone 14"'
16-
tvos_simulator = 'platform="tvOS Simulator",name="Apple TV"'
17-
watchos_simulator = 'platform="watchOS Simulator",name="Apple Watch Series 8 (45mm)"'
15+
ios_version = ENV.fetch('IOS_VERSION')
16+
ios_device_model = ENV.fetch('IOS_DEVICE_MODEL')
17+
tvos_version = ENV.fetch('TV_OS_VERSION')
18+
tv_device_model = ENV.fetch('TV_DEVICE_MODEL')
19+
watchos_version = ENV.fetch('WATCH_OS_VERSION')
20+
watch_device_model = ENV.fetch('WATCH_DEVICE_MODEL')
21+
22+
puts "IOS_VERSION: #{ios_version}"
23+
puts "IOS_DEVICE_MODEL: #{ios_device_model}"
24+
puts "TV_OS_VERSION: #{tvos_version}"
25+
puts "TV_DEVICE_MODEL: #{tv_device_model}"
26+
puts "WATCH_OS_VERSION: #{watchos_version}"
27+
puts "WATCH_DEVICE_MODEL: #{watch_device_model}"
28+
29+
ios_simulator = "platform=\"iOS Simulator\",name=\"#{ios_device_model}\",OS=\"#{ios_version}\""
30+
tvos_simulator = "platform=\"tvOS Simulator\",name=\"#{tv_device_model}\",OS=\"#{tvos_version}\""
31+
watchos_simulator = "platform=\"watchOS Simulator\",name=\"#{watch_device_model}\",OS=\"#{watchos_version}\""
1832

1933
build_action = [XCTask::BuildAction::CLEAN, XCTask::BuildAction::BUILD];
2034

@@ -82,6 +96,9 @@ namespace :build do
8296
end
8397

8498
task :objc do
99+
puts 'Running iOS ObjC Starter Project'
100+
puts "IOS_VERSION: #{ios_version}"
101+
puts "IOS_DEVICE_MODEL: #{ios_device_model}"
85102
project = 'ParseStarterProject'
86103
ios_starters_path = File.join(starters_path, 'iOS', project)
87104
task = XCTask::BuildTask.new do |t|
@@ -101,6 +118,9 @@ namespace :build do
101118
end
102119

103120
task :swift do
121+
puts 'Running iOS Swift Starter Project'
122+
puts "IOS_VERSION: #{ios_version}"
123+
puts "IOS_DEVICE_MODEL: #{ios_device_model}"
104124
project = 'ParseStarterProject-Swift'
105125
ios_starters_path = File.join(starters_path, 'iOS', project)
106126
task = XCTask::BuildTask.new do |t|
@@ -127,6 +147,7 @@ namespace :build do
127147
end
128148

129149
task :objc do
150+
puts 'Running macOS ObjC Starter Project'
130151
macos_starter_folder = File.join(starters_path, 'OSX', 'ParseOSXStarterProject')
131152
task = XCTask::BuildTask.new do |t|
132153
t.directory = macos_starter_folder
@@ -144,6 +165,7 @@ namespace :build do
144165
end
145166

146167
task :swift do
168+
puts 'Running macOS Swift Starter Project'
147169
macos_starter_folder = File.join(starters_path, 'OSX', 'ParseOSXStarterProject-Swift')
148170
task = XCTask::BuildTask.new do |t|
149171
t.directory = macos_starter_folder
@@ -169,6 +191,9 @@ namespace :build do
169191
end
170192

171193
task :swift do
194+
puts 'Running tvOS Swift Starter Project'
195+
puts "TV_OS_VERSION: #{tvos_version}"
196+
puts "TV_DEVICE_MODEL: #{tv_device_model}"
172197
tvos_starter_folder = File.join(starters_path, 'tvOS', 'ParseStarterProject-Swift')
173198
task = XCTask::BuildTask.new do |t|
174199
t.directory = tvos_starter_folder
@@ -194,6 +219,9 @@ namespace :build do
194219
end
195220

196221
task :swift do
222+
puts 'Running watchOS Swift Starter Project'
223+
puts "WATCH_OS_VERSION: #{watchos_version}"
224+
puts "WATCH_DEVICE_MODEL: #{watch_device_model}"
197225
watchos_starter_folder = File.join(starters_path, 'watchOS', 'ParseStarterProject-Swift')
198226
task = XCTask::BuildTask.new do |t|
199227
t.directory = watchos_starter_folder
@@ -218,6 +246,7 @@ namespace :build do
218246
end
219247

220248
task :objc do
249+
puts 'Running Live Query macOS ObjC Starter Project'
221250
live_query_starter_folder = File.join(SCRIPT_PATH, 'ParseLiveQuery', 'Examples')
222251
task = XCTask::BuildTask.new do |t|
223252
t.directory = live_query_starter_folder
@@ -235,6 +264,7 @@ namespace :build do
235264
end
236265

237266
task :swift do
267+
puts 'Running Live Query macOS Swift Starter Project'
238268
live_query_starter_folder = File.join(SCRIPT_PATH, 'ParseLiveQuery', 'Examples')
239269
task = XCTask::BuildTask.new do |t|
240270
t.directory = live_query_starter_folder
@@ -265,6 +295,9 @@ end
265295
namespace :test do
266296
desc 'Run iOS Tests'
267297
task :ios do |_, args|
298+
puts 'Running iOS Tests'
299+
puts "IOS_VERSION: #{ios_version}"
300+
puts "IOS_DEVICE_MODEL: #{ios_device_model}"
268301
task = XCTask::BuildTask.new do |t|
269302
t.directory = SCRIPT_PATH
270303
t.workspace = 'Parse.xcworkspace'
@@ -283,6 +316,7 @@ namespace :test do
283316

284317
desc 'Run macOS Tests'
285318
task :macos do |_, args|
319+
puts 'Running macOS Tests'
286320
task = XCTask::BuildTask.new do |t|
287321
t.directory = SCRIPT_PATH
288322
t.workspace = 'Parse.xcworkspace'
@@ -307,6 +341,9 @@ namespace :test do
307341
end
308342

309343
task :ios do
344+
puts 'Running ParseLiveQuery iOS Tests'
345+
puts "IOS_VERSION: #{ios_version}"
346+
puts "IOS_DEVICE_MODEL: #{ios_device_model}"
310347
task = XCTask::BuildTask.new do |t|
311348
t.directory = SCRIPT_PATH
312349
t.workspace = 'Parse.xcworkspace'
@@ -324,6 +361,9 @@ namespace :test do
324361
end
325362

326363
task :tvos do
364+
puts 'Running ParseLiveQuery tvOS Tests'
365+
puts "TV_OS_VERSION: #{tvos_version}"
366+
puts "TV_DEVICE_MODEL: #{tv_device_model}"
327367
task = XCTask::BuildTask.new do |t|
328368
t.directory = SCRIPT_PATH
329369
t.workspace = 'Parse.xcworkspace'
@@ -340,6 +380,9 @@ namespace :test do
340380
end
341381

342382
task :watchos do
383+
puts 'Running ParseLiveQuery watchOS Tests'
384+
puts "WATCH_OS_VERSION: #{watchos_version}"
385+
puts "WATCH_DEVICE_MODEL: #{watch_device_model}"
343386
task = XCTask::BuildTask.new do |t|
344387
t.directory = SCRIPT_PATH
345388
t.workspace = 'Parse.xcworkspace'
@@ -356,6 +399,7 @@ namespace :test do
356399
end
357400

358401
task :osx do
402+
puts 'Running ParseLiveQuery macOS Tests'
359403
task = XCTask::BuildTask.new do |t|
360404
t.directory = SCRIPT_PATH
361405
t.workspace = 'Parse.xcworkspace'

0 commit comments

Comments
 (0)
Please sign in to comment.