Skip to content

fix: Fix Xcode 26 support for interactive Widgets#391

Merged
ABausG merged 4 commits into
mainfrom
fix/xcode-26-support
Jan 4, 2026
Merged

fix: Fix Xcode 26 support for interactive Widgets#391
ABausG merged 4 commits into
mainfrom
fix/xcode-26-support

Conversation

@ABausG
Copy link
Copy Markdown
Owner

@ABausG ABausG commented Jan 4, 2026

Description

Add necessary changes to pod spec file to ensure interactive widgets work with Xcode 26

Checklist

  • I have updated/added tests for ALL new/updated/fixed functionality.
  • I have updated/added relevant documentation and added code (documentation) comments where necessary.
  • I have updated/added relevant examples in example or documentation.

Breaking Change?

  • Yes, this PR is a breaking change.
  • No, this PR is not a breaking change.

Related Issues

Closes #370
Closes #386

@docs-page
Copy link
Copy Markdown

docs-page Bot commented Jan 4, 2026

To view this pull requests documentation preview, visit the following URL:

docs.page/abausg/home_widget~391

Documentation is deployed and generated using docs.page.

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 4, 2026

Walkthrough

iOS CI and project configuration updated for Xcode 26: CI workflow Xcode version bumped, example app iOS deployment targets raised from 12.0 to 13.0, GPU validation enabled in the Xcode scheme, .gitignore extended for build artifacts, and a CocoaPods user-target xcconfig added to disable Swift explicit modules.

Changes

Cohort / File(s) Summary
CI / Workflow
.github/workflows/build-ios-examples.yml
Bumped xcode-version in the build-examples job from 16.426.1.1.
Example ignore files
examples/configurable_widget/.gitignore
Added .build/ and .swiftpm/ to ignored build artifact entries.
iOS deployment target updates
examples/configurable_widget/ios/Flutter/AppFrameworkInfo.plist, examples/configurable_widget/ios/Podfile, examples/configurable_widget/ios/Runner.xcodeproj/project.pbxproj
Raised minimum iOS target from 12.013.0 (Podfile platform and three IPHONEOS_DEPLOYMENT_TARGET occurrences in project.pbxproj; AppFrameworkInfo.plist MinimumOSVersion).
Xcode scheme
examples/configurable_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
Added enableGPUValidationMode = "1" attribute to the LaunchAction element.
CocoaPods podspec workaround
packages/home_widget/ios/home_widget.podspec
Added s.user_target_xcconfig = { 'SWIFT_ENABLE_EXPLICIT_MODULES' => 'NO' } to disable Swift explicit modules for app targets consuming the pod (Xcode 26 workaround).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Pre-merge checks

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ❓ Inconclusive The PR includes changes beyond the minimal podspec fix: Xcode version bump, iOS minimum version updates, and GPU validation settings, which may or may not be necessary for the Xcode 26 issue. Clarify whether iOS minimum version bumps, GPU validation setting, and Xcode version updates are required for Xcode 26 compatibility or represent separate improvements.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and specifically describes the fix: addressing Xcode 26 support for interactive widgets, which aligns with the primary objective of the PR.
Description check ✅ Passed The description provides the essential change (podspec updates for Xcode 26 compatibility) and links to related issues, but lacks detail on the specific problem and solution approach.
Linked Issues check ✅ Passed The PR addresses the core requirement from both issues: adding SWIFT_ENABLE_EXPLICIT_MODULES = NO to podspec to resolve 'module Flutter not found' errors on Xcode 26, and updates iOS minimum version to 13.0 for compatibility.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

📜 Recent review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b90da7c and 75eb5a3.

📒 Files selected for processing (1)
  • .github/workflows/build-ios-examples.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/build-ios-examples.yml
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Build Android Examples (home_widget_example)
  • GitHub Check: Build iOS Examples (home_widget_example)
  • GitHub Check: Build iOS Examples (configurable_widget)
  • GitHub Check: Build iOS Examples (lockscreen_widgets)
  • GitHub Check: iOS Integration Tests

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.

@ABausG ABausG changed the title fix: add Xcode 26 support fix: Fix Xcode 26 support for interactive Widgets Jan 4, 2026
@codecov
Copy link
Copy Markdown

codecov Bot commented Jan 4, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (c3eaf13) to head (75eb5a3).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##              main      #391   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         3           
  Lines          115       115           
=========================================
  Hits           115       115           

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

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown

@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: 0

🧹 Nitpick comments (1)
examples/configurable_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme (1)

