<!-- 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
In this PR I set to migrate the LocationHistoryList to SwiftUI, to
reduce the dependency in Eureka. This screen was picked at random.
As this screen is presented from two different places, SettingsDetail
and Debug screens, also updated the code in the corresponding classes.
The LocationHistory list reacts to changes.
### LocationHistoryDetail
LocationHistoryDetailViewController also gained a SwiftUI wrapper in
order for it to be presented from the new LocationHistoryListView.
This wrapper syncs the navigation items between the wrapped View
Controller and the parent.
Move functionality also got migrated.
### Misc changes
- Support for M4 added to the Gemfile.lock (added automatically)
- New extension for safe subscripting in arrays added.
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
`LocationHistoryList item`
<img width="967" alt="Screenshot 2025-02-27 at 23 39 32"
src="https://github.com/user-attachments/assets/01576ced-ef97-4340-8353-e52a6fd14fac"
/>
`Empty LocationHistoryList`
<img width="955" alt="Screenshot 2025-02-27 at 23 40 56"
src="https://github.com/user-attachments/assets/303ae7c8-5fd6-40c1-87b4-e38098a175ea"
/>
## Summary
Updates gemfile to include the newest fastlane version;
## Screenshots
No user facing features
## Link to pull request in Documentation repository
NA
## Any other notes
NA
## Summary
Navigate to default server when deeplink to the app passing
"?server=default".
Currently when you use deep link to navigate to one lovelace page and
you have multiple HA servers in your iOS App it always asks which server
you want to use.
With this change you are able to default to your current server by using
a query item "?server=default"
## 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#
https://github.com/home-assistant/iOS/assets/5808343/c29ac74e-8ea4-4d5a-93ec-53ef7c64ced6
## Summary
The nice folks at [Emerge](https://emergetools.com) have given us access
to their platform for sizing the app and doing some non-live performance
testing. This integrates it it.
## 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
Turning off Bitcode by switching to Xcode 14 is causing our binary size
to bloat, and to investigate this best I'll fix this long-term by
keeping track of size changes.
This adds emerge to a few places:
1. Individual builds that are submitted to Apple
2. Pull requests
The PR builds do not get sent to Apple nor are they uploaded because we
do not want to allow in-development changes to go anywhere with our
official signing information.
Fixes#2214.
## Summary
Updates to building with Xcode 14 as the minimum. Updates all
dependencies (as many both require Xcode 14 to update and would not work
with it without updating).
## Any other notes
This excludes `arm64` (new in Xcode 14) from watchOS builds. This is due
to App Store Connect having a bad heuristic for file size:
> ITMS-90389: Size Limit Exceeded - The size of watch application
'/Payload/Home Assistant.app/Watch/HomeAssistant-WatchApp.app' (102MB)
has exceeded the 75MB size limit.
Our binary file is larger than 75 MB unthinned and our thinned install
size is sub-25 MB, so I don't think this is testing the right thing. In
either case, we're somehow below whatever the limit actually is with
just `arm64_32_v8` and `arm_v7k` slices.
The first build on TF using the Xcode 14 build for distribution is
2022.413.
* Bump ruby dependencies
* Bump ruby version
* Bump to macOS 12 for distribute
* Update README for ruby version
* Certificate updates for MAS too
* Disable `key: key` -> `key:` in rubocop
## Summary
- Updates Firebase, Realm, Sentry, SwiftFormat, SwiftLint, Eureka, Sodium.
- Updates MaterialDesignIcons to 6.5.95. Fixes#1933.
- Updates Fastlane which now supports App Store Connect API keys for things like dSYM downloading.
- Updates several dependencies
- Removes Lokalise -- if we can't do it on Catalyst, it doesn't feel worth it to do it elsewhere
- Migrates the NotificationTestCases from a Podspec that keeps having issues to a fastlane script which copies in the latest ones
Adds new fastlane lanes:
- `fastlane lint` which checks the linters
- `fastlane autocorrect` which applies the linters which can autocorrect (Rubocop, SwiftFormat)
Adds a build step to the Codegen abstract target which runs SwiftFormat in lint mode, pointing out what it's going to change when run.
Applies SwiftFormat to nearly all code -- exempts a few externally-sourced files and generated code.
Adds some new linters: YamlLint (YAML files) and RuboCop (Ruby files). Moves SwiftLint to our own runner. All three of these have built-in GitHub Actions output formats, so we don't need to do anything special to have them work. Applies YAML and Ruby cleanup.
Adds some short-circuit logic for caching to speed up various Actions. Adds a flag to make Firebase optionally use xcframeworks for test builds so they don't need to compile them. We only need to build it for release builds since they lack the ARM Mac slices.
## Summary
Fixes the Gemfile.lock being out of sync.
## Any other notes
I removed the Sentry plugin from the Fastlane plugins list, but did not re-run bundle install, thus making it inconsistent. Also updates the dependencies 'cause why not.
## Summary
- Creates a Developer ID build, notarizes it, staples and then makes a .zip out of it.
- Re-exports the same Developer ID build for the Mac App Store and uploads it.
- Creates an iOS App Store build and uploads it.
- Uploads dSYMs and other debug information to Sentry during the build.
- Builds for every push to master. Does not automatically expose to beta users, at least not yet. But for internal TestFlight this should produce the latest and greatest as it goes.
## Any other notes
- Necessitates doing an automatic incrementing number for the build number, since it must be monotonically increasing for macOS builds. Uses the format `2021.{RUN_NUMBER}`.
- Moves to use manual code signing for Release builds. It was already this way before (we were just using the Xcode UI at submission time specify), but now it doesn't require fiddling.
- Changes Firebase config to be not in a scheme. When it's in a scheme, it's after the code sign phase, which can produce issues for Fastlane.
- Changes Firebase to not be an xcframework in CI, since they do not ship ARM Mac Catalyst slices yet.
- Removes some incorrect code sign statuses in the Mac Launcher app.
- Moves to calling the Lokalise2 CLI app instead of the occasionally-updated fastlane plugin wrappers.
- Adds a step to upload strings to Lokalise; performs it before downloading.
- Moves to sorting the localized strings alphabetically in their files.
- Looks like #1429 in execution.
## Summary
- Fixes a crash when saving complications due to #1360 trying to save the MaterialDesignIcons model object as a String.
- Fixes complications not updating on save on the Watch if there are no template-requiring complications.
- Fixes firing the 'success' state on actions on the Watch immediately after asking the phone to send the request, rather than when it completes. This will make it feel slower but will be more accurate since it's failable.
- Updates Communicator to 4.x (the latest) and adjust to its changes.
## Screenshots
n/a
## Link to pull request in Documentation repository
n/a
## Any other notes
As Communicator keeps diverging from how the WatchConnectivity API structures things (especially around error handling) it may be worth thinking about going back to using it directly. For now though keeping our dependencies up-to-date is more important than inaction.
- Updates Fastlane & its dependencies (including new Lokalise actions for their new API).
- Updates app dependencies, and fixes new lint warnings due to SwiftLint being updated.
- Works around Xcode 12.0 (gm -208 and -209) and 12.2 (b1, so far) shipping without functional dylibs for its CoreNFC support in the simulator, making tests crash 100% of the time.
- Works around Xcode 12.0 and 12.2 (same ones) being unable to `git clone` from `https://github.com/catchorg/Catch2` without hitting `error: RPC failed; curl 18 transfer closed with outstanding read data remaining`. Using the system git makes this functional, however… Xcode's documented env var which controls using system git does not work; it always uses its own. The documented `-gitProvider system` command doesn't work, but `-scmProvider system` does, but there's no built-in fastlane things to get this piped down to the right levels, and the location it does SPM checkouts is so indirect that I couldn't even think of how to modify it to pass the information down. This instead links from the internal git to the system git, which works.
- Adds the source version of SPM dependencies to a cache.
- Adds the compiled version of Realm and Firebase to a cache. These are beastly dependencies that rarely change.
- Retries tests a single time if they fail; surprise, another SPM issue! It occasionally fails to order SPM dependencies correctly, making Sodium unable to see Clibsodium.
- Adds a step to upload build logs and crashes as artifacts to the test execution.
Realm 5.3.6 has a workaround for the iOS 14 b3-b6 (but reverted by Apple in b7) crash. However, this workaround also causes deadlocks/crashes restoring form the background on iOS 12 and below. This reverts to the build before the regression, which will cause us to crash on the previously-noted iOS 14 betas, but will make iOS 12 and 11 work as expected.
This also fixes the alert we present when the Realm can't be be set up, which broke for Scenes.
Fixes#1020.
- Moves Realm & Sodium to Swift Package Manager. Sodium _just_ added support and I fixed a Release issue there.
- Manually removes linking against Lokalise. Their binary distribution hasn't been updated.
- Avoids talking to things not on Mac (NotificationCenter [Today Widget], Core Telephony).
- Fixes registering fonts, which need to specify scope and also avoid complaining if registration occurs twice.
- Hides preferences like Motion, NFC, Apple Watch which are not on Mac.
- Adds a very basic update checker, which looks at the GitHub releases and does an equality check on version info.
This is, of course, not a polished product: settings still open in a form sheet, there's absolutely no useful menu items, no support for multi-window, nor a prettier NSWindow kinda thing.
- Upgrades the project file format from very old Xcode compatibility to 11.4+.
- Updates to Cocoapods 1.10 beta.
- Removes some overrides of the xcconfig and updates the xcconfig.
- Adds exclusions for the x86_64/64-bit watchOS simulator using new b4 format.
- Updates intents for iOS 14/Xcode 12.
- Adds an Intent-powered Perform Action widget (which does nothing and isn't styled) to make sure the flow works. It's actually not possible to define an empty set of widgets if the extension exists, so it needs something.
- Disables critical alert entitlement changes in CI (this is the only required thing)
- Updates Bundler dependencies
- Add master/beta to CI for tests so cache can be available
- Adds a helper and tests for it which will execute a Promise along with begin/end background task methods.
- Wraps updating location from notification, location/sensors from background fetch, and location update from shortcut.
- Fixes updating location happening from notification even when the setting is off.
- Fixes tests to both execute and pass.