Skip to content

Update dependencies and raise minimum to iOS 16#448

Merged
tobihagemann merged 2 commits intodevelopfrom
feature/update-dependencies
Mar 17, 2026
Merged

Update dependencies and raise minimum to iOS 16#448
tobihagemann merged 2 commits intodevelopfrom
feature/update-dependencies

Conversation

@tobihagemann
Copy link
Member

@tobihagemann tobihagemann commented Mar 17, 2026

Bumps all direct and transitive dependencies to their latest compatible versions. Raises the minimum deployment target from iOS 14 to iOS 16, required by cloud-access-swift 3.0 and MSAL 2.x.

Major version bumps: cloud-access-swift 2.0 to 3.0, GRDB 6 to 7, AppAuth 1.7 to 2.0, MSAL 1.5 to 2.9, Google API Client 3.4 to 5.2, GTMAppAuth 4.1 to 5.0. Minor bumps: CocoaLumberjack 3.8 to 3.9, SwiftECC 5.3 to 5.5, AWS SDK 2.35 to 2.41.

Code adaptations:

  • Fixed SwiftECC 5.4+ PEM line-width incompatibility with CryptoKit by using DER representation directly in JWEHelper
  • Made CachedVault.Columns public per GRDB 7 access-level requirements
  • Replaced FocusStateLegacy with native @FocusState + .focused() + .onSubmit() in WebDAV, S3, and Hub registration views
  • Replaced BackportedSubmitLabel with native .submitLabel()
  • Removed all dead #available(iOS 14/15) checks and @available decorators across ~20 files
  • Dropped SwiftUI-Introspect dependency entirely (no remaining consumers)

@tobihagemann tobihagemann added this to the 2.9.0 milestone Mar 17, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 17, 2026

Walkthrough

The PR raises the iOS deployment target to 16.0 in Xcode project and CryptomatorCommon Package.swift, updates many SwiftPM dependency pins, and removes the SwiftUI-Introspect dependency and related introspection-based fallbacks. It replaces legacy focus/backport APIs with standard @FocusState and .focused(...), removes several @available(iOS 14/15+) guards and conditional branches (table cell configuration, document picker setup, UI image rendering, etc.), deletes a custom SwiftUI+CustomKeyboard file, makes a VaultDBCache.Columns enum public, and switches a P384 private-key initializer to use PKCS#8 DER representation. Tests had iOS availability annotations removed.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely summarizes the main change: updating dependencies and raising the minimum iOS deployment target to iOS 16, which aligns with all the modifications shown in the changeset.
Description check ✅ Passed The PR description clearly explains dependency upgrades, iOS 16 migration, and code adaptations needed for new versions.

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

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/update-dependencies
📝 Coding Plan
  • Generate coding plan for human review comments

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.

Tip

CodeRabbit can enforce grammar and style rules using `languagetool`.

Configure the reviews.tools.languagetool setting to enable/disable rules and categories. Refer to the LanguageTool Community to learn more.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (2)
CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI+Focus.swift (1)

73-73: Use range-based introspection or plan for annual version updates.

SwiftUIIntrospect 1.3.0 only executes .introspect(.textField, on: .iOS(.v16, .v17, .v18)) on those explicitly listed versions. On iOS 19 and later, this closure will not run until those versions are added.

Two patterns are available:

  1. Maintain explicit versions (library default): Continue adding new iOS majors each year when bumping SwiftUIIntrospect.
  2. Use range-based predicate (future-proof): Import the Advanced SPI and use .iOS(.v16...) to include future iOS versions, accepting the risk that future UIKit changes might affect introspection behavior.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI`+Focus.swift
at line 73, The introspection call .introspect(.textField, on: .iOS(.v16, .v17,
.v18)) will stop running on iOS 19+; either switch to the range-based predicate
by importing the Advanced SPI and changing the call to .introspect(.textField,
on: .iOS(.v16...)) so future iOS majors are included, or explicitly maintain the
yearly list (keep .iOS(.v16, .v17, .v18)) and add/update a comment/todo to bump
versions annually; update the call in SwiftUI+Focus.swift where
.introspect(.textField, on: .iOS(.v16, .v17, .v18)) is defined and ensure the
required Advanced SPI import is added if you choose the range approach.
CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI+CustomKeyboard.swift (1)

16-66: Consider removing the BackportedSubmitLabel wrapper in a follow-up.

With iOS 16 as the minimum deployment target, SubmitLabel is universally available. The BackportedSubmitLabel enum now serves only as a pass-through wrapper. Consider deprecating it and migrating callers to use SubmitLabel directly in a future cleanup PR.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI`+CustomKeyboard.swift
around lines 16 - 66, This BackportedSubmitLabel enum is now redundant;
deprecate or remove it and migrate callers to use SubmitLabel directly: mark
BackportedSubmitLabel as deprecated (or delete it) and update all usages that
reference BackportedSubmitLabel or its submitLabel computed property to instead
use SubmitLabel values (replace variables, function parameters, and
switch/returns that map BackportedSubmitLabel -> submitLabel with SubmitLabel
directly), then remove the submitLabel computed property and run tests to ensure
no remaining references to BackportedSubmitLabel or submitLabel remain.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In
`@CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI`+CustomKeyboard.swift:
- Around line 16-66: This BackportedSubmitLabel enum is now redundant; deprecate
or remove it and migrate callers to use SubmitLabel directly: mark
BackportedSubmitLabel as deprecated (or delete it) and update all usages that
reference BackportedSubmitLabel or its submitLabel computed property to instead
use SubmitLabel values (replace variables, function parameters, and
switch/returns that map BackportedSubmitLabel -> submitLabel with SubmitLabel
directly), then remove the submitLabel computed property and run tests to ensure
no remaining references to BackportedSubmitLabel or submitLabel remain.

In `@CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI`+Focus.swift:
- Line 73: The introspection call .introspect(.textField, on: .iOS(.v16, .v17,
.v18)) will stop running on iOS 19+; either switch to the range-based predicate
by importing the Advanced SPI and changing the call to .introspect(.textField,
on: .iOS(.v16...)) so future iOS majors are included, or explicitly maintain the
yearly list (keep .iOS(.v16, .v17, .v18)) and add/update a comment/todo to bump
versions annually; update the call in SwiftUI+Focus.swift where
.introspect(.textField, on: .iOS(.v16, .v17, .v18)) is defined and ensure the
required Advanced SPI import is added if you choose the range approach.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 23945130-3af0-4b24-8768-4da4f99d7067

📥 Commits

Reviewing files that changed from the base of the PR and between 694a2b1 and 0ebdd11.

📒 Files selected for processing (8)
  • Cryptomator.xcodeproj/project.pbxproj
  • Cryptomator.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • CryptomatorCommon/Package.swift
  • CryptomatorCommon/Sources/CryptomatorCommonCore/JWEHelper.swift
  • CryptomatorCommon/Sources/CryptomatorCommonCore/Manager/VaultDBCache.swift
  • CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI+CustomKeyboard.swift
  • CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI+Focus.swift
  • CryptomatorCommon/Sources/CryptomatorCommonCore/SwiftUI/SwiftUI+ListBackground.swift

@tobihagemann tobihagemann merged commit a233450 into develop Mar 17, 2026
5 of 6 checks passed
@tobihagemann tobihagemann deleted the feature/update-dependencies branch March 20, 2026 08:02
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.

1 participant