Skip to content

feat: add iOS platform and upgrade Capacitor to v8#333

Open
theianjones wants to merge 1 commit intomainfrom
ij/capacitor-ios-setup
Open

feat: add iOS platform and upgrade Capacitor to v8#333
theianjones wants to merge 1 commit intomainfrom
ij/capacitor-ios-setup

Conversation

@theianjones
Copy link
Copy Markdown
Contributor

@theianjones theianjones commented Mar 16, 2026

Summary

  • Upgrade all Capacitor packages (core, cli, network, preferences) from v7 to v8
  • Add @capacitor/ios for iOS simulator/device builds
  • Initialize iOS native project (ios/ directory) via cap add ios

Test plan

  • Run pnpm --filter wodsmith-gameday build && pnpm --filter wodsmith-gameday exec cap sync ios
  • Open in Xcode (cap open ios) and build for simulator
  • Verify app loads on iOS simulator

🤖 Generated with Claude Code


Summary by cubic

Upgrade Capacitor to v8 and add the iOS platform for wodsmith-gameday. This enables building and running the app on iOS simulators and devices.

  • Dependencies

    • Upgraded @capacitor/core, @capacitor/cli, @capacitor/network, @capacitor/preferences to v8.
    • Added @capacitor/ios and generated the native iOS project under apps/wodsmith-gameday/ios.
  • Migration

    • Requires Node 22+ (needed by @capacitor/cli v8).
    • iOS minimum deployment target is 15.0.
    • Sync and build: pnpm --filter wodsmith-gameday build && pnpm --filter wodsmith-gameday exec cap sync ios, then cap open ios and build in Xcode.

Written for commit 0303e2d. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • iOS app support added for WODsmith Gameday.
  • Chores

    • Upgraded Capacitor framework from v7 to v8 for enhanced stability and compatibility.

- Upgrade @capacitor/core, @capacitor/cli, @capacitor/network,
  @capacitor/preferences from v7 to v8
- Add @capacitor/ios for iOS builds
- Initialize iOS native project via `cap add ios`

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Mar 16, 2026

Walkthrough

This PR establishes a complete iOS app environment for the wodsmith-gameday application using Capacitor framework. It adds Xcode project configuration, Swift Package Manager setup, app lifecycle handlers, storyboard resources, and asset catalogs. The package.json is updated to upgrade Capacitor from v7 to v8 and introduce iOS platform support.

Changes

Cohort / File(s) Summary
Build Artifacts & Ignores
apps/wodsmith-gameday/ios/.gitignore, apps/wodsmith-gameday/ios/App/CapApp-SPM/.gitignore
Adds standard iOS build artifact patterns and package manager cache directories to be ignored.
Xcode Project Structure
apps/wodsmith-gameday/ios/App/App.xcodeproj/project.pbxproj, apps/wodsmith-gameday/ios/App/App.xcodeproj/project.xcworkspace/...
Establishes complete Xcode project configuration with build targets, phases, Swift package integration, and workspace metadata for the App target with iOS 15.0 deployment.
App Lifecycle & Delegation
apps/wodsmith-gameday/ios/App/App/AppDelegate.swift
Implements UIApplicationDelegate with standard lifecycle methods (launch, resign active, enter background, become active, terminate) and URL/universal link handling delegated to Capacitor's ApplicationDelegateProxy.
Storyboards & UI Resources
apps/wodsmith-gameday/ios/App/App/Base.lproj/LaunchScreen.storyboard, apps/wodsmith-gameday/ios/App/App/Base.lproj/Main.storyboard
Defines launch and main UI storyboards with CAPBridgeViewController from Capacitor framework and full-screen splash image display.
Asset Catalogs
apps/wodsmith-gameday/ios/App/App/Assets.xcassets/...
Creates app icon and splash image asset sets with 1x/2x/3x scale variants and metadata manifests.
App Configuration
apps/wodsmith-gameday/ios/App/App/Info.plist, apps/wodsmith-gameday/ios/debug.xcconfig
Specifies bundle identifier (com.wodsmith.gameday), version placeholders, orientation settings, storyboard references, and debug configuration flag for Capacitor.
Swift Package Management
apps/wodsmith-gameday/ios/App/CapApp-SPM/Package.swift, apps/wodsmith-gameday/ios/App/CapApp-SPM/Sources/..., apps/wodsmith-gameday/ios/App/App.xcodeproj/.../.../Package.resolved
Defines local Swift package (CapApp-SPM) with Capacitor v8.2.0 dependencies and resolves package graph for Xcode integration.
Dependencies
apps/wodsmith-gameday/package.json
Upgrades Capacitor from v7 to v8, adds iOS platform package, and relocates @effect/platform from devDependencies to dependencies.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • zacjones93

