Skip to content

feat: Add Xcode 26 support#1888

Merged
mtrezza merged 12 commits into
parse-community:masterfrom
dplewis:xcode-26
Apr 24, 2026
Merged

feat: Add Xcode 26 support#1888
mtrezza merged 12 commits into
parse-community:masterfrom
dplewis:xcode-26

Conversation

@dplewis

@dplewis dplewis commented Apr 10, 2026

Copy link
Copy Markdown
Member

New Pull Request Checklist

Approach

Add support for XCode 26. This feature uses arm64 (Apple Sillicon).

Summary by CodeRabbit

  • Chores

    • Added official Xcode 26 support with expanded platform test matrix, adjusted CI artifact naming, and moved test-results discovery into coverage step.
    • Updated Ruby to 4.0.0, Bundler install to v4.0.10, and added a small Ruby gem dependency.
    • Skipped a few additional unit tests in test configuration.
  • Documentation

    • Added Xcode 26 compatibility row (iOS/macOS/tvOS/watchOS 26), Sept 2025 release date, Parse SDK support >= 6.2.0.
    • Improved docs build to run SwiftPM resolution and more robust dependency discovery/cleanup.

@parse-github-assistant

parse-github-assistant Bot commented Apr 10, 2026

Copy link
Copy Markdown

🚀 Thanks for opening this pull request! We appreciate your effort in improving the project. Please let us know once your pull request is ready for review.

Tip

  • Keep pull requests small. Large PRs will be rejected. Break complex features into smaller, incremental PRs.
  • Use Test Driven Development. Write failing tests before implementing functionality. Ensure tests pass.
  • Group code into logical blocks. Add a short comment before each block to explain its purpose.
  • We offer conceptual guidance. Coding is up to you. PRs must be merge-ready for human review.
  • Our review focuses on concept, not quality. PRs with code issues will be rejected. Use an AI agent.
  • Human review time is precious. Avoid review ping-pong. Inspect and test your AI-generated code.

Note

Please respond to review comments from AI agents just like you would to comments from a human reviewer. Let the reviewer resolve their own comments, unless they have reviewed and accepted your commit, or agreed with your explanation for why the feedback was incorrect.

Caution

Pull requests must be written using an AI agent with human supervision. Pull requests written entirely by a human will likely be rejected, because of lower code quality, higher review effort and the higher risk of introducing bugs. Please note that AI review comments on this pull request alone do not satisfy this requirement. Our CI and AI review are safeguards, not development tools. If many issues are flagged, rethink your development approach. Invest more effort in planning and design rather than using review cycles to fix low-quality code.

@coderabbitai

coderabbitai Bot commented Apr 10, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: a0001385-b54c-4b3f-916d-a06476d8d3a7

📥 Commits

Reviewing files that changed from the base of the PR and between 68fa46f and b69bbbe.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/ci.yml

📝 Walkthrough

Walkthrough

Added Xcode 26 support across CI and docs; adjusted CI matrix, artifact naming, and TEST_RESULTS discovery; added explicit SwiftPM resolution in workflows; bumped Ruby and Bundler versions; added cgi gem; updated an Xcode scheme's skipped tests; improved jazzy docs script to find Bolts headers and enable strict shell behavior.

Changes

