Conversation
Reverts "chore: bump main to 9.0.0-dev.0 (ionic-team#8320)" and “chore: update latest workflow to only allow pointing at 8.x” This reverts commit c5476c8 and 0412d46
…8338) Co-authored-by: Mark Anderson <mark.anderson@outsystems.com>
Co-authored-by: Mark Anderson <mark.anderson@outsystems.com> Co-authored-by: Mark Anderson <emer@emer.net>
Co-authored-by: Stein Jakob Nordbø <steinjak@gmail.com> Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
…onic-team#7528) Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com> Co-authored-by: jcesarmobile <jcesarmobile@gmail.com>
Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
Closes ionic-team#8367 Fixes regression introduced by ionic-team#8357
…onic-team#8391) Co-authored-by: Pedro Bilro <pedro.gustavo.bilro@outsystems.com>
…eam#8377) Co-authored-by: jcesarmobile <jcesarmobile@gmail.com>
…ic-team#8351) Co-authored-by: OS-pedrogustavobilro <pedro.gustavo.bilro@outsystems.com>
📝 WalkthroughWalkthroughThis pull request merges upstream Capacitor code into what appears to be a forked variant, introducing version bumps from 8.0.8 to 8.3.0 across multiple packages, migrating from Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9844a46482
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <<<<<<< HEAD | ||
| "@types/node": "^24.10.1", | ||
| "@types/tar": "^6.1.2", | ||
| "eslint": "^8.57.1", | ||
| "eslint-plugin-import": "^2.31.0", |
There was a problem hiding this comment.
Remove unresolved merge markers from package.json
This commit leaves Git conflict markers (<<<<<<<, =======, >>>>>>>) in the root package.json, which makes the file invalid JSON. In this state, bun install and any tooling that reads the workspace manifest will fail immediately, so the repository cannot be built or verified.
Useful? React with 👍 / 👎.
| <<<<<<< HEAD | ||
| const iosVersion = getMajorMinoriOSVersion(config); | ||
| ======= | ||
| const iosVersion = getMajoriOSVersion(config); | ||
| const packageTraits = config.app.extConfig.experimental?.ios?.spm?.packageTraits ?? {}; |
There was a problem hiding this comment.
Delete conflict markers in SPM utility source
Unresolved merge markers were committed into cli/src/util/spm.ts inside generatePackageText, leaving the TypeScript file syntactically invalid. This prevents the CLI from compiling/transpiling, so the change is not buildable even after dependency installation.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 13
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (7)
android/CHANGELOG.md (1)
6-252:⚠️ Potential issue | 🔴 CriticalResolve leftover Git conflict markers before merging.
This file still contains
<<<<<<<,=======, and>>>>>>>markers, which means the merge is incomplete and the changelog is currently invalid.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/CHANGELOG.md` around lines 6 - 252, The changelog contains unresolved git conflict markers; remove the conflict blocks marked by <<<<<<< HEAD, =======, and >>>>>>> upstream/main and reconcile the duplicate release sections (e.g., the "## [8.0.8]" / "# [8.3.0]" blocks) into a single, valid changelog entry: decide which version content to keep or merge notes, delete the markers, ensure heading syntax is consistent (## / # as needed) and that the file parses as valid markdown with no leftover conflict markers.cli/CHANGELOG.md (1)
6-280:⚠️ Potential issue | 🔴 CriticalFinalize the merge by resolving changelog conflict markers.
<<<<<<< HEAD/=======/>>>>>>> upstream/mainare still present, so the file is in a conflicted state.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@cli/CHANGELOG.md` around lines 6 - 280, The changelog contains unresolved git conflict markers (<<<<<<< HEAD, =======, >>>>>>> upstream/main) mixing two release sections (the local 8.0.8/8.0.x block and the upstream 8.3.0/8.2.0 block); remove the conflict markers and produce a single coherent changelog by deciding which release history to keep (e.g., keep the upstream 8.3.0..8.1.0 entries and discard the duplicate local 8.0.x block, or merge both histories in chronological order), ensuring headings (e.g., "# [8.3.0]" and "## [8.0.8]") and their bullet lists are valid Markdown and no <<<<<<</=======/>>>>>>> tokens remain.ios/CHANGELOG.md (1)
6-225:⚠️ Potential issue | 🔴 CriticalRemove unresolved merge-conflict markers in changelog.
The changelog still contains Git conflict markers (
<<<<<<<,=======,>>>>>>>), so this merge is not fully resolved.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ios/CHANGELOG.md` around lines 6 - 225, The changelog contains unresolved Git conflict markers (<<<<<<<, =======, >>>>>>>) between the local block starting with "## [8.0.8]" and the upstream block starting with "# [8.3.0]"; open ios/CHANGELOG.md, remove the conflict marker lines and the duplicate block you don't want to keep so the file contains one coherent changelog (either keep the local "## [8.0.8]" series or the upstream "# [8.3.0]" series), ensure headings like "## [8.0.8]" / "# [8.3.0]" and commit references remain properly formatted and no leftover marker lines remain.CHANGELOG.md (1)
6-523:⚠️ Potential issue | 🔴 CriticalRemove the unresolved merge block from the generated changelog.
This section still contains
<<<<<<<,=======, and>>>>>>>, so the sync conflict was never actually resolved. It will ship broken markdown, and this file should not be hand-merged in the first place.As per coding guidelines,
CHANGELOG.md: Do not manually editCHANGELOG.md; it is managed automatically by CI/CD.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CHANGELOG.md` around lines 6 - 523, The generated CHANGELOG.md contains an unresolved git merge conflict (markers <<<<<<<, =======, >>>>>>>) that must be removed; open the CHANGELOG.md, locate and delete the entire conflict block (including the conflict markers and the duplicate/unmerged sections), then regenerate or restore the changelog via the automated CI/CD changelog generation process rather than hand-editing to ensure the file is produced correctly; ensure no residual conflict markers remain before committing.cli/src/ios/update.ts (1)
54-59:⚠️ Potential issue | 🟠 MajorAwait Cordova
Package.swiftgeneration before building the SPM manifest.This new branch assumes the per-plugin
Package.swiftfiles already exist, butgenerateCordovaPackageFiles()currently fires async writes without awaiting them. That makesgeneratePackageFile()race with incomplete plugin package generation.Proposed fix
async function generateCordovaPackageFiles(cordovaPlugins: Plugin[], config: Config) { - cordovaPlugins.map((plugin: any) => { - generateCordovaPackageFile(plugin, config); - }); + await Promise.all(cordovaPlugins.map((plugin) => generateCordovaPackageFile(plugin, config))); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@cli/src/ios/update.ts` around lines 54 - 59, The call to generateCordovaPackageFiles(cordovaPlugins, config) starts async file writes but doesn’t wait for them to finish, causing generatePackageFile to race; update generateCordovaPackageFiles to return a Promise that only resolves once all per-plugin Package.swift writes complete (e.g., collect write promises and await Promise.all or make internal actions fully async/await), keep the await generateCordovaPackageFiles(...) call here so checkPluginsForPackageSwift and generatePackageFile run only after all plugin Package.swift files are written.android/package.json (1)
2-39:⚠️ Potential issue | 🔴 CriticalResolve the merge markers before this can ship.
Line 2 and Line 34 still contain conflict markers, which makes this file invalid JSON. The pipeline is already failing
npm installwithEJSONPARSE, so this is a hard blocker until the final package identity and peer dependencies are reconciled.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/package.json` around lines 2 - 39, The package.json contains unresolved git conflict markers (e.g., <<<<<<< HEAD and >>>>>>> upstream/main) causing invalid JSON; open the file, remove the conflict markers and reconcile the fields under "name", "version", "description", "homepage", "author" and the "peerDependencies" block so they form a single valid JSON object (decide whether to keep the Capacitor+ values or upstream/main values for "name"/"version"/etc., and ensure the "peerDependencies" only lists the correct entries such as "@capacitor/core": "^8.3.0" or "@capacitor-plus/core": "^8.0.0" as intended), then run npm install to confirm the JSON parses.core/CHANGELOG.md (1)
6-159:⚠️ Potential issue | 🟠 MajorResolve the remaining merge conflict in this changelog block.
Line 6 starts a raw conflict region that runs through Line 159, so the release notes are still unresolved and the markdown structure is broken.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@core/CHANGELOG.md` around lines 6 - 159, There is an unresolved Git merge conflict in the changelog containing the conflict markers <<<<<<< HEAD, =======, and >>>>>>> upstream/main; remove these markers and reconcile the two sections (either keep the local HEAD release notes, keep the upstream/main release notes, or merge them into a single coherent changelog), ensuring the final markdown has valid headings (e.g., only one top-level release section in that block) and no leftover conflict markers so the changelog parses correctly.
🧹 Nitpick comments (3)
ios/Capacitor/Capacitor/CapacitorBridge.swift (1)
750-756: LGTM! Clean simplification of view controller presentation.The direct delegation to
self.viewController?.presentandself.viewController?.dismissremoves unnecessary complexity from the oldtmpWindow/TmpViewControllerpathway.Note: The observer setup in
init(lines 226-228) fortmpVCAppearedis now effectively dead code sinceTmpViewControlleris no longer instantiated. Consider removing this observer in a follow-up cleanup once the deprecation period passes.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@ios/Capacitor/Capacitor/CapacitorBridge.swift` around lines 750 - 756, The init-added observer for tmpVCAppeared related to the deprecated TmpViewController is now dead code and should be removed: locate the init method in CapacitorBridge (the observer registration referencing tmpVCAppeared / TmpViewController) and unregister or delete the NotificationCenter observer registration there (and any corresponding tmpVCAppeared handler method if it is no longer used), ensuring no leftover references to TmpViewController remain; keep presentVC and dismissVC as the active presentation APIs.android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java (1)
342-344: Consider avoiding duplicate map lookup.The ternary calls
get("Range")twice when the header exists. A minor optimization:♻️ Optional: avoid redundant map lookup
Map<String, String> requestHeaders = request.getRequestHeaders(); - String rangeString = requestHeaders.get("Range") != null ? requestHeaders.get("Range") : requestHeaders.get("range"); + String rangeString = requestHeaders.get("Range"); + if (rangeString == null) { + rangeString = requestHeaders.get("range"); + }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java` around lines 342 - 344, Replace the redundant double lookup of "Range" in WebViewLocalServer by fetching it once into a temporary variable and falling back to "range" if null; for example, in the method where requestHeaders and rangeString are defined, do: String rangeString = requestHeaders.get("Range"); if (rangeString == null) rangeString = requestHeaders.get("range"); This avoids calling requestHeaders.get("Range") twice while preserving the same behavior.cli/src/ios/common.ts (1)
32-37: ResolvepackageManageronce before branching.
config.ios.packageManageris awaited multiple times; caching it once will simplify the control flow.♻️ Suggested refactor
export async function getCommonChecks(config: Config): Promise<CheckFunction[]> { const checks: CheckFunction[] = []; - if ((await config.ios.packageManager) === 'bundler') { + const packageManager = await config.ios.packageManager; + if (packageManager === 'bundler') { checks.push(() => checkBundler(config)); - } else if ((await config.ios.packageManager) === 'Cocoapods') { + } else if (packageManager === 'Cocoapods') { checks.push(() => checkCocoaPods(config)); - } else if ((await config.ios.packageManager) === 'SPM') { + } else if (packageManager === 'SPM') { const swiftToolsVersion = config.app.extConfig.experimental?.ios?.spm?.swiftToolsVersion; if (swiftToolsVersion) { checks.push(() => checkSwiftToolsVersion(config, swiftToolsVersion));🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@cli/src/ios/common.ts` around lines 32 - 37, Resolve config.ios.packageManager once into a local const (e.g. const pkgManager = await config.ios.packageManager) and use pkgManager for the conditional branches instead of awaiting repeatedly; update the branch that currently checks for 'bundler', 'Cocoapods', and 'SPM' to reference pkgManager and preserve existing pushes to checks (checkBundler, checkCocoaPods, checkCocoaPods) and the SPM handling that reads config.app.extConfig.experimental?.ios?.spm?.swiftToolsVersion.
🤖 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/needs-reply.yml:
- Line 12: Replace the mutable action tag "imhoffd/needs-reply@v2" with the
specific commit SHA that v2 currently resolves to so the workflow uses an
immutable reference; update the uses entry (the string "imhoffd/needs-reply@v2")
to "imhoffd/needs-reply@<COMMIT_SHA>" where <COMMIT_SHA> is the full commit hash
from the action repository to pin the dependency and improve reproducibility.
In @.github/workflows/publish-ios.yml:
- Around line 21-24: The workflow is forcing checkout to a hard-coded branch via
the actions/checkout step (uses: actions/checkout@v5 with ref: 'main'), which
can publish code different from the triggering revision; change that checkout to
use the triggering ref/sha (e.g., remove the fixed ref or set ref: ${{
github.ref }} or ref: ${{ github.sha }}) so the publish job checks out the exact
commit that triggered the workflow (update the actions/checkout@v5 step
accordingly).
In `@android/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java`:
- Line 103: The initial call to initSafeAreaCSSVariables() is injecting
safe-area CSS before we know if the page uses viewport-fit=cover; change the
behavior so initSafeAreaCSSVariables() is only invoked when hasViewportCover is
true (i.e., gate the initial injection in the load path), and ensure the
onDOMReady()/handleViewportCoverResult path clears the injected CSS vars if the
page reports hasViewportCover=false (remove or reset --safe-area-inset-* in the
same helper used by initSafeAreaCSSVariables()); also apply the same guard/clear
logic to the duplicate calls around the block referenced at lines 166-174 so no
CSS vars remain when native-padding is used.
In `@cli/package.json`:
- Around line 2-14: Remove the Git conflict markers (<<<<<<<, =======, >>>>>>>)
from package.json and keep only one coherent metadata block for the package by
choosing which variant to publish; ensure the retained fields name, version,
description, homepage, and author are consistent with the intended artifact
(e.g., either the "@capacitor-plus/cli" fork values or the upstream
"@capacitor/cli" values) and that the resulting file is valid JSON (no trailing
commas, proper quotes). Locate the conflict inside package.json around the
name/version/description/homepage/author entries and delete the other variant
and the separators so npm can parse the file.
In `@cli/src/index.ts`:
- Around line 30-37: The getPackageManager function currently treats any
non-'cocoapods' input as SPM; change it to explicitly validate the
packageManager argument and reject unsupported values: in getPackageManager,
handle 'cocoapods' (with the existing bundler check via
config.ios.packageManager) and an explicit 'spm' case, and otherwise throw an
informative Error (or return a rejected Promise) indicating the unsupported
--packagemanager value; use the function name getPackageManager and the
config.ios.packageManager check to locate the code and update the returned
identifiers consistently (e.g., 'cocoapods'/'bundler' and 'spm'/'SPM') so typos
no longer silently default to SPM.
In `@cli/src/ios/update.ts`:
- Around line 133-145: The availability check still calls isInstalled('pod')
while the installer uses the configured podPath variable; change the guard to
check the actual podPath (e.g., await isInstalled(podPath)) so that a
custom/absolute podPath is recognized, keeping the rest of the branch that calls
runCommand(podPath, ['install', ...]) and falling back to logger.warn if not
installed.
In `@cli/src/tasks/run.ts`:
- Line 114: The status message template literal that currently reads "App
running with live reload listing for: ${options.https ? 'https' :
'http'}://${options.host}${options.port ? `:${options.port}` : ''}..." contains
a typo — change the word "listing" to "listening" in that string; update the
template literal where it's emitted (the run task that uses the options object)
so the log reads "live reload listening for" while keeping the existing
interpolation of options.
In `@cli/src/util/spm.ts`:
- Around line 100-108: Resolve the leftover merge conflict markers and produce a
single coherent block: remove the <<<<<<</=======/>>>>>>> markers and ensure
iosVersion is assigned using the correct helper (choose and use either
getMajorMinoriOSVersion or getMajoriOSVersion consistently), then add the
missing declarations for packageTraits and swiftToolsVersion (read from
config.app.extConfig.experimental?.ios?.spm) before packageSwiftText so
packageTraits and swiftToolsVersion are always defined; update any downstream
usage of iosVersion/packageTraits/swiftToolsVersion accordingly (symbols:
getMajorMinoriOSVersion, getMajoriOSVersion, packageTraits, swiftToolsVersion,
packageSwiftText, config).
In `@core/package.json`:
- Around line 2-14: The package.json contains unresolved git conflict markers
and duplicate metadata blocks; remove the conflict markers (<<<<<<<, =======,
>>>>>>>) and pick one consistent set of package fields (e.g., "name", "version",
"description", "homepage", "author") so the manifest is valid JSON and the
package identity is unambiguous; update the chosen "name" and "version" values
in the package.json block (referencing the "name" and "version" keys) and ensure
the remaining fields from that block are kept and the other block discarded.
In `@ios/Capacitor/Capacitor/CAPBridgedJSTypes.m`:
- Line 32: The method implementation for getArray:defaultValue: contains a stray
semicolon before the opening brace which causes invalid Objective-C syntax;
remove the semicolon from the method signature in the CAPBridgedJSTypes.m
implementation so the declaration reads as a proper Objective-C method
implementation (i.e., ensure the signature for - (NSArray *
_Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray *
_Nullable)defaultValue is immediately followed by the opening brace).
In `@ios/package.json`:
- Around line 2-14: The package.json contains unresolved git conflict markers;
remove the conflict section and choose a single consistent package identity
(either "@capacitor/ios" or "@capacitor-plus/ios") and update the "name",
"version", "description", "homepage", and "author" fields accordingly; also
ensure the `@capacitor`.../core peerDependency in this file matches the final
choice in core/package.json so the iOS package contract stays consistent (verify
and align the peer dependency entry in package.json with the core package
identity and version).
In `@lerna.json`:
- Around line 16-20: Remove the Git merge-conflict markers (<<<<<<< HEAD,
=======, >>>>>>> upstream/main) from lerna.json and leave a single valid
"version" entry (choose either "8.0.8" or "8.3.0") so the JSON is well-formed;
ensure the final file contains only one "version" key and valid JSON syntax (no
conflict markers).
In `@package.json`:
- Around line 35-55: Remove the Git conflict markers and produce a valid JSON
devDependencies object: merge the two sides so all required packages appear once
(e.g., include `@types/node`, `@types/tar` if needed, eslint and
eslint-plugin-import, lerna, prettier, prettier-plugin-java, rimraf, semver,
swiftlint, tar, and prettier-pretty-check only if scripts still call it). Then
update the scripts section to either remove any invocation of
"prettier-pretty-check" or add "prettier-pretty-check" back into devDependencies
so scripts and devDependencies remain aligned; ensure the final package.json has
no conflict markers and parses as valid JSON.
---
Outside diff comments:
In `@android/CHANGELOG.md`:
- Around line 6-252: The changelog contains unresolved git conflict markers;
remove the conflict blocks marked by <<<<<<< HEAD, =======, and >>>>>>>
upstream/main and reconcile the duplicate release sections (e.g., the "##
[8.0.8]" / "# [8.3.0]" blocks) into a single, valid changelog entry: decide
which version content to keep or merge notes, delete the markers, ensure heading
syntax is consistent (## / # as needed) and that the file parses as valid
markdown with no leftover conflict markers.
In `@android/package.json`:
- Around line 2-39: The package.json contains unresolved git conflict markers
(e.g., <<<<<<< HEAD and >>>>>>> upstream/main) causing invalid JSON; open the
file, remove the conflict markers and reconcile the fields under "name",
"version", "description", "homepage", "author" and the "peerDependencies" block
so they form a single valid JSON object (decide whether to keep the Capacitor+
values or upstream/main values for "name"/"version"/etc., and ensure the
"peerDependencies" only lists the correct entries such as "@capacitor/core":
"^8.3.0" or "@capacitor-plus/core": "^8.0.0" as intended), then run npm install
to confirm the JSON parses.
In `@CHANGELOG.md`:
- Around line 6-523: The generated CHANGELOG.md contains an unresolved git merge
conflict (markers <<<<<<<, =======, >>>>>>>) that must be removed; open the
CHANGELOG.md, locate and delete the entire conflict block (including the
conflict markers and the duplicate/unmerged sections), then regenerate or
restore the changelog via the automated CI/CD changelog generation process
rather than hand-editing to ensure the file is produced correctly; ensure no
residual conflict markers remain before committing.
In `@cli/CHANGELOG.md`:
- Around line 6-280: The changelog contains unresolved git conflict markers
(<<<<<<< HEAD, =======, >>>>>>> upstream/main) mixing two release sections (the
local 8.0.8/8.0.x block and the upstream 8.3.0/8.2.0 block); remove the conflict
markers and produce a single coherent changelog by deciding which release
history to keep (e.g., keep the upstream 8.3.0..8.1.0 entries and discard the
duplicate local 8.0.x block, or merge both histories in chronological order),
ensuring headings (e.g., "# [8.3.0]" and "## [8.0.8]") and their bullet lists
are valid Markdown and no <<<<<<</=======/>>>>>>> tokens remain.
In `@cli/src/ios/update.ts`:
- Around line 54-59: The call to generateCordovaPackageFiles(cordovaPlugins,
config) starts async file writes but doesn’t wait for them to finish, causing
generatePackageFile to race; update generateCordovaPackageFiles to return a
Promise that only resolves once all per-plugin Package.swift writes complete
(e.g., collect write promises and await Promise.all or make internal actions
fully async/await), keep the await generateCordovaPackageFiles(...) call here so
checkPluginsForPackageSwift and generatePackageFile run only after all plugin
Package.swift files are written.
In `@core/CHANGELOG.md`:
- Around line 6-159: There is an unresolved Git merge conflict in the changelog
containing the conflict markers <<<<<<< HEAD, =======, and >>>>>>>
upstream/main; remove these markers and reconcile the two sections (either keep
the local HEAD release notes, keep the upstream/main release notes, or merge
them into a single coherent changelog), ensuring the final markdown has valid
headings (e.g., only one top-level release section in that block) and no
leftover conflict markers so the changelog parses correctly.
In `@ios/CHANGELOG.md`:
- Around line 6-225: The changelog contains unresolved Git conflict markers
(<<<<<<<, =======, >>>>>>>) between the local block starting with "## [8.0.8]"
and the upstream block starting with "# [8.3.0]"; open ios/CHANGELOG.md, remove
the conflict marker lines and the duplicate block you don't want to keep so the
file contains one coherent changelog (either keep the local "## [8.0.8]" series
or the upstream "# [8.3.0]" series), ensure headings like "## [8.0.8]" / "#
[8.3.0]" and commit references remain properly formatted and no leftover marker
lines remain.
---
Nitpick comments:
In `@android/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.java`:
- Around line 342-344: Replace the redundant double lookup of "Range" in
WebViewLocalServer by fetching it once into a temporary variable and falling
back to "range" if null; for example, in the method where requestHeaders and
rangeString are defined, do: String rangeString = requestHeaders.get("Range");
if (rangeString == null) rangeString = requestHeaders.get("range"); This avoids
calling requestHeaders.get("Range") twice while preserving the same behavior.
In `@cli/src/ios/common.ts`:
- Around line 32-37: Resolve config.ios.packageManager once into a local const
(e.g. const pkgManager = await config.ios.packageManager) and use pkgManager for
the conditional branches instead of awaiting repeatedly; update the branch that
currently checks for 'bundler', 'Cocoapods', and 'SPM' to reference pkgManager
and preserve existing pushes to checks (checkBundler, checkCocoaPods,
checkCocoaPods) and the SPM handling that reads
config.app.extConfig.experimental?.ios?.spm?.swiftToolsVersion.
In `@ios/Capacitor/Capacitor/CapacitorBridge.swift`:
- Around line 750-756: The init-added observer for tmpVCAppeared related to the
deprecated TmpViewController is now dead code and should be removed: locate the
init method in CapacitorBridge (the observer registration referencing
tmpVCAppeared / TmpViewController) and unregister or delete the
NotificationCenter observer registration there (and any corresponding
tmpVCAppeared handler method if it is no longer used), ensuring no leftover
references to TmpViewController remain; keep presentVC and dismissVC as the
active presentation APIs.
🪄 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: defaults
Review profile: CHILL
Plan: Pro
Run ID: 40cb1e65-f5cc-4d55-b8fa-3ffd8d663a3d
📒 Files selected for processing (52)
.github/ISSUE_TEMPLATE/config.yml.github/ISSUE_TEMPLATE/feature-request.yml.github/ionic-issue-bot.yml.github/workflows/needs-reply.yml.github/workflows/publish-ios.yml.github/workflows/test.ymlCHANGELOG.mdandroid/CHANGELOG.mdandroid/capacitor/src/main/assets/native-bridge.jsandroid/capacitor/src/main/java/com/getcapacitor/Bridge.javaandroid/capacitor/src/main/java/com/getcapacitor/BridgeActivity.javaandroid/capacitor/src/main/java/com/getcapacitor/WebViewLocalServer.javaandroid/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.javaandroid/package.jsoncli/CHANGELOG.mdcli/package.jsoncli/src/config.tscli/src/declarations.tscli/src/definitions.tscli/src/index.tscli/src/ios/build.tscli/src/ios/common.tscli/src/ios/doctor.tscli/src/ios/open.tscli/src/ios/run.tscli/src/ios/update.tscli/src/tasks/add.tscli/src/tasks/migrate-spm.tscli/src/tasks/migrate.tscli/src/tasks/run.tscli/src/tasks/sourcemaps.tscli/src/tasks/sync.tscli/src/tasks/update.tscli/src/util/livereload.tscli/src/util/spm.tscli/src/util/template.tscore/CHANGELOG.mdcore/native-bridge.tscore/package.jsoncore/src/core-plugins.tscore/system-bars.mdios-spm-template/App/CapApp-SPM/README.mdios/CHANGELOG.mdios/Capacitor/Capacitor/CAPBridgeProtocol.swiftios/Capacitor/Capacitor/CAPBridgedJSTypes.hios/Capacitor/Capacitor/CAPBridgedJSTypes.mios/Capacitor/Capacitor/CapacitorBridge.swiftios/Capacitor/Capacitor/assets/native-bridge.jsios/package.jsonlerna.jsonpackage.jsonscripts/pack-cli-assets.mjs
💤 Files with no reviewable changes (1)
- .github/ISSUE_TEMPLATE/feature-request.yml
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Close old issues that need reply | ||
| uses: imhoffd/needs-reply@v2 |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Resolve the SHA behind tag v2 (and verify whether it's annotated).
ref_json=$(curl -s https://api.github.com/repos/imhoffd/needs-reply/git/ref/tags/v2)
obj_type=$(echo "$ref_json" | jq -r '.object.type')
obj_sha=$(echo "$ref_json" | jq -r '.object.sha')
if [ "$obj_type" = "commit" ]; then
echo "Pin this SHA: $obj_sha"
else
tag_json=$(curl -s "https://api.github.com/repos/imhoffd/needs-reply/git/tags/$obj_sha")
commit_sha=$(echo "$tag_json" | jq -r '.object.sha')
echo "Pin this SHA: $commit_sha"
fiRepository: Cap-go/capacitor-plus
Length of output: 119
Pin the GitHub Action to a commit SHA instead of a mutable version tag.
Line 12 uses the mutable tag @v2, which weakens supply-chain guarantees and reproducibility. Pin to the commit SHA that v2 currently resolves to.
Suggested change
- - name: Close old issues that need reply
- uses: imhoffd/needs-reply@v2
+ - name: Close old issues that need reply
+ uses: imhoffd/needs-reply@71e8d5144caa0d4a1e292348bfafa3866d08c855📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| uses: imhoffd/needs-reply@v2 | |
| uses: imhoffd/needs-reply@71e8d5144caa0d4a1e292348bfafa3866d08c855 |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/needs-reply.yml at line 12, Replace the mutable action tag
"imhoffd/needs-reply@v2" with the specific commit SHA that v2 currently resolves
to so the workflow uses an immutable reference; update the uses entry (the
string "imhoffd/needs-reply@v2") to "imhoffd/needs-reply@<COMMIT_SHA>" where
<COMMIT_SHA> is the full commit hash from the action repository to pin the
dependency and improve reproducibility.
| - uses: actions/checkout@v5 | ||
| with: | ||
| fetch-depth: 0 | ||
| ref: 'main' |
There was a problem hiding this comment.
Avoid publishing from a hard-coded branch.
Line 24 forces checkout of main, so publish can run against code different from the triggering revision. That risks publishing the wrong pod contents/version.
Suggested fix
- uses: actions/checkout@v5
with:
fetch-depth: 0
- ref: 'main'
+ ref: ${{ github.sha }}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| ref: 'main' | |
| - uses: actions/checkout@v5 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.sha }} |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In @.github/workflows/publish-ios.yml around lines 21 - 24, The workflow is
forcing checkout to a hard-coded branch via the actions/checkout step (uses:
actions/checkout@v5 with ref: 'main'), which can publish code different from the
triggering revision; change that checkout to use the triggering ref/sha (e.g.,
remove the fixed ref or set ref: ${{ github.ref }} or ref: ${{ github.sha }}) so
the publish job checks out the exact commit that triggered the workflow (update
the actions/checkout@v5 step accordingly).
|
|
||
| initWindowInsetsListener(); | ||
| initSafeAreaInsets(); | ||
| initSafeAreaCSSVariables(); |
There was a problem hiding this comment.
Don't inject safe-area CSS before viewport-fit=cover is known.
initSafeAreaCSSVariables() now runs during load, before onDOMReady() decides whether the page actually uses viewport-fit=cover. On Android 15+, that can leave non-zero --safe-area-inset-* values on apps that stay in the native-padding path, so apps using the documented CSS fallback can end up with double-applied insets. Gate the initial injection on hasViewportCover, or clear the CSS vars once the page reports false.
Also applies to: 166-174
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@android/capacitor/src/main/java/com/getcapacitor/plugin/SystemBars.java` at
line 103, The initial call to initSafeAreaCSSVariables() is injecting safe-area
CSS before we know if the page uses viewport-fit=cover; change the behavior so
initSafeAreaCSSVariables() is only invoked when hasViewportCover is true (i.e.,
gate the initial injection in the load path), and ensure the
onDOMReady()/handleViewportCoverResult path clears the injected CSS vars if the
page reports hasViewportCover=false (remove or reset --safe-area-inset-* in the
same helper used by initSafeAreaCSSVariables()); also apply the same guard/clear
logic to the duplicate calls around the block referenced at lines 166-174 so no
CSS vars remain when native-padding is used.
| <<<<<<< HEAD | ||
| "name": "@capacitor-plus/cli", | ||
| "version": "8.0.8", | ||
| "description": "Capacitor+: Enhanced Capacitor with automated upstream sync - Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capgo.app/docs/plugins/capacitor-plus/", | ||
| "author": "Capgo Team <support@capgo.app> (https://capgo.app)", | ||
| ======= | ||
| "name": "@capacitor/cli", | ||
| "version": "8.3.0", | ||
| "description": "Capacitor: Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capacitorjs.com", | ||
| "author": "Ionic Team <hi@ionic.io> (https://ionic.io)", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Resolve the leftover merge-conflict block before merging.
Lines 2-14 still contain <<<<<<<, =======, and >>>>>>>, so package.json is invalid JSON and npm install already fails with EJSONPARSE. Pick a single package metadata block here and keep the name/version/description/homepage/author fields consistent with the artifact this fork is meant to publish.
🧰 Tools
🪛 Biome (2.4.10)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: String values must be double quoted.
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-8: End of file expected
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-14: End of file expected
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@cli/package.json` around lines 2 - 14, Remove the Git conflict markers
(<<<<<<<, =======, >>>>>>>) from package.json and keep only one coherent
metadata block for the package by choosing which variant to publish; ensure the
retained fields name, version, description, homepage, and author are consistent
with the intended artifact (e.g., either the "@capacitor-plus/cli" fork values
or the upstream "@capacitor/cli" values) and that the resulting file is valid
JSON (no trailing commas, proper quotes). Locate the conflict inside
package.json around the name/version/description/homepage/author entries and
delete the other variant and the separators so npm can parse the file.
| async function getPackageManager(config: Config, packageManager: any): Promise<PackageManager> { | ||
| if (packageManager === 'cocoapods') { | ||
| if ((await config.ios.packageManager) === 'bundler') { | ||
| return 'bundler'; | ||
| } | ||
| return 'Cocoapods'; | ||
| } | ||
| return 'SPM'; |
There was a problem hiding this comment.
Reject unsupported --packagemanager values instead of silently using SPM.
Anything other than cocoapods falls through to SPM, so a typo like --packagemanager cocoapod will provision the wrong iOS dependency flow with no error.
🛠 Proposed fix
-async function getPackageManager(config: Config, packageManager: any): Promise<PackageManager> {
- if (packageManager === 'cocoapods') {
+async function getPackageManager(config: Config, packageManager?: string): Promise<PackageManager> {
+ if (!packageManager || packageManager === 'spm') {
+ return 'SPM';
+ }
+
+ if (packageManager === 'cocoapods') {
if ((await config.ios.packageManager) === 'bundler') {
return 'bundler';
}
return 'Cocoapods';
}
- return 'SPM';
+
+ throw new Error(`Invalid package manager "${packageManager}". Expected "cocoapods" or "spm".`);
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@cli/src/index.ts` around lines 30 - 37, The getPackageManager function
currently treats any non-'cocoapods' input as SPM; change it to explicitly
validate the packageManager argument and reject unsupported values: in
getPackageManager, handle 'cocoapods' (with the existing bundler check via
config.ios.packageManager) and an explicit 'spm' case, and otherwise throw an
informative Error (or return a rejected Promise) indicating the unsupported
--packagemanager value; use the function name getPackageManager and the
config.ios.packageManager check to locate the code and update the returned
identifiers consistently (e.g., 'cocoapods'/'bundler' and 'spm'/'SPM') so typos
no longer silently default to SPM.
| <<<<<<< HEAD | ||
| "name": "@capacitor-plus/core", | ||
| "version": "8.0.8", | ||
| "description": "Capacitor+: Enhanced Capacitor with automated upstream sync - Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capgo.app/docs/plugins/capacitor-plus/", | ||
| "author": "Capgo Team <support@capgo.app> (https://capgo.app)", | ||
| ======= | ||
| "name": "@capacitor/core", | ||
| "version": "8.3.0", | ||
| "description": "Capacitor: Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capacitorjs.com", | ||
| "author": "Ionic Team <hi@ionic.io> (https://ionic.io)", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
This package manifest is still in a conflicted state.
The conflict markers make the file unparsable and also leave the published package identity unresolved. Please pick a single name/version here before merging, because downstream manifests now need to reference whatever this package actually exports.
🧰 Tools
🪛 Biome (2.4.10)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: String values must be double quoted.
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-8: End of file expected
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-14: End of file expected
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@core/package.json` around lines 2 - 14, The package.json contains unresolved
git conflict markers and duplicate metadata blocks; remove the conflict markers
(<<<<<<<, =======, >>>>>>>) and pick one consistent set of package fields (e.g.,
"name", "version", "description", "homepage", "author") so the manifest is valid
JSON and the package identity is unambiguous; update the chosen "name" and
"version" values in the package.json block (referencing the "name" and "version"
keys) and ensure the remaining fields from that block are kept and the other
block discarded.
| return defaultValue; | ||
| } | ||
|
|
||
| - (NSArray * _Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray * _Nullable)defaultValue; { |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Detect Objective-C method implementations that mistakenly include ';' before '{'
rg -nP --type=objc '^\s*[-+]\s*\([^)]*\)\s*[^{}]*;\s*\{' ios/Capacitor/Capacitor/CAPBridgedJSTypes.mRepository: Cap-go/capacitor-plus
Length of output: 174
Remove the stray semicolon from the method implementation signature.
Line 32 contains invalid Objective-C syntax with a semicolon before the opening brace, which will cause compilation failure.
Proposed fix
-- (NSArray * _Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray * _Nullable)defaultValue; {
+- (NSArray * _Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray * _Nullable)defaultValue {📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - (NSArray * _Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray * _Nullable)defaultValue; { | |
| - (NSArray * _Nullable)getArray:(NSString * _Nonnull)key defaultValue:(NSArray * _Nullable)defaultValue { |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ios/Capacitor/Capacitor/CAPBridgedJSTypes.m` at line 32, The method
implementation for getArray:defaultValue: contains a stray semicolon before the
opening brace which causes invalid Objective-C syntax; remove the semicolon from
the method signature in the CAPBridgedJSTypes.m implementation so the
declaration reads as a proper Objective-C method implementation (i.e., ensure
the signature for - (NSArray * _Nullable)getArray:(NSString * _Nonnull)key
defaultValue:(NSArray * _Nullable)defaultValue is immediately followed by the
opening brace).
| <<<<<<< HEAD | ||
| "name": "@capacitor-plus/ios", | ||
| "version": "8.0.8", | ||
| "description": "Capacitor+: Enhanced Capacitor with automated upstream sync - Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capgo.app/docs/plugins/capacitor-plus/", | ||
| "author": "Capgo Team <support@capgo.app> (https://capgo.app)", | ||
| ======= | ||
| "name": "@capacitor/ios", | ||
| "version": "8.3.0", | ||
| "description": "Capacitor: Cross-platform apps with JavaScript and the web", | ||
| "homepage": "https://capacitorjs.com", | ||
| "author": "Ionic Team <hi@ionic.io> (https://ionic.io)", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Finish the merge here before publishing or installing this workspace.
This manifest still contains conflict markers, so it cannot be parsed. When you resolve it, keep the package identity and the @capacitor.../core peer dependency consistent with the final choice in core/package.json; mixing the two identities will break the iOS package contract.
Also applies to: 36-41
🧰 Tools
🪛 Biome (2.4.10)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: unexpected character <
(parse)
[error] 2-2: String values must be double quoted.
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 3-3: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 4-4: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 5-5: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 6-6: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-7: End of file expected
(parse)
[error] 7-8: End of file expected
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 8-8: unexpected character =
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 9-9: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 10-10: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 11-11: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 12-12: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-13: End of file expected
(parse)
[error] 13-14: End of file expected
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character >
(parse)
[error] 14-14: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@ios/package.json` around lines 2 - 14, The package.json contains unresolved
git conflict markers; remove the conflict section and choose a single consistent
package identity (either "@capacitor/ios" or "@capacitor-plus/ios") and update
the "name", "version", "description", "homepage", and "author" fields
accordingly; also ensure the `@capacitor`.../core peerDependency in this file
matches the final choice in core/package.json so the iOS package contract stays
consistent (verify and align the peer dependency entry in package.json with the
core package identity and version).
| <<<<<<< HEAD | ||
| "version": "8.0.8", | ||
| ======= | ||
| "version": "8.3.0", | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Verify unresolved merge markers are gone and JSON is valid.
set -euo pipefail
echo "Checking for conflict markers..."
rg -n '^(<<<<<<<|=======|>>>>>>>)' lerna.json && {
echo "Found unresolved conflict markers in lerna.json"
exit 1
} || true
echo "Validating JSON parse..."
python - <<'PY'
import json
from pathlib import Path
p = Path("lerna.json")
json.loads(p.read_text(encoding="utf-8"))
print("lerna.json is valid JSON")
PYRepository: Cap-go/capacitor-plus
Length of output: 197
Resolve unresolved merge-conflict markers in lerna.json (lines 16–20).
The file contains conflict markers that break JSON parsing and block release tooling. Remove the markers and select a single "version" value.
Proposed fix
-<<<<<<< HEAD
- "version": "8.0.8",
-=======
"version": "8.3.0",
->>>>>>> upstream/main🧰 Tools
🪛 Biome (2.4.10)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: unexpected character <
(parse)
[error] 16-16: String values must be double quoted.
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-17: End of file expected
(parse)
[error] 17-18: End of file expected
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 18-18: unexpected character =
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-19: End of file expected
(parse)
[error] 19-20: End of file expected
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character >
(parse)
[error] 20-20: unexpected character /
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@lerna.json` around lines 16 - 20, Remove the Git merge-conflict markers
(<<<<<<< HEAD, =======, >>>>>>> upstream/main) from lerna.json and leave a
single valid "version" entry (choose either "8.0.8" or "8.3.0") so the JSON is
well-formed; ensure the final file contains only one "version" key and valid
JSON syntax (no conflict markers).
| <<<<<<< HEAD | ||
| "@types/node": "^24.10.1", | ||
| "@types/tar": "^6.1.2", | ||
| "eslint": "^8.57.1", | ||
| "eslint-plugin-import": "^2.31.0", | ||
| ======= | ||
| "@types/node": "18.18.6", | ||
| "eslint": "^8.57.0", | ||
| >>>>>>> upstream/main | ||
| "lerna": "^7.1.3", | ||
| "prettier": "^3.6.2", | ||
| "prettier-plugin-java": "^2.7.7", | ||
| "rimraf": "^6.1.0", | ||
| "semver": "^7.3.7", | ||
| "swiftlint": "^2.0.0", | ||
| <<<<<<< HEAD | ||
| "tar": "^6.1.11", | ||
| "prettier-pretty-check": "^0.2.0" | ||
| ======= | ||
| "tar": "^7.5.3" | ||
| >>>>>>> upstream/main |
There was a problem hiding this comment.
Resolve this merge block and keep the remaining scripts' dependencies aligned.
package.json is still invalid JSON here, which is already blocking npm install in CI. Also, if this is resolved by taking the upstream side verbatim, Line 22 will still call prettier-pretty-check even though that dependency disappears. Remove the conflict markers and make sure the final devDependencies still cover the scripts that remain.
🧰 Tools
🪛 Biome (2.4.10)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: unexpected character <
(parse)
[error] 35-35: String values must be double quoted.
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 36-36: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 37-37: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 38-38: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-39: End of file expected
(parse)
[error] 39-40: End of file expected
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 40-40: unexpected character =
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 41-41: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-42: End of file expected
(parse)
[error] 42-43: End of file expected
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character >
(parse)
[error] 43-43: unexpected character /
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 44-44: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 45-45: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 46-46: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 47-47: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 48-48: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-49: End of file expected
(parse)
[error] 49-50: End of file expected
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 50-50: unexpected character <
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 51-51: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 52-52: End of file expected
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 53-53: unexpected character =
(parse)
[error] 54-54: End of file expected
(parse)
[error] 54-54: End of file expected
(parse)
[error] 54-54: End of file expected
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: unexpected character >
(parse)
[error] 55-55: String values must be double quoted.
(parse)
[error] 55-55: unexpected character /
(parse)
[error] 55-55: String values must be double quoted.
(parse)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@package.json` around lines 35 - 55, Remove the Git conflict markers and
produce a valid JSON devDependencies object: merge the two sides so all required
packages appear once (e.g., include `@types/node`, `@types/tar` if needed, eslint
and eslint-plugin-import, lerna, prettier, prettier-plugin-java, rimraf, semver,
swiftlint, tar, and prettier-pretty-check only if scripts still call it). Then
update the scripts section to either remove any invocation of
"prettier-pretty-check" or add "prettier-pretty-check" back into devDependencies
so scripts and devDependencies remain aligned; ensure the final package.json has
no conflict markers and parses as valid JSON.
Merge Conflict Resolution Required
The automatic sync of the
plusbranch with upstream main encountered merge conflicts.What happened
Action needed: Review the branch and resolve any remaining concerns before merging.
This PR was created automatically by the Capacitor+ sync workflow
Summary by CodeRabbit
New Features
Bug Fixes
Chores