Poem

🐰 A hop through iOS's door,
Capacitor holds the core,
Swift packages dance in place,
As wodsmith finds its native space,
From web to app, the journey's won! ✨📱

🚥 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
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title accurately summarizes the main changes: upgrading Capacitor to v8 and adding iOS platform support, which are the primary objectives of this changeset.

✏️ 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
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ij/capacitor-ios-setup
📝 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.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

No issues found across 23 files

Copy link
Copy Markdown
Contributor

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
apps/wodsmith-gameday/ios/App/App/Info.plist (2)

31-34: Consider removing outdated armv7 device capability requirement.

The armv7 architecture is 32-bit and was deprecated by Apple. iOS 11+ requires 64-bit devices only, and your Package.swift targets iOS 15 which exclusively supports arm64. This capability requirement is unnecessary and could be removed or replaced with arm64.

📱 Suggested update
 	<key>UIRequiredDeviceCapabilities</key>
 	<array>
-		<string>armv7</string>
+		<string>arm64</string>
 	</array>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/wodsmith-gameday/ios/App/App/Info.plist` around lines 31 - 34, The
Info.plist currently declares a UIRequiredDeviceCapabilities array containing
the string "armv7", which is outdated for an app targeting iOS 15; remove the
"armv7" entry (or replace it with "arm64" if you need to explicitly require
64-bit) so the UIRequiredDeviceCapabilities key no longer forces 32-bit-only
devices; update the <key>UIRequiredDeviceCapabilities</key> array to either be
removed entirely or to include "arm64" instead of "armv7".

1-50: Minor: Inconsistent indentation throughout the plist.

The file mixes tabs and spaces for indentation (e.g., line 6 uses a tab, line 10 uses spaces). This is common in auto-generated plists and won't affect functionality, but could be normalized for consistency if desired.

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

In `@apps/wodsmith-gameday/ios/App/App/Info.plist` around lines 1 - 50, The
Info.plist mixes tabs and spaces for indentation (e.g., around keys like
CAPACITOR_DEBUG and CFBundleDisplayName); normalize the file to use a single
indentation style (prefer spaces) consistently throughout (all <key> / <string>
/ <array> blocks), either by running a plist/XML formatter or converting tabs to
spaces in your editor and saving so entries like CAPACITOR_DEBUG,
CFBundleDisplayName, CFBundleIdentifier, UISupportedInterfaceOrientations, etc.
all follow the same indentation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/wodsmith-gameday/package.json`:
- Around line 15-18: Add an "engines" field to package.json to require Node.js
22+ by inserting "engines": { "node": ">=22.0.0" } at the top-level of the
package manifest; update the package.json near the existing dependency list
(refer to the entries "@capacitor/core", "@capacitor/ios", "@capacitor/network",
"@capacitor/preferences") so npm/yarn enforces the Node version, and also
confirm the iOS Xcode project deployment target is set to 15.0 or higher to
match Capacitor v8 requirements.

---

