Commit Graph

637 Commits

Author SHA1 Message Date
Abdullah Taş
6b869a6188 fix(ios): contacts.add crashes the app via unfetched CNContactFormatter keys (#99475)
* fix(ios): prevent contacts.add crash from unfetched CNContactFormatter keys

ContactsService.payload(from:) formats contacts with CNContactFormatter, but
payloadKeys did not include the formatter's required-key descriptor. The
formatter then reads name components (e.g. middleName) that were not fetched,
so CNContact raises CNPropertyNotFetchedException — an Objective-C exception
that is not caught by Swift error handling and terminates the app.

Add CNContactFormatter.descriptorForRequiredKeys(for: .fullName) to payloadKeys
so every key the formatter touches is fetched.

* fix(ios): clarify contact formatter contract

---------

Co-authored-by: abdullahtas0 <“dev.abdullahtas@gmail.com”>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-03 03:08:15 -07:00
Peter Steinberger
0e68c50139 fix(ios): add Photos permission controls (#99350)
* fix(ios): add Photos permission controls

* chore(i18n): sync native Photos strings

* fix(ios): align Swedish Photos disclosure

* test(ios): complete limited Photos UI proof

* chore(i18n): refresh native source lines
2026-07-02 22:11:14 -07:00
Abdullah Taş
c37961fdab fix(ios): onboarding Retry Connection does nothing after editing gateway details (#99220)
* fix(ios): make onboarding Retry Connection use current manual input

Retry Connection on the auth step replayed connectLastKnown(), which
silently returns when no last connection is stored and otherwise redials
the stale persisted endpoint, ignoring host/port/TLS and token edits made
on screen. Manual retries now dial the current form input; discovered
gateway retries keep the previous behavior.

* fix(ios): repair onboarding credential retry

Co-authored-by: Abdullah Taş <29359748+abdullahtas0@users.noreply.github.com>

---------

Co-authored-by: abdullahtas0 <“dev.abdullahtas@gmail.com”>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 20:49:14 -07:00
joshavant
cfa7b1b616 Add iOS licenses settings screen 2026-07-02 20:34:59 -05:00
Peter Steinberger
32762dad53 fix(ios): return chat to originating control detail (#99245)
* fix(ios): return chat to originating control detail

Co-authored-by: Colin <colin@solvely.net>

* fix(ios): reset retained state before control chat handoff

Co-authored-by: Colin <colin@solvely.net>

---------

Co-authored-by: Colin <colin@solvely.net>
2026-07-02 15:20:51 -07:00
Sahil Satralkar
09de1642f3 fix: Update Dark/Light mode UI control appearance (#99052)
* fix: keep iOS appearance row visible

* test(ios): verify appearance preference updates

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 14:53:24 -07:00
PollyBot13
2f707f9811 fix: prevent Voice Wake crash after Talk audio capture (#99137)
* fix: prevent Voice Wake audio restart race

* fix: handle in-flight Voice Wake suspension

* test(ios): harden Voice Wake lifecycle proof

* fix(ios): remove Voice Wake tap after failed start

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 14:41:49 -07:00
NianJiu
3424ee6771 fix: stop iOS screen recording after cancellation (#99155)
* fix: stop iOS screen recording after cancellation

* test(ios): exercise real screen-record cancellation

---------

Co-authored-by: NianJiuZst <180004567+users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 14:14:30 -07:00
PollyBot13
8b99c45bbb fix: route iOS OpenAI realtime Talk through WebRTC (#98563)
* fix: route iOS OpenAI realtime talk through WebRTC

* fix(ios): harden native realtime routing

* fix(ios): preserve realtime route ownership

* fix(ios): balance realtime audio sessions

* chore(ios): sync native i18n inventory

* fix(ios): preserve Azure realtime relay

* fix(ios): harden realtime session recovery

* chore(ios): sync native i18n inventory

* fix(ios): preserve selected Azure realtime routing

* fix(ios): rotate terminal realtime sessions

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 12:49:23 -07:00
Sahil Satralkar
496ce0e05d fix: Control row icons use inconsistent row styling (iOS) (#98936)
* fix: align iOS Control row icon styling

Closes #98916.

* chore(ios): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 05:07:02 -07:00
Lokimorty
4f933ccf7b fix(ios): gateway error shows twice on the Settings Gateway page (#98856)
* fix(ios): show gateway errors once as a swipeable animated toast

Gateway connection errors on the Settings > Gateway page appeared twice:
as the app-wide toast and again as an embedded banner section. Remove the
embedded banner (and its now-dead sheet/action helpers) so problems surface
only via the root toast, animate the toast in smoothly from the top, and
support swipe-up to dismiss with re-arm on new problems.

* fix(ios): re-surface gateway toast on repeated problem reports

A swiped-away toast stayed hidden when a retry failed with an identical
problem, because value equality alone produces no observable change. The
model now counts every problem report; a report while hidden re-shows the
toast, and a report while visible shakes it instead of stacking a new one.

* fix(ios): keep reset-onboarding action on the gateway toast and sync i18n inventory

The root toast is now the only gateway problem surface outside covers, so it
must keep the reset-onboarding primary action the removed settings banner had:
auth-token-mismatch problems now show Reset onboarding and run the full
GatewayOnboardingReset flow. Also refreshes the native i18n inventory for the
changed Swift strings.

* fix(ios): preserve gateway problem recovery state

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 04:50:12 -07:00
Sahil Satralkar
574604e3da fix: clean up iOS About page copy (#98985)
* fix: clean up iOS About page copy

* fix(ios): sync About copy inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 04:09:29 -07:00
Lokimorty
9d3e263365 fix(ios): back from settings details returns to the originating screen (#98898)
* fix(ios): back from settings details returns to the originating screen

Detail views reachable from multiple places (gateway, voice, notifications
settings) previously opened by switching to the canonical Settings tab, so
Back landed on the Settings root instead of the screen the user came from.
Phone tabs now push SettingsRoute details on their own NavigationStack via
PhoneTabSettingsHost, the Control hub pushes the gateway detail onto its own
stack, and the Approvals->Notifications shortcut appends instead of replacing
the path (phone and iPad). Global flows (deep links, onboarding, problem
banner, notification dialog) still jump to the canonical Settings tab.

* chore(i18n): sync native app i18n inventory line references

* test(ios): prove settings back navigation

* test(ios): prove settings back navigation

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 10:08:39 +01:00
OfflynAI
133ce01e4a feat(ios): PR1 brand color palette overhaul (#98930)
* feat(ios): align brand color tokens with design guide (PR1)

* fix(ios): preserve brand contrast

* fix(ios): cover tinted palette surfaces

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

* chore(ios): sync native i18n inventory

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 09:12:19 +01:00
Peter Steinberger
c4102f5d67 feat(ios): refine the chat experience (#98953)
* feat(ios): refine the chat experience

* feat(ios): refine the chat experience
2026-07-02 08:40:53 +01:00
joshavant
8e95e56e2d chore(ios): generate release artifacts locally 2026-07-01 22:05:26 -05:00
Josh Avant
0cdce79221 docs: update mobile app release messaging (#98843) 2026-07-01 21:11:56 -05:00
Peter Steinberger
313560d5b9 feat(ios): modernize navigation and settings (#98811)
* feat(ios): modernize navigation and settings

* fix(ios): remove obsolete settings helpers

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture

* test(ios): update i18n collector fixture
2026-07-02 02:43:49 +01:00
joshavant
080481fec9 Require explicit iOS release versions 2026-07-01 20:24:38 -05:00
joshavant
6ad2626cfd fix(ios): generate light app store screenshots only 2026-07-01 19:16:23 -05:00
Peter Steinberger
3e50f41dd6 improve(ios): simplify Talk controls and composer alignment (#98736)
* refactor(ios): streamline talk and composer controls

* test(ios): restore Talk control state

* chore(ios): refresh native i18n inventory
2026-07-02 00:48:37 +01:00
joshavant
3832b2be5f Document iOS release failure stop rule 2026-07-01 18:04:50 -05:00
joshavant
77f632e7db Add iOS release agent guardrails 2026-07-01 18:04:50 -05:00
Peter Steinberger
8502ef6c59 feat(ios): modernize the app with iOS 26 Liquid Glass (#98452)
* feat(ios): adopt iOS 26 Liquid Glass design

* refactor(ios): refine Liquid Glass hierarchy

* docs(ios): require Xcode 26

* refactor(ios): remove obsolete design helpers

* fix(ios): keep agent tab navigation hidden

* fix(ios): compact chat composer at rest

* refactor(ios): reduce interface density

* fix(ios): keep native string inventory current
2026-07-01 19:06:04 +01:00
PollyBot13
ffd7d68687 fix: route iOS Talk fallback settings correctly (#98602) 2026-07-01 11:26:34 -04:00
Vincent Koc
5e4d71686a fix(apple): preserve localized static labels 2026-07-01 05:19:12 -07:00
Vincent Koc
fe18aa38db feat(apple): complete core locale coverage 2026-07-01 05:19:12 -07:00
Vincent Koc
301d0d5551 style(apple): format localized share extension 2026-07-01 05:19:12 -07:00
Vincent Koc
9cfbd1b65c feat(apple): localize native app surfaces 2026-07-01 05:19:12 -07:00
Vincent Koc
02046b665f feat(apple): add Russian and Hindi app catalogs 2026-07-01 05:19:12 -07:00
Peter Steinberger
b2355ef6a2 fix(ios): improve light and dark appearance contrast (#98443) 2026-07-01 07:31:42 +01:00
Josh Avant
0c7bac34ae fix(ios): classify TLS fingerprint timeouts (#98429)
* fix(ios): classify gateway TLS fingerprint timeouts

* Add discovered TLS trust regression test
2026-07-01 01:06:13 -05:00
Peter Steinberger
c230ab3c92 improve(ios): clarify Control and Talk visual hierarchy (#98423)
* feat(ios): refine control and talk visual hierarchy

* feat(ios): refine control and talk visual hierarchy

* feat(ios): refine control and talk visual hierarchy
2026-07-01 06:19:58 +01:00
Josh Avant
ad59492d3c fix: show actionable mobile protocol mismatch recovery (#98385)
* Fix mobile protocol mismatch recovery

* Test iOS protocol mismatch connect failures

* Fix iOS protocol mismatch problem actions
2026-07-01 00:11:03 -05:00
Peter Steinberger
d0f655811c fix(ios): use Gateway speech providers in Talk (#98376)
* fix(ios): route gateway speech through talk.speak

* fix(ios): preserve realtime fallback state

* fix(ios): satisfy audio delegate concurrency

* fix(ios): ignore stale audio callbacks

* fix(ios): ignore stale audio callbacks

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-07-01 05:33:51 +01:00
Brian Snyder
63dc9201c6 fix(ios): open app on chat by default (#98353)
Co-authored-by: BSnizND <199837910+BsnizND@users.noreply.github.com>
2026-06-30 23:54:01 -04:00
Daniel Nylander
339d19b089 Add Swedish mobile app localization (#98043)
* feat: add Swedish mobile app localization

* fix: remove dead Swedish watch extension localization

* docs: document iOS metadata locale directories

---------

Co-authored-by: Daniel Nylander <daniel@danielnylander.se>
2026-06-30 18:15:04 -07:00
OfflynAI
44b4a0ac05 fix(ios): advance onboarding step after QR scan (#98302)
handleScannedLink does not set self.step = .connect after scanning a QR
code from the welcome step. The scanner sheet dismisses and the UI
returns to the welcome screen instead of showing connection progress.

The sibling handleScannedSetupCode path correctly advances the step;
this aligns the QR scan path.

Fixes #98297

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-30 19:38:58 -05:00
Colin Johnson
54b09580f6 fix(ios): reset sidebar navigation stacks (#94991) 2026-06-29 20:56:22 -04:00
joshavant
ff35f3bb2c Track mobile release SHAs with refs 2026-06-26 18:54:45 -05:00
joshavant
d7c69da6a6 docs(ios): document live activity review flow 2026-06-24 11:00:04 -05:00
joshavant
e77994ed5a fix(ios): clarify camera purpose string 2026-06-24 11:00:04 -05:00
Vincent Koc
0671c08900 chore(release): close out 2026.6.10 on main (#96271)
* chore(release): close out 2026.6.10 on main

* chore(release): align native app metadata for 2026.6.10

* chore(release): sync Android 2026.6.10 notes

* docs(changelog): preserve 2026.6.9 history

* docs(changelog): preserve 2026.6.9 history
2026-06-24 11:51:14 +08:00
joshavant
8739f1e17e fix(ios): wait for screenshot checksum propagation 2026-06-23 21:32:26 -05:00
joshavant
3dea94f4cb fix(ios): make screenshot upload deterministic 2026-06-23 20:48:45 -05:00
joshavant
5e98cb6ace docs(ios): update Talk app store metadata 2026-06-23 19:21:05 -05:00
joshavant
b93eeceac0 build(ios): attach app review notes PDF 2026-06-23 19:18:51 -05:00
joshavant
4f5e25aa54 docs(ios): add app review notes 2026-06-23 18:22:07 -05:00
joshavant
fcedd37067 test(ios): guard local network permission trigger points 2026-06-23 14:48:33 -05:00
joshavant
8bddafba65 fix(ios): defer local network discovery until onboarding 2026-06-23 14:48:33 -05:00