Cohort / File(s) Summary
CI Workflows
.github/workflows/ci.yml, .github/workflows/release-manual-docs.yml
Added CI_XCODE_26 and Xcode 26.4 entries to test-xcode matrix (new build:starters and per-platform test:* jobs using DEVELOPER_DIR: CI_XCODE_26); deterministic artifact naming ${{ matrix.name }}-logs; moved TEST_RESULTS discovery into coverage-conversion (only when matrix.script == 'test:ios'); added swift package resolve step after submodule init.
Docs
README.md
Inserted Xcode 26 compatibility row (iOS/macOS/watchOS/tvOS 26; Release Date: Sept 2025; Parse Apple SDK Support >= 6.2.0).
Contributor Setup
CONTRIBUTING.md, .ruby-version
Updated Bundler install to gem install bundler -v 4.0.10; bumped .ruby-version from ruby-3.1.0 to 4.0.0.
Ruby Gems
Gemfile
Added gem 'cgi', '0.5.1'.
Xcode Scheme
Parse/Parse.xcodeproj/xcshareddata/xcschemes/Parse-iOS.xcscheme
Added three QueryCachedControllerTests identifiers to SkippedTests for ParseUnitTests-iOS.xctest.
Docs generation script
Scripts/jazzy.sh
Enabled set -eo pipefail; added scanning of SwiftPM build locations to locate Bolts headers; fail-fast with descriptive error if not found; copy discovered Bolts dir into ./Parse/Bolts and register trap cleanup; removed inline strict prefix before running bundle exec jazzy.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • mtrezza
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning The PR description is incomplete. While it includes the checklist and approach section, the 'Issue Description' section required by the template is missing, and the Issue Description checklist items are unchecked. Complete the 'Issue Description' section with 'Closes: ' by referencing the related issue. Check the vulnerability and issue-linkage checklist items if applicable.
Engage In Review Feedback ❓ Inconclusive The provided context lacks substantive review feedback comments, change requests, or discussion threads needed to assess whether the author engaged with reviewer feedback. Provide full review comment history from the PR including all reviewer comments, requested changes, and the author's responses to each piece of feedback.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title 'feat: Add Xcode 26 support' begins with the required 'feat:' prefix and clearly describes the main objective of adding Xcode 26 support, which is confirmed by the changeset modifications.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Security Check ✅ Passed Security scan identified no problematic code patterns or vulnerabilities. Variables in shell scripts are properly quoted, safe hardcoded paths used, no insecure gem sources, and no known CVEs.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 actionlint (1.7.12)
.github/workflows/ci.yml

could not read ".github/workflows/ci.yml": open .github/workflows/ci.yml: no such file or directory

🔧 YAMLlint (1.38.0)
.github/workflows/ci.yml

[Errno 2] No such file or directory: '.github/workflows/ci.yml'

🔧 Checkov (3.2.519)
.github/workflows/ci.yml

2026-04-17 14:50:00,023 [MainThread ] [ERROR] Template file not found: .github/workflows/ci.yml
2026-04-17 14:50:00,028 [MainThread ] [ERROR] Template file not found: .github/workflows/ci.yml
2026-04-17 14:50:00,056 [MainThread ] [ERROR] Template file not found: .github/workflows/ci.yml
2026-04-17 14:50:00,061 [MainThread ] [ERROR] Failed to invoke function /usr/local/lib/python3.11/dist-packages/checkov/common/runners/object_runner. with .github/workflows/ci.yml
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/checkov/common/parallelizer/parallel_runner.py", line 88, in func_wrapper
result = original_func(item)
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/checkov/common/runners/object_runner.py", line 74, in
results = parallel_runner.run_function(lambda f: (f, self._parse_file(f)), files_to_load)
^^^^^^^^^^^^^^^^^^^
File "/us

... [truncated 8994 characters] ...