62-62: Clarify the necessity of GPU validation mode.

The addition of enableGPUValidationMode = "1" enables Metal GPU frame capture validation, which adds debugging capabilities but introduces performance overhead.

This setting is in the shared scheme (xcshareddata), affecting all developers building the example project. The PR objectives focus on fixing Xcode 26 Swift module resolution issues and don't mention GPU validation requirements.

Please clarify:

  1. Is this change required for Xcode 26 compatibility?
  2. Is the performance overhead acceptable for an example project's default configuration?
  3. Should this be an opt-in developer setting rather than committed to the shared scheme?
📜 Review details

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c3eaf13 and b90da7c.

📒 Files selected for processing (7)
  • .github/workflows/build-ios-examples.yml
  • examples/configurable_widget/.gitignore
  • examples/configurable_widget/ios/Flutter/AppFrameworkInfo.plist
  • examples/configurable_widget/ios/Podfile
  • examples/configurable_widget/ios/Runner.xcodeproj/project.pbxproj
  • examples/configurable_widget/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • packages/home_widget/ios/home_widget.podspec
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (8)
  • GitHub Check: Build iOS Examples (home_widget_example)
  • GitHub Check: Build iOS Examples (configurable_widget)
  • GitHub Check: Build iOS Examples (lockscreen_widgets)
  • GitHub Check: Build Android Examples (home_widget_example)
  • GitHub Check: iOS Integration Tests
  • GitHub Check: Quality Checks
  • GitHub Check: Tests
  • GitHub Check: iOS Integration Tests
🔇 Additional comments (7)
examples/configurable_widget/ios/Flutter/AppFrameworkInfo.plist (1)

24-24: LGTM! Deployment target updated correctly.

The MinimumOSVersion update to 13.0 aligns with the broader iOS 13 deployment target changes across the project configuration files.

examples/configurable_widget/.gitignore (1)

8-8: LGTM! Standard Swift Package Manager artifacts.

The addition of .build/ and .swiftpm/ to .gitignore correctly excludes Swift Package Manager build artifacts and workspace metadata from version control.

Also applies to: 12-12

.github/workflows/build-ios-examples.yml (1)

50-50: No issue detected.

Xcode 26.2 is a valid, stable release (released December 12, 2025) and is supported by the maxim-lobanov/setup-xcode@v1 action via SemVer format. The version update is correct.

examples/configurable_widget/ios/Podfile (1)

2-2: Note the version mismatch between the iOS platform and package requirement.

The # platform :ios, '13.0' line is the standard Flutter template (intentionally commented for developers to configure). However, the home_widget package itself declares s.platform = :ios, '11.0' in its podspec. If you uncomment the Podfile line, consider using '11.0' to match the package's actual requirement, or verify that iOS 13.0 is intentional for your deployment target.

Likely an incorrect or invalid review comment.

examples/configurable_widget/ios/Runner.xcodeproj/project.pbxproj (1)

645-645: LGTM! Deployment target updated consistently across all configurations.

The iOS minimum deployment target has been raised from 12.0 to 13.0 across all build configurations (Profile, Debug, and Release), aligning with Xcode 26 compatibility requirements. This change is consistent with similar updates in related iOS configuration files throughout the PR.

Also applies to: 1012-1012, 1063-1063

packages/home_widget/ios/home_widget.podspec (2)

22-25: Core Xcode 26 workaround added.

The addition of user_target_xcconfig to disable explicit Swift modules addresses the "module 'Flutter' not found" errors that occur in Xcode 26 when widget extensions import the home_widget pod. This aligns with the mitigation strategy outlined in issue #370.


21-25: Verify completeness of the Xcode 26 workaround flags.

The current implementation applies only SWIFT_ENABLE_EXPLICIT_MODULES = NO to user_target_xcconfig. Issue #370 references three flags that should be applied:

  • SWIFT_USE_INTEGRATED_DRIVER = NO
  • SWIFT_ENABLE_EXPLICIT_MODULES = NO
  • _EXPERIMENTAL_SWIFT_EXPLICIT_MODULES = NO

Please confirm:

  1. Whether this single-flag approach was validated through testing or if all three flags are necessary
  2. Whether the additional flags are intentionally omitted or should be added to both pod_target_xcconfig and user_target_xcconfig

@ABausG ABausG merged commit 35047c6 into main Jan 4, 2026
14 checks passed
@ABausG ABausG deleted the fix/xcode-26-support branch January 4, 2026 21: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

1 participant