Skip to content

Migration ticket: bump deployment target to iOS 18 - #5

Merged
zigdanis merged 3 commits into
masterfrom
migrate/ios18-deployment-target
Jun 12, 2026
Merged

Migration ticket: bump deployment target to iOS 18#5
zigdanis merged 3 commits into
masterfrom
migrate/ios18-deployment-target

Conversation

@zigdanis

@zigdanis zigdanis commented Jun 7, 2026

Copy link
Copy Markdown
Owner

What

Adds migrations/04-ios18-deployment-target.md — an agent prompt to raise the minimum deployment target from iOS 12 → iOS 18 across all targets and clean up the backwards-compat code the bump makes dead. Carries the ticket/prompt only.

Scope (per the prompt)

  • IPHONEOS_DEPLOYMENT_TARGET = 18.0 on app, Core, Widget, tests
  • Audit + delete all #available / @available guards for iOS < 18
  • classAnyObject in protocols; audit dead Obfuscator
  • Update README requirements

⚠️ Device support: iOS 18 drops everything older than the iPhone XS/XR generation. This is the explicitly requested floor.

Overlap note

This overlaps PR #4 (chore/tooling-modernization), whose sub-task B proposed iOS 16. Per decision, PR #4 stays as-is and this granular ticket is the source of truth for the deployment target (iOS 18).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Breaking Changes

    • Minimum iOS version requirement increased to iOS 18.0+
  • Chores

    • Modernized Swift protocol syntax across the application
    • Removed legacy credential obfuscation code and logging utilities
    • Updated project configuration to iOS 18.0 deployment target
    • Simplified widget background rendering and removed platform-specific version checks

A prompt that fires an agent to plan and implement raising the minimum
deployment target to iOS 18 across all targets and removing now-dead
backwards-compatibility code.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 7, 2026

Copy link
Copy Markdown

Review Change Stack

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Free

Run ID: bc5ba285-d829-4939-8408-8cb942c5deb3

📥 Commits

Reviewing files that changed from the base of the PR and between 8263eec and f92452d.

📒 Files selected for processing (22)
  • Core/Constants.swift
  • Core/Logging.swift
  • Core/iOS Framework APIs/Obfuscator.swift
  • GrowingUp.xcodeproj/project.pbxproj
  • GrowingUp/3rd Party Libraries/WDImagePicker/WDImageCropViewController.swift
  • GrowingUp/3rd Party Libraries/WDImagePicker/WDImagePicker.swift
  • GrowingUp/Others/UIColor+Extensions.swift
  • GrowingUp/Scenes/EditPerson/Cells/DateTableViewCell/DateCellPresenter.swift
  • GrowingUp/Scenes/EditPerson/Cells/ImagePickersTableViewCell/ImagesCellPresenter.swift
  • GrowingUp/Scenes/EditPerson/Cells/ImagePickersTableViewCell/ImagesTableViewCell.swift
  • GrowingUp/Scenes/EditPerson/Cells/TextFieldTableViewCell/TextFieldCellPresenter.swift
  • GrowingUp/Scenes/EditPerson/Cells/TextFieldTableViewCell/TextFieldTableViewCell.swift
  • GrowingUp/Scenes/EditPerson/Cells/ToggleTableViewCell/ToggleCellPresenter.swift
  • GrowingUp/Scenes/EditPerson/Cells/ToggleTableViewCell/ToggleTableViewCell.swift
  • GrowingUp/Scenes/EditPerson/Edit/EditPersonPresenter.swift
  • GrowingUp/Scenes/EditPerson/Views/DatePickerView.swift
  • GrowingUp/Scenes/EditPerson/Views/RemoveButtonFooter.swift
  • GrowingUp/Scenes/PersonOverview/PersonOverviewViewController.swift
  • GrowingUp/Scenes/PersonsList/PersonsListViewController.swift
  • Readme.md
  • Widget/GrowingUpWidget.swift
  • migrations/04-ios18-deployment-target.md
💤 Files with no reviewable changes (3)
  • Core/Logging.swift
  • Core/iOS Framework APIs/Obfuscator.swift
  • Core/Constants.swift

📝 Walkthrough

Walkthrough

This PR upgrades the GrowingUp app to target iOS 18.0 as the minimum deployment target. It removes legacy obfuscation code, cleans up credential constants, modernizes protocol constraints throughout the codebase, and eliminates version-conditional code paths made safe by the higher iOS requirement.

Changes

iOS 18 Deployment Target Upgrade