[Errno 2] No such file or directory: '.github/workflows/ci.yml'
2026-04-17 14:50:00,115 [MainThread ] [ERROR] Exception traceback:
Traceback (most recent call last):
File "/usr/local/lib/python3.11/dist-packages/checkov/main.py", line 647, in run
self.scan_reports = runner_registry.run(
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/checkov/common/runners/runner_registry.py", line 177, in run
for result in parallel_runner_results:
File "/usr/local/lib/python3.11/dist-packages/checkov/common/parallelizer/parallel_runner.py", line 118, in _run_function_multiprocess_fork
raise v.internal_exception.with_traceback(v.internal_exception.traceback)
FileNotFoundError: [Errno 2] No such file or directory: '.github/workflows/ci.yml'


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/ci.yml:
- Line 70: The matrix entry macosVersion set to "26-arm64" produces an invalid
runner label after the workflow prefixes "macos-" (resulting in
"macos-26-arm64"); update all occurrences of matrix.macosVersion values (e.g.,
the entries currently "26-arm64" at the referenced lines) to the documented
macOS 26 label "26" so the concatenation yields "macos-26" and the Xcode 26 jobs
can start; apply the same change to the other listed occurrences (lines
referenced in the comment).
- Around line 65-67: Replace simulator device names that aren't present on
macOS-26 arm64 images: locate the iosDeviceModel entries and change "iPhone 16"
to "iPhone 17" (for all occurrences), and locate the watchDeviceModel entries
and change "Apple Watch Series 10 (46mm)" to a Series 11 variant (e.g., "Apple
Watch Series 11 (49mm)") so the destination strings resolve on the macOS-26
arm64 runner.

In @.ruby-version:
- Line 1: Update Gemfile.lock's BUNDLED WITH entry to a Bundler 4.x version
before merging the change to .ruby-version (4.0.0): regenerate Gemfile.lock
using Bundler 4.0.0+ (run bundle _4.x_ install or update on a machine with
Bundler 4.x) so the Gemfile.lock's "BUNDLED WITH" reflects a 4.x Bundler and
then commit the updated Gemfile.lock alongside the .ruby-version change to avoid
CI bundle install failures.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ad1bc6bf-13a6-40e3-9b2f-33eb32939125

📥 Commits

Reviewing files that changed from the base of the PR and between 634bc04 and 16b15d9.

⛔ Files ignored due to path filters (1)
  • Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (3)
  • .github/workflows/ci.yml
  • .ruby-version
  • README.md

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml Outdated
Comment thread .ruby-version

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 25-27: Replace incompatible simulator device names in
.github/workflows/ci.yml by updating every iosDeviceModel and watchDeviceModel
entry that currently uses "iPhone 17" to "iPhone 16" and any "Apple Watch Series
11 (46mm)" to "Apple Watch Series 10 (46mm)"; specifically edit the
iosDeviceModel and watchDeviceModel keys (used in build:starters, test:ios,
test:parse_live_query:watchos jobs) so the devices are compatible with Xcode 16
/ iOS 18.5 / watchOS 11.5.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1bb2baf4-fa7a-48d3-93ba-d984bb231436

📥 Commits

Reviewing files that changed from the base of the PR and between 16b15d9 and 85c1320.

⛔ Files ignored due to path filters (1)
  • Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • CONTRIBUTING.md
✅ Files skipped from review due to trivial changes (1)
  • CONTRIBUTING.md

Comment thread .github/workflows/ci.yml Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/workflows/ci.yml (1)

12-12: Prefer the stable 26.4 symlink over the exact patch bundle.

Line 12 pins Xcode_26.4.0.app. The macOS 26 arm64 runner image exposes Xcode_26.4.app as a stable symlink pointing to the same bundle, and when a new patch ships, the exact patch-specific path may become stale. The minor-version symlink is the recommended choice for stability.

Suggested change
-  CI_XCODE_26: /Applications/Xcode_26.4.0.app/Contents/Developer
+  CI_XCODE_26: /Applications/Xcode_26.4.app/Contents/Developer
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml at line 12, Update the CI Xcode path to use the
stable minor-version symlink instead of the patch-specific bundle: replace the
value for CI_XCODE_26 that currently points to
/Applications/Xcode_26.4.0.app/Contents/Developer with
/Applications/Xcode_26.4.app/Contents/Developer so the runner remains valid when
patch releases are rolled out.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/ci.yml:
- Line 49: Update the workflow lane label so it matches the actual watchOS
version being tested: change the "LiveQuery Module, watchOS 10" label to reflect
the configured watchOsVersion '11.5' (or alternatively change the watchOsVersion
to '10' if that was intended). Locate the label string "LiveQuery Module,
watchOS 10" and the watchOsVersion key to ensure they are consistent and make
the label accurately describe the lane being executed.
- Around line 61-100: The ARTIFACT_NAME generation currently uses matrix.script
which can duplicate across Xcode versions; update the "Generate Environment
Variables" step to set ARTIFACT_NAME from matrix.name instead of matrix.script
(use ARTIFACT_NAME: ${{ matrix.name }}-logs) so each matrix row (matrix.name)
yields a unique artifact name and avoids upload collisions with
actions/upload-artifact@v4.

---

Nitpick comments:
In @.github/workflows/ci.yml:
- Line 12: Update the CI Xcode path to use the stable minor-version symlink
instead of the patch-specific bundle: replace the value for CI_XCODE_26 that
currently points to /Applications/Xcode_26.4.0.app/Contents/Developer with
/Applications/Xcode_26.4.app/Contents/Developer so the runner remains valid when
patch releases are rolled out.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d563a5f8-adf6-48ca-a9be-a255aa0dbf7d

📥 Commits

Reviewing files that changed from the base of the PR and between 85c1320 and bc63b3b.

📒 Files selected for processing (1)
  • .github/workflows/ci.yml

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 14, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 14, 2026
@codecov

codecov Bot commented Apr 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.49%. Comparing base (dd05d41) to head (b69bbbe).
⚠️ Report is 82 commits behind head on master.

Additional details and impacted files
@@             Coverage Diff             @@
##           master    #1888       +/-   ##
===========================================
+ Coverage   64.24%   82.49%   +18.24%     
===========================================
  Files         201      282       +81     
  Lines       23233    30778     +7545     
===========================================
+ Hits        14926    25390    +10464     
+ Misses       8307     5388     -2919     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dplewis dplewis requested a review from a team April 14, 2026 18:05
@dplewis dplewis mentioned this pull request Apr 14, 2026
4 tasks
@mtrezza

mtrezza commented Apr 14, 2026

Copy link
Copy Markdown
Member

@coderabbitai resume

@coderabbitai

coderabbitai Bot commented Apr 14, 2026

Copy link
Copy Markdown
✅ Actions performed

Reviews resumed.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 14, 2026

@mtrezza mtrezza left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

  • Parse-iOS.xcscheme adds three tests to SkippedTests: testFindObjectsCacheElseNetworkCacheResult, testFindObjectsCacheOnly, testFindObjectsNetworkElseCache. This scheme runs for both Xcode 16 and Xcode 26 lanes, so coverage regresses on the already-supported stack too. The PR body doesn't explain why these are skipped and no tracking issue is linked. Please document the reason (Xcode 26 regression? flake? environment?).

  • The new Xcode 26 row lists >= 6.1.1, but 6.1.1 is the currently released version and does not contain this change. Xcode 26 support will first ship in the next release — >= 6.2.0.

  • /Applications/Xcode_26.4.0.app/Contents/Developer works today but breaks the moment the runner image rolls forward a patch. Prefer the stable minor symlink /Applications/Xcode_26.4.app/Contents/Developer.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Apr 16, 2026
@dplewis

dplewis commented Apr 17, 2026

Copy link
Copy Markdown
Member Author

@mtrezza These failing tests are caused by #1863. I reverted the changes and the test passed. The cached NSDictionary objects are being transformed into PFObjects which is causing the tests to fail / crash. New issue should be open to address these concerns.

@mtrezza

mtrezza commented Apr 20, 2026

Copy link
Copy Markdown
Member

Seems to be a simulator avail issue?

xcodebuild: error: Unable to find a device matching the provided destination specifier:
		{ platform:iOS Simulator, OS:18.5, name:iPhone 16 }

	The requested device could not be found because no available devices matched the request.

	Available destinations for the "Parse-iOS" scheme:
		{ platform:macOS, arch:arm64, variant:Mac Catalyst, id:dd44f9202747dfeccd70e91da505b03db5e1c1e7, name:My Mac }
		{ platform:macOS, arch:x86_64, variant:Mac Catalyst, id:dd44f9202747dfeccd70e91da505b03db5e1c1e7, name:My Mac }
		{ platform:macOS, arch:arm64, variant:Designed for [iPad,iPhone], id:dd44f9202747dfeccd70e91da505b03db5e1c1e7, name:My Mac }
		{ platform:iOS, id:dvtdevice-DVTiPhonePlaceholder-iphoneos:placeholder, name:Any iOS Device }
		{ platform:iOS Simulator, id:dvtdevice-DVTiOSDeviceSimulatorPlaceholder-iphonesimulator:placeholder, name:Any iOS Simulator Device }
		{ platform:macOS, variant:Mac Catalyst, name:Any Mac }
iOS Tests Failed!

@dplewis

dplewis commented Apr 20, 2026

Copy link
Copy Markdown
Member Author

Try re running the CI

@dplewis dplewis requested a review from mtrezza April 21, 2026 14:40
@mtrezza

mtrezza commented Apr 21, 2026

Copy link
Copy Markdown
Member

done

@dplewis

dplewis commented Apr 21, 2026

Copy link
Copy Markdown
Member Author

@mtrezza Looks like the test suite is flaky. This doesn't show in the CI. CI says all tests passed but test failed in the background. This is the artifact from the failed build.

Screenshot 2026-04-21 at 11 47 48 AM

@mtrezza

mtrezza commented Apr 22, 2026

Copy link
Copy Markdown
Member

Can this be merged?

@dplewis

dplewis commented Apr 24, 2026

Copy link
Copy Markdown
Member Author

I believe this can be merged

@mtrezza mtrezza merged commit 5a81221 into parse-community:master Apr 24, 2026
27 of 31 checks passed
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.

2 participants