<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
This PR makes use of external bus navigation to allow more info dialogs
to be opened without needing to refresh webview
Depends on: https://github.com/home-assistant/frontend/pull/28375
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
## Summary
Adds test coverage for `openEntityDeeplinkURL` to verify the URL
generation with empty navigation path (`navigate/?`) and
`more-info-entity-id` query parameter. This documents the expected
behavior and prevents regressions from the path change in PR #4052.
The test validates:
- Empty path results in `navigate/?` format
- Query parameters include `more-info-entity-id`, `server`,
`avoidUnecessaryReload`, and `isComingFromAppIntent`
## Screenshots
N/A - test-only change
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
This PR merges into #4052 as part of the stacked PR workflow to address
review feedback.
<!-- START COPILOT CODING AGENT TIPS -->
---
💡 You can make Copilot smarter by setting up custom instructions,
customizing its development environment and configuring Model Context
Protocol (MCP) servers. Learn more [Copilot coding agent
tips](https://gh.io/copilot-coding-agent-tips) in the docs.
---------
Co-authored-by: Bruno Pantaleão <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
## Summary
Widget pages displayed wrong server names and showed blank names when >6
servers were configured. The issue had two root causes:
1. **Non-unique identifiers**: `IntentPanel` identifiers were set to
just `panel.path`, causing duplicate identifiers when multiple servers
shared the same panel path (e.g., "lovelace")
2. **Widget matching failure**: When widgets reloaded, the matching
logic couldn't handle backward compatibility, causing incorrect server
names to be displayed
**Changes Made:**
- Changed `IntentPanel` identifier from `panel.path` to
`"serverID-path"` format to ensure uniqueness across servers
- Added `extractedPath` computed property to `IntentPanel` for
consistent path extraction supporting both old and new identifier
formats
- Updated widget matching logic in `WidgetOpenPageProvider` to properly
match panels by server + path when reloading widgets
- Ensured backward compatibility with existing widget configurations
that use the old identifier format
**Before:**
```swift
// Server 1: identifier = "lovelace"
// Server 2: identifier = "lovelace" // Duplicate!
// Widget matching: fails to match correct server
```
**After:**
```swift
// Server 1: identifier = "server1-lovelace"
// Server 2: identifier = "server2-lovelace" // Unique!
// Widget matching: correctly matches by server + extracted path
```
The fix handles server IDs that contain hyphens and maintains backward
compatibility with widgets configured using the old identifier format.
## Screenshots
N/A - Fix resolves display issue shown in original bug report
screenshots
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
- Follows existing pattern in `PageAppEntity.swift` (line 69) for
consistency
- Path extraction logic is shared via `IntentPanel.extractedPath`
computed property to eliminate code duplication
- All linters passed (SwiftFormat, SwiftLint)
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>iOS widget showing wrong page and shows no pages if more
than 6 servers defined.</issue_title>
> <issue_description><!-- Please READ THIS FIRST
> If your issue relates to something not looking right on Home Assistant
within the Companion App, please check if the error is present in Safari
on iOS too. If the issue is also seen in Safari, please open an issue on
the frontend repo
(https://github.com/home-assistant/frontend/issues/new?labels=bug&template=BUG_REPORT.md)
instead -->
>
> **iOS device model, version and app version**
>
> Model Name: iPhone 16 Pro Max
> Software Version: 26.0.1
> App version: 2025.9.2 (2025.1423)
>
> **Home Assistant Core Version**
> 2025.9.4
>
> **Describe the bug**
> When adding multiple pages to the widget, the correct page description
isn't shown. When I have 5 servers (named Server 1 ... Server 5), and
have added the Overview page for each server, the widget shows, Server 1
Overview, Server 1 Overview, Server 3 Overview, Server 3 Overview, and
Server 5 Overview. Click on the second Server 1 Overview brings up
Server 1 Overview, but the widget configuration shows that its suppose
to bring up Server 2 Overview.
>
> Additionally, if I also add Server 6 to the list of servers, all of
the page names are now blanks. It doesn't show Server 1 Overview, Server
2, Overview, etc. It would appear that having more than 5 servers
defined causes the widget to not display the names of any of the defined
pages.
>
>
> **To Reproduce**
>
> Add up to 5 servers to the Companion App configuration. Then create a
HA Open Page widget and add the Overview page for the first two servers.
They will both be displayed with the first Server name.
>
> **Expected behavior**
>
> Adding the two server's Overview page should show Server 1 Overview
and Server 2 Overview in the widget.
>
> **Screenshots**
>
> <img width="660" height="1434" alt="Image"
src="https://github.com/user-attachments/assets/c421d9b4-d1d8-421b-b7b5-b50857a15973"
/>
> <img width="659" height="448" alt="Image"
src="https://github.com/user-attachments/assets/73ad6c2d-5f0c-4d8d-82c5-0006ea74855d"
/>
> <img width="660" height="442" alt="Image"
src="https://github.com/user-attachments/assets/1b891db3-c49a-469c-a82d-59c726964c01"
/>
> <img width="660" height="448" alt="Image"
src="https://github.com/user-attachments/assets/dc469e31-e588-4e24-9e01-09abca6caacc"
/>
> <img width="660" height="446" alt="Image"
src="https://github.com/user-attachments/assets/43e783a2-0f47-4ec2-a363-b6c45c3dab84"
/>
> <img width="660" height="453" alt="Image"
src="https://github.com/user-attachments/assets/92337fd4-1feb-4b3b-9ee9-1c0049cb3bb2"
/>
> <img width="660" height="449" alt="Image"
src="https://github.com/user-attachments/assets/a9d0548c-0e9d-496e-8616-84a6ffdc9fdc"
/>
>
> **Additional context**
> This problem has been ongoing for a month or so.
> </issue_description>
>
> <agent_instructions>Check WidgetOpenPage, there must be some ID that
is not unique or such a thing.</agent_instructions>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>
</details>
- Fixeshome-assistant/iOS#3876
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
This fixes the issue where the user does not land on their default
dashboard after using the control "open entity".
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
## Summary
PR #4037 added the "notify when run" toggle to WidgetDetails but missed
WidgetGauge, which also supports script execution. This PR applies the
same pattern to WidgetGauge for feature parity.
Added `showConfirmationNotification` parameter to WidgetGauge:
- Uses existing localization strings
(`app_intents.notify_when_run.title/description`)
- Flows through `WidgetGaugeEntry` to `ScriptAppIntent` when tapped
- Visible only when "Run Script" is enabled
- Defaults to `true` for backward compatibility
**Files changed:**
- `WidgetGaugeAppIntent.swift`: Added parameter and updated all 3 gauge
type parameter summaries
- `WidgetGaugeAppIntentTimelineProvider.swift`: Added field to
`WidgetGaugeEntry` and passed through placeholder/entry creation
- `WidgetGauge.swift`: Set parameter on `ScriptAppIntent` intent
creation
All widgets with script execution (Scripts, Details, Gauge) now have
consistent notification behavior.
## Screenshots
N/A - Configuration-only change, no visual UI modifications
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
Mirrors the exact implementation from PR #4037 for consistency.
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
> In this pr https://github.com/home-assistant/iOS/pull/4037 you missed
WidgetGauge
</details>
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
## Plan: Fix Local Push Activation Without WiFi Reconnection
- [x] Explore repository structure and understand local push
implementation
- [x] Identify the root cause: NEAppPushManager configuration updates
don't take effect immediately
- [x] Implement fix to force manager reload when local push is toggled
on
- [x] Add mechanism to start managers immediately when enabled on
internal network
- [x] Address code review feedback (removed unused encoder, explicitly
set isDirty flag)
- [x] Improve code quality (extract magic number, use weak self, safe
error handling)
- [x] Fix memory safety issues in updateManagers method
- [x] Add comprehensive documentation to clarify reload behavior
- [x] Add documentation explaining "dirty" flag meaning
- [x] Fix lint issues (trailing spaces and line wrapping)
- [x] Request final code review
- [x] Run security checks (CodeQL - no issues found)
## Summary
Successfully fixed the issue where activating local push requires
reconnecting to WiFi. The solution ensures that when a user enables
local push while already on their internal network, the
`NEAppPushManager` configuration is properly reloaded so the
NetworkExtension framework picks up the changes immediately.
## Key Changes
Modified `NotificationManagerLocalPushInterfaceExtension.swift`:
- Added `isDirty` flag to track configuration changes
- Added `reloadManagersAfterSave()` method with 0.5s delay to reload
managers
- Improved memory safety with `[weak self]` captures
- Replaced force unwraps with safe error handling
- Added comprehensive documentation including clear explanation of
"dirty" flag
- Fixed all linting issues (trailing spaces and line length)
- Ensured NetworkExtension framework picks up changes without WiFi
reconnection
## Code Quality
All code review feedback has been addressed:
- ✅ No force unwraps
- ✅ Weak self references to prevent retain cycles
- ✅ Named constants instead of magic numbers
- ✅ Comprehensive documentation with clear explanation of "dirty"
concept
- ✅ No security vulnerabilities (CodeQL clean)
- ✅ All linting issues resolved
The changes are minimal, focused, and solve the reported issue while
improving overall code quality.
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Activating local push requires reconnecting to the
WiFi</issue_title>
> <issue_description>**iOS device model, version and app version**
> <!-- Please include your device 'Model Name' and 'Software Version' as
listed in iOS Settings>General>About. Please also give the app version
listed beneath "Home Assistant Companion" in the App Configuration>About
menu within the app, please include the number in brackets -->
>
> Model Name: iPhone 13 Pro Max
> Software Version: 26.1
> App version: 2025.11.2
>
> **Home Assistant Core Version**
> 2025.8.2
>
> **Describe the bug**
> When I activate local push, the status section doesn't immediately
show it as activated. I have to reconnect the phone to the local network
for local push to work.
>
> **To Reproduce**
> * Disable local push
> * Status "Local push" is disabled
> * Enable local push while you are connected to your local network
> * Status "Local push" still disabled
> * Disconnect from your local network
> * Reconnect to your local network
> * Status "Local push" now is available
>
> **Expected behavior**
> * When I enable local push while I am connected to my local network,
local push should be initialized without having to reconnect to the
wifi.</issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>
</details>
- Fixeshome-assistant/iOS#4031
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
## Summary
Adds visible delete buttons for widgets and widget items to improve
discoverability on macOS. The existing `.onDelete` modifier requires a
non-discoverable 2-finger swipe gesture on macOS. This adds red trash
icon buttons on the right side of each row that can be clicked to
delete, visible only on macOS.
### Changes
- **WidgetBuilderView**: Added a visible delete button (red trash icon)
on the right side of each widget row, shown only on macOS
- **WidgetBuilderViewModel**: Added `deleteWidget(_:)` method for direct
widget deletion
- **WidgetCreationView**: Added a visible delete button (red trash icon)
on the right side of each widget item row, shown only on macOS
- **WidgetCreationViewModel**: Added `deleteItem(_:)` method for direct
item deletion
The delete buttons are conditionally compiled using `#if
targetEnvironment(macCatalyst)` to only appear on macOS. On iOS, the
existing `.onDelete` modifier continues to work with swipe-to-delete
gestures and edit mode. A `Spacer()` is used to ensure proper right-side
positioning of the delete buttons.
```swift
Spacer()
#if targetEnvironment(macCatalyst)
Button {
viewModel.deleteWidget(widget)
} label: {
Image(systemSymbol: .trash)
.foregroundStyle(.red)
}
.buttonStyle(.borderless)
#endif
```
## Screenshots
Widget List (macOS only):
```
┌────────────────────────────────────┐
│ Widget 1 [Spacer] 🗑️ >│
└────────────────────────────────────┘
```
Widget Items (macOS only):
```
┌────────────────────────────────────┐
│ 🔦 Living Room Light [Spacer] 🗑️ ☰ │
└────────────────────────────────────┘
```
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
Addresses user feedback in issue comments about macOS delete
discoverability. The solution uses visible delete buttons on macOS only,
while iOS users continue to use the existing swipe-to-delete gesture. No
breaking changes - all existing deletion methods continue to work on
their respective platforms.
- Fixeshome-assistant/iOS#3890
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>No way to delete widgets or widget items</issue_title>
> <issue_description>
> **Device model, version and app version**
> <!-- Please include your mac's model and version as listed in 'About
This Mac'. Please also give the app version listed in the Home
Assistant>About Home Assistant, please include the number in brackets.
Safari can be found by launching it in Safari > About Safari. -->
>
> Model Name: Macbook Pro 16-inch, 2019
> macOS Version: 15.6.1
> App Version: 2025.6 (1305) & 2025.10.0 (1444) pre-release
> Safari Version: 18.6 (20621.3.11.11.3)
>
> **Home Assistant Core Version**
> 2025.10.2
>
> **Describe the bug**
> After creating widgets in Preferences -> Widgets there is no obvious
way to delete a widget.
> Also, in a widget's "Create Widget" screen there is no way to remove
an item from the widget.
>
> **To Reproduce**
> Create a widget in Preferences -> Widgets and try to find a way to
delete it.
>
> **Expected behavior**
> A somewhat obvious way to delete a widget and to remove items from a
widget (or if non-obvious at least have the methods documented in
https://companion.home-assistant.io/docs/integrations/ios-widgets)
> </issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> <comment_new><author>@bgoncal</author><body>
> Swipe left on the item you want to remove.</body></comment_new>
> <comment_new><author>@bgoncal</author><body>
> Good point, sorry to overlook, can you try the 2 fingers swipe left
gesture from your trackpad? (Not sure how it would be on a mouse)
>
> But good point, an easier alternative should be added to the
Mac.</body></comment_new>
> </comments>
>
</details>
- Fixeshome-assistant/iOS#3890
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
## Summary
The Details widget was missing the "notify when run" toggle available in
the Scripts widget, causing unwanted notifications when scripts were
executed from the widget.
Added `showConfirmationNotification` parameter to
`WidgetDetailsAppIntent` following the same pattern as
`WidgetScriptsAppIntent`:
- Added parameter with existing localization strings
(`app_intents.notify_when_run.title/description`)
- Flows through `WidgetDetailsEntry` to `ScriptAppIntent` when widget
button is tapped
- Only visible in configuration when "Run Script" is enabled
- Defaults to `true` for backward compatibility
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- START COPILOT CODING AGENT SUFFIX -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Missing "notify when run" toggle for Details
widget</issue_title>
> <issue_description>**iOS device model, version and app version**
>
> Model Name: iPhone 16 Pro
> Software Version: iOS 26.1
> App version: 2025.11.2 (2025.1537)
>
> **Home Assistant Core Version**
> 2025.11.3
>
> A "notify when run" toggle is missing from the "Details" widget
resulting in unwanted notifications when the script is run.
> This toggle exists in the "Scripts" widget.
> </issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>
</details>
- Fixeshome-assistant/iOS#4018
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Replaces NavigationLinks for internal/external URL and privacy pickers
with sheet presentations on iOS versions below 26.0. This ensures
compatibility and consistent user experience across iOS versions by
providing modal sheets as an alternative to navigation-based
presentation.
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
The button was removed by mistake when migrating screens around it to
SwiftUI
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
Bumps the dependencies group with 1 update:
[fwal/setup-swift](https://github.com/fwal/setup-swift).
Updates `fwal/setup-swift` from 2.4.0 to 3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fwal/setup-swift/releases">fwal/setup-swift's
releases</a>.</em></p>
<blockquote>
<h2>3.0.0 Beta 1</h2>
<h2>Beta 1 of using Swiftly to setup Swift</h2>
<ul>
<li>Now uses Swiftly to set up Swift</li>
<li>Added flag <code>skip-verify-signature</code> to disable GPG
verification checks</li>
</ul>
<h2>Features</h2>
<ul>
<li>Setup Swift more Swiftly 🚀 (setup-swift 3.0) (<a
href="https://redirect.github.com/fwal/setup-swift/issues/710">#710</a>)
<a href="https://github.com/fwal"><code>@fwal</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="364295d9c2"><code>364295d</code></a>
Bump build</li>
<li><a
href="7ef546c485"><code>7ef546c</code></a>
Update readme</li>
<li><a
href="3273319f0f"><code>3273319</code></a>
Bump swiftly</li>
<li><a
href="a90d2583fe"><code>a90d258</code></a>
Pass skip flag</li>
<li><a
href="ded451bd85"><code>ded451b</code></a>
Update workflows</li>
<li><a
href="0dad4e4b3a"><code>0dad4e4</code></a>
Merge pull request <a
href="https://redirect.github.com/fwal/setup-swift/issues/710">#710</a>
from swift-actions/next</li>
<li><a
href="4abecca1bb"><code>4abecca</code></a>
Build</li>
<li><a
href="0c751509fe"><code>0c75150</code></a>
Formatting</li>
<li><a
href="7849873cbf"><code>7849873</code></a>
Update gpg handling</li>
<li><a
href="9005990785"><code>9005990</code></a>
Merge branch 'main' into next</li>
<li>Additional commits viewable in <a
href="7ca6abe6b3...364295d9c2">compare
view</a></li>
</ul>
</details>
<br />
[](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
Refactors the didFailProvisionalNavigation delegate method to better
distinguish between URLError, WebKitErrorDomain, and other errors.
Ensures appropriate logging and user feedback for different error types,
and avoids showing error messages for cancelled requests.
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
At some point this flow needs to be migrated to not be UIKit dependent,
for now this workaround will provide the proper view controller to be
used to present the webview for login
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
<img width="748" height="650" alt="CleanShot 2025-11-17 at 16 46 13@2x"
src="https://github.com/user-attachments/assets/ad8dcd50-0add-400f-ab30-7b2fd84d3c94"
/>
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
## Summary
Fixes#3691 - kCLErrorDomain errors on macOS with WiFi disabled.
Claude found the problem, but I did build and test to verify.
Root Cause:
- oneShotLocation() wraps CLError in OneShotError enum before throwing
- Error recovery in manuallyUpdate() only checked for raw CLError type
- This type mismatch prevented error recovery from triggering
- Errors propagated to UI instead of being handled gracefully
The Fix:
- Updated error recovery to also handle OneShotError type
- Now location failures are properly caught and sensor updates continue
without location data
- No more error dialogs when WiFi is disabled on macOS
Co-authored-by: Luke <8517289+luke3butler@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
Copy/Paste WKWebView on Mac Catalyst apps is known to be buggy and
unreliable, while Apple does not fix this, this PR adds a hack
alternative which links shift + command + c/v to custom copy paste
methods, same used by the new mac top bar copy/paste icons
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request and helping to improve Home
Assistant. Please complete the following sections to help the processing
and review of your changes. Please do not delete anything from this
template. -->
## Summary
<!-- Provide a brief summary of the changes you have made and most
importantly what they aim to achieve -->
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
<!-- If there is any other information of note, like if this Pull
Request is part of a bigger change, please include it here. -->
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>