Nitpick comments:
In `@apps/wodsmith-gameday/ios/App/App/Info.plist`:
- Around line 31-34: The Info.plist currently declares a
UIRequiredDeviceCapabilities array containing the string "armv7", which is
outdated for an app targeting iOS 15; remove the "armv7" entry (or replace it
with "arm64" if you need to explicitly require 64-bit) so the
UIRequiredDeviceCapabilities key no longer forces 32-bit-only devices; update
the <key>UIRequiredDeviceCapabilities</key> array to either be removed entirely
or to include "arm64" instead of "armv7".
- Around line 1-50: The Info.plist mixes tabs and spaces for indentation (e.g.,
around keys like CAPACITOR_DEBUG and CFBundleDisplayName); normalize the file to
use a single indentation style (prefer spaces) consistently throughout (all
<key> / <string> / <array> blocks), either by running a plist/XML formatter or
converting tabs to spaces in your editor and saving so entries like
CAPACITOR_DEBUG, CFBundleDisplayName, CFBundleIdentifier,
UISupportedInterfaceOrientations, etc. all follow the same indentation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 8e2c5381-9d31-4b58-ab0e-3e96360e0d8d

📥 Commits

Reviewing files that changed from the base of the PR and between 6131b38 and 0303e2d.

⛔ Files ignored due to path filters (5)
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png is excluded by !**/*.png
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-1.png is excluded by !**/*.png
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732-2.png is excluded by !**/*.png
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/Splash.imageset/splash-2732x2732.png is excluded by !**/*.png
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (18)
  • apps/wodsmith-gameday/ios/.gitignore
  • apps/wodsmith-gameday/ios/App/App.xcodeproj/project.pbxproj
  • apps/wodsmith-gameday/ios/App/App.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  • apps/wodsmith-gameday/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  • apps/wodsmith-gameday/ios/App/App.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
  • apps/wodsmith-gameday/ios/App/App/AppDelegate.swift
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/AppIcon.appiconset/Contents.json
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/Contents.json
  • apps/wodsmith-gameday/ios/App/App/Assets.xcassets/Splash.imageset/Contents.json
  • apps/wodsmith-gameday/ios/App/App/Base.lproj/LaunchScreen.storyboard
  • apps/wodsmith-gameday/ios/App/App/Base.lproj/Main.storyboard
  • apps/wodsmith-gameday/ios/App/App/Info.plist
  • apps/wodsmith-gameday/ios/App/CapApp-SPM/.gitignore
  • apps/wodsmith-gameday/ios/App/CapApp-SPM/Package.swift
  • apps/wodsmith-gameday/ios/App/CapApp-SPM/README.md
  • apps/wodsmith-gameday/ios/App/CapApp-SPM/Sources/CapApp-SPM/CapApp-SPM.swift
  • apps/wodsmith-gameday/ios/debug.xcconfig
  • apps/wodsmith-gameday/package.json

Comment on lines +15 to +18
"@capacitor/core": "^8.2.0",
"@capacitor/ios": "^8.2.0",
"@capacitor/network": "^8.0.1",
"@capacitor/preferences": "^8.0.1",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

Capacitor v8 breaking changes from v7

💡 Result:

Key breaking changes when upgrading Capacitor v7 → v8 (core + official tooling/plugins):

  • Config

    • iOS appendUserAgent bug fix changes the resulting UA string (workaround: add a whitespace to ios.appendUserAgent if you must preserve the old value). (capacitorjs.jp)
    • android.adjustMarginsForEdgeToEdge removed (replaced by the new System Bars approach / CSS env vars). (capacitorjs.jp)
  • CLI

    • New iOS projects created by the CLI default to Swift Package Manager (SPM) templates (CocoaPods template requires --packagemanager CocoaPods). (capacitorjs.jp)
  • @capacitor/android

    • bridge_layout_main.xml removed; use capacitor_bridge_layout_main.xml instead. (capacitorjs.jp)
  • @capacitor/ios

    • Capacitor now emits CAPBridgeViewController notifications for viewDidAppear and viewWillTransition; if you were emitting these via extensions, remove your custom emission to avoid duplication. (capacitorjs.jp)
  • Runtime/toolchain minimums

    • Node.js 22+ required. (capacitorjs.jp)
    • iOS: raise deployment target to iOS 15.0 (and update Podfile if using CocoaPods). (capacitorjs.jp)
    • Android: update project mins (notably minSdkVersion 24, compile/targetSdkVersion 36) and update Gradle/AGP as per the guide. (capacitorjs.jp)
  • Official plugin behavior changes called out in the v8 guide

    • Geolocation: timeout is applied more broadly; may need higher values; watchPosition on Android can use new interval. (capacitorjs.jp)
    • Barcode Scanner / Screen Orientation: orientation locking options have no effect on large screens on Android 16+ (temporary manifest opt-out noted). (capacitorjs.jp)
    • Status Bar: removal of iOS-side files that emitted certain events; listen from @capacitor/ios instead. (capacitorjs.jp)