Layer / File(s) Summary
Migration plan and build configuration
migrations/04-ios18-deployment-target.md, GrowingUp.xcodeproj/project.pbxproj, Readme.md
Deployment target raised to iOS 18.0 across all build configurations. Project metadata updated to Xcode 16 format (objectVersion 50→56). README requirements updated to reflect iOS 18.0+ baseline.
Remove legacy obfuscation and credentials
Core/Constants.swift, Core/Logging.swift, Core/iOS Framework APIs/Obfuscator.swift, GrowingUp.xcodeproj/project.pbxproj
Obfuscator.swift deleted entirely. Obfuscated credential constants (obfusSBAppId, obfusSBAppSecret, obfusSBEncryption, obfusMPToken) removed from Constants.swift. Commented-out logging setup code cleared from Logging.setup(). File removed from project build phases.
Modernize protocol constraints to AnyObject
GrowingUp/3rd Party Libraries/WDImagePicker/*, GrowingUp/Scenes/EditPerson/Cells/*/..., GrowingUp/Scenes/EditPerson/Views/*, GrowingUp/Scenes/PersonsList/PersonsListViewController.swift
Thirteen protocol declarations updated from legacy : class constraint to modern : AnyObject syntax. Changes span delegate protocols (WDImagePickerDelegate, WDImageCropControllerDelegate, ToggleCellDelegate, RemoveButtonDelegate, DatePickerViewDelegate), presenter protocols (DateCellPresenter, ImagesCellPresenter, TextFieldCellPresenter, ToggleCellPresenter, EditPersonPresenterDelegate), and view protocols (ImagesCellView, ImagesCellViewDelegate, TextFieldCellView, TextFieldObserver, PersonsListView).
Remove iOS version availability guards
GrowingUp/Others/UIColor+Extensions.swift, GrowingUp/Scenes/PersonOverview/PersonOverviewViewController.swift, Widget/GrowingUpWidget.swift
iOS 12+ availability conditional removed from UIColor.bgColor(for:) — now directly uses traitCollection.userInterfaceStyle without fallback. PersonOverviewViewController simplified to unconditionally use safeAreaLayoutGuide.topAnchor and fixed emoji placeholder. Widget background helper removed; direct .containerBackground(.fill.tertiary, for: .widget) applied, eliminating iOS 17+ conditional.

🎯 3 (Moderate) | ⏱️ ~20 minutes

🐰 A deployment dance from sixteen to eighteen,
Old code pruned, protocols polished, clean!
Constraints now modern, guards no more,
iOS 18 opens the framework door! 🎉


Note

🎁 Summarized by CodeRabbit Free

Your organization is on the Free plan. CodeRabbit will generate a high-level summary and a walkthrough for each pull request. For a comprehensive line-by-line review, please upgrade your subscription to CodeRabbit Pro by visiting https://app.coderabbit.ai/login.

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

zigdanis and others added 2 commits June 12, 2026 19:43
- IPHONEOS_DEPLOYMENT_TARGET = 18.0 on app, Core, Widget and test targets;
  objectVersion 50 -> 56, LastUpgradeCheck -> 2600 (Xcode 26)
- Remove availability guards now dead under the iOS 18 floor:
  iOS 11 placeholder fallback (PersonOverview), iOS 12 userInterfaceStyle
  guard (UIColor+Extensions), iOS 17 containerBackground shim (Widget)
- Replace deprecated topLayoutGuide with safeAreaLayoutGuide
- protocol X: class -> AnyObject across all protocols
- Delete dead Obfuscator.swift plus its commented-out call sites and
  obfuscated constants in Logging/Constants
- Readme requirements: iOS 18.0+

SWIFT_VERSION stays 5.0: Swift 6 language mode hinges on the concurrency
direction discussed in PR #8, so it is deferred there.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@zigdanis

Copy link
Copy Markdown
Owner Author

Implemented the ticket in f92452d (after merging master, which had already moved the floor 12→16 via the WidgetKit PR — so this commit is 16→18).

Done

  • IPHONEOS_DEPLOYMENT_TARGET = 18.0 on all targets/configs; objectVersion 50→56; LastUpgradeCheck → 2600 (Xcode 26).
  • Deleted all availability guards dead under iOS 18: iOS 11 placeholder fallback (PersonOverviewViewController), iOS 12 userInterfaceStyle guard (UIColor+Extensions), iOS 17 containerBackground shim (GrowingUpWidget). Also replaced deprecated topLayoutGuide with safeAreaLayoutGuide.
  • protocol X: classAnyObject everywhere (16 protocols incl. WDImagePicker).
  • Obfuscator audit: confirmed dead (only commented-out call sites) — deleted Core/iOS Framework APIs/Obfuscator.swift, the commented SwiftyBeaver/Mixpanel block in Logging.setup(), and the obfus* byte arrays in Constants.swift.
  • Readme requirements → iOS 18.0+.

Verified: xcodebuild build + full test suite on iPhone 17 Pro simulator — 69 tests, 0 failures.

Deliberate deviations

Device support (per ticket): iOS 18 floor drops everything older than iPhone XS/XR generation — implemented as explicitly requested.

🤖 Generated with Claude Code

@zigdanis
zigdanis merged commit f1e2678 into master Jun 12, 2026
1 check passed
@zigdanis
zigdanis deleted the migrate/ios18-deployment-target branch June 12, 2026 17:09
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