Citations:


🏁 Script executed:

# Check package.json for engines field and full content
cat -n apps/wodsmith-gameday/package.json

Repository: wodsmith/thewodapp

Length of output: 1309


🏁 Script executed:

# Look for capacitor.config.ts or similar
fd -t f "capacitor.config" apps/wodsmith-gameday/

Repository: wodsmith/thewodapp

Length of output: 103


🏁 Script executed:

# Check for .nvmrc or Node.js version files
fd -t f -E node_modules "\.nvmrc|\.node-version" apps/wodsmith-gameday/ || echo "No .nvmrc/.node-version found"

Repository: wodsmith/thewodapp

Length of output: 44


🏁 Script executed:

# Search for iOS and Android configuration files
find apps/wodsmith-gameday -type f \( -name "Podfile*" -o -name "build.gradle*" -o -name "*.plist" -o -name "AndroidManifest.xml" \) 2>/dev/null | head -20

Repository: wodsmith/thewodapp

Length of output: 208


🏁 Script executed:

# Check capacitor.config.ts content
cat -n apps/wodsmith-gameday/capacitor.config.ts

Repository: wodsmith/thewodapp

Length of output: 550


🏁 Script executed:

# Search for Android gradle files
fd -t f "build\.gradle" apps/wodsmith-gameday/

Repository: wodsmith/thewodapp

Length of output: 44


🏁 Script executed:

# Check iOS project settings for deployment target
find apps/wodsmith-gameday/ios -name "project.pbxproj" -exec head -50 {} \; 2>/dev/null | head -50

Repository: wodsmith/thewodapp

Length of output: 3705


🏁 Script executed:

# Check if there's documentation or CI config mentioning Node version
fd -t f -E node_modules "\.(github|gitlab|gitea)" apps/wodsmith-gameday/ 2>/dev/null || \
  rg -l "node.*version|22\.0|nodejs" apps/wodsmith-gameday/ --type yaml --type json 2>/dev/null || echo "No Node version config found"

Repository: wodsmith/thewodapp

Length of output: 44


🏁 Script executed:

# Check iOS deployment target in Info.plist
cat -n apps/wodsmith-gameday/ios/App/App/Info.plist 2>/dev/null | head -40

Repository: wodsmith/thewodapp

Length of output: 1660


🏁 Script executed:

# Check if this is a web-only app or if Android exists
ls -la apps/wodsmith-gameday/ | grep -E "^d.*\s(ios|android)"

Repository: wodsmith/thewodapp

Length of output: 115


🏁 Script executed:

# Search more broadly for any gradle or Android config
fd -t f "gradle|AndroidManifest" apps/wodsmith-gameday/ 2>/dev/null || echo "No Android gradle/manifest found"

Repository: wodsmith/thewodapp

Length of output: 44


Add Node.js 22+ requirement to package.json.

Capacitor v8 requires Node.js 22+, but the package.json lacks an engines field to enforce this. Add "engines": { "node": ">=22.0.0" } to ensure developers use a compatible Node.js version. The dependency versions are correctly aligned at v8.x, and the iOS SPM setup is compatible with v8. Verify iOS deployment target is set to 15.0 or higher in the Xcode project if you haven't already.

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

In `@apps/wodsmith-gameday/package.json` around lines 15 - 18, Add an "engines"
field to package.json to require Node.js 22+ by inserting "engines": { "node":
">=22.0.0" } at the top-level of the package manifest; update the package.json
near the existing dependency list (refer to the entries "@capacitor/core",
"@capacitor/ios", "@capacitor/network", "@capacitor/preferences") so npm/yarn
enforces the Node version, and also confirm the iOS Xcode project deployment
target is set to 15.0 or higher to match Capacitor v8 requirements.

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