Commit graph

35 commits

Author SHA1 Message Date
Darkatse
44d2074fef ci(ios): build release iOS apps with Xcode 27.1
The canary and stable iOS builds ran on macos-latest, whose Xcode 26.6
links the iOS 26.5 SDK. iPhone Duo runs an app linked that way in a
compatibility window at a legacy iPhone size, without the vertical bar,
so the drawer bar never appears. These builds now run on the xcode-27
runner and select Xcode 27.1, whose SDK has the bar APIs; the image
defaults to 27.0. The deployment target stays at iOS 15.0.

Validation: both workflows parse; the first canary run confirms the
runner and the TestFlight upload.
2026-10-24 23:58:20 -04:00
Darkatse
ee7f74e93b docs(ios): gather the drawer bar into one section
The drawer bar was described across two iOS bullets, a page bullet
and an upstream-sync entry. MobileStyleAdaptation now gives it one
section: placement, the snapshot as its single source, publishing,
activation and page styling. API/Layout keeps what extension and theme
authors observe, iOSDevelopment keeps the simulator notes, and tt-docs
is regenerated.

Validation: pnpm run check.
2026-10-24 23:41:18 -04:00
alksdesu
bbbfa4a912 fix(ios): draw native drawer buttons only on iPhone Duo
The native bar is designed around the Duo's postures. The host now
attaches a UIHingeInteraction and draws the drawers only while the
hierarchy reports a hinge, so other iPhones and iPads keep the page's
own top bar even on iOS 27.1. The first hinge update arrives
asynchronously after the interaction is added and lays the window out
again; later updates relayout only when the hinge appears or goes away.

Validation: pnpm run check; on the iOS 27.1 iPhone Duo simulator the
outer display reports a closed hinge and shows the native bar in the
closed portrait layout. The 27.1 runtime offers no other device.
2026-10-24 00:34:25 -07:00
alksdesu
e7d81bc880 fix(ios): find the drawer bar edge from bar-region geometry
Left, right and top bars now follow one rule: the edge whose
layoutRegionForBarOnEdge:extent: region is non-empty and lies inside
that edge's safe-area inset hosts the drawers, vertical bars first. The
status bar strip follows the same vertical bar.

verticalBarEdge is no longer read. While rotating, that trait trails
the safe area by one layout pass, so the bar and the status bar strip
briefly took the side the vertical bar had just left. The host checks
for iOS 27.1 with available! instead of probing the trait's selector.

The simulator notes cover rotating the outer display from the app and
why simctl's screenConfig power must not simulate folding.

Validation: pnpm run check; on the iOS 27.1 iPhone Duo simulator, a
probe app compared the rule with UIKit's regions in the closed
portrait, closed landscape (both directions, through the rotation) and
unfolded wide layouts.
2026-10-24 00:34:01 -07:00
alksdesu
d1a4fb3724 feat(ios): draw drawer buttons in iPhone Duo system bar regions
iPhone Duo keeps bar regions outside the safe area: a vertical bar
beside the content in the closed portrait and unfolded wide layouts,
and a top band beside the status bar in the unfolded tall layout. The
page's own top bar sat next to them and left that space empty.

From iOS 27.1, while the vertical size class is regular, the window
host draws the page's top-level drawers as a native glass capsule of
SF Symbol buttons in that region: the system vertical bar when
verticalBarEdge reports one, otherwise the top bar region when UIKit
lays it inside the top safe-area inset. Compact height, such as the
closed landscape layout, keeps the page's top bar.

The window snapshot announces the edge as drawerBar. drawer-bar.js
publishes each drawer's id, title, open state and mark through
set_drawer_bar_items, and a native tap dispatches
tt-drawer-bar-activate, which clicks the drawer's own icon, so opening
and hydration keep their existing path. The page hides its top bar and
the drawers slide in from the bar's edge.

Without the top bar, page content would run under the rounded display
corners. The host's content guide follows the safe area and, while it
draws the drawer bar, takes UIKit's corner-adapted top; the snapshot
insets read the same guide, so the backdrop strips and #bg1 stay
aligned. The status bar icons follow the strip on the edge that holds
the status bar.

Validation: pnpm run check; iPhone Duo simulator on iOS 27.1 in the
closed portrait, closed landscape, unfolded wide and unfolded tall
layouts.
2026-10-23 20:36:39 -07:00
Darkatse
8ed6c627f0 fix(macos): keep actool stdin open during icon compilation 2026-10-22 06:46:49 -04:00
Darkatse
8dfd1f4282 fix(macos): give the app icon a light and dark backdrop on macOS 26
macOS 26 shrinks irregular .icns icons onto a gray plate. Bundle an Icon Composer document with the iOS light background and the logo as one layer; Tauri compiles it into Assets.car, the system derives the dark, tinted and clear appearances, and icon.icns remains the fallback for macOS 15 and earlier.

Validation: pnpm run check; debug app bundle carries CFBundleIconName and Aqua/DarkAqua/Tintable stacks, rendered by system icon services.
2026-10-22 05:17:36 -04:00
Darkatse
052d0338a6 chore(deps): upgrade Tauri to 2.12.3
Tauri 2.12.3, swift-rs 1.0.9 and the official plugin releases mark the
Swift `@_cdecl` entry points that Rust links against `public`, so iOS
release builds made with Xcode 27 link again. With the runtime exports
kept in optimized builds, drop the dev-profile overrides that built
Tauri and the Swift plugins unoptimized.

fs 2.7.0 returns only the bytes it read; the file stream already
validates the trailing count, so only its comment changes. The dialog
wrapper stays: 2.8.2 still turns confirm() into async IPC.

OpenHarmony stays on its 2.11 forks until they follow. The Nix pnpmDeps
hash is updated separately.

Validation: pnpm run check. Pending: iOS dev build on device and release
build with Xcode 27.
2026-10-10 17:47:48 -04:00
Darkatse
62ff55a9ab feat(pilot): drive Android and iOS Simulator builds
Upgrade tauri-plugin-pilot to 0.8.1, which reaches mobile webviews,
and register it on every platform the devtools-pilot feature builds.
Mobile builds take the plugin without the desktop-only press backend.
The pilot config lists the mobile capabilities too, since its explicit
list replaces the default capability set.

Add android:dev:pilot and ios:dev:pilot. The Simulator socket is found
directly; Android forwards the app's abstract socket over ADB, as
AndroidDevelopment describes.

Validation: cargo check with devtools-pilot for the host and
aarch64-apple-ios-sim; pilot 0.8.1 ping, eval, assert and snapshot on
macOS dev, the iPhone 17 Simulator and an API 36.1 emulator.
2026-10-09 23:20:10 -04:00
Darkatse
ab98b96fbb chore(deps): upgrade Tauri to 2.12.2
Tao 0.35.3 handed UIKit a UISceneConfiguration it had already
released, so iOS release builds crashed at launch. Tao 0.37 fixes
this and enables the scene lifecycle from the scene manifest alone:
the app now declares a single scene and no longer closes extra ones.
Wry 0.57 enables element fullscreen on every iOS version, so the host
stops configuring it.

Rebase the two Android Wry overrides on the 0.57.0 originals and keep
their approved differences; the chrome client uses WryActivity's
launchers. LAN discovery releases its multicast lock in the plugin's
Activity callback, the same source as Rust's resume event. Align the
CLI, official plugins and tauri-winrt-notification with the 2.12 line,
list the features the CLI writes in every tauri entry, and drop the
no-op macos-private-api feature.

OpenHarmony stays on its 2.11.6 fork and cannot build until the fork
follows. The Nix pnpmDeps hash is updated separately.

Fixes #337

Validation: pnpm run check; cargo check with devtools-pilot and for
aarch64-apple-ios; macOS pilot dev launch and Android API 36.1 debug
launch. Pending: iOS release on device, R8, Windows and Linux
artifacts, TestFlight.
2026-10-09 22:52:43 -04:00
Darkatse
9717e2fc9b feat(ios): dismiss the keyboard with a native drag
Hide WebKit's form accessory bar and let UIKit's interactive dismissal
own the gesture. A full-window KeyboardScrollView inside WindowHost is
the pan surface: it has no content, recognizes alongside WebKit's
overflow scroll views, never cancels page touches, and keeps a zero
content offset because an empty bounce makes WebKit recompute visible
geometry every frame. The WebView stays constrained to the host's safe
area and keyboard guides.

The accessory bar also caused the two-stage dismissal: keyboardLayoutGuide
tracks the union of bar and keyboard, and the bar leaves about 400 ms
after the keyboard. Without it the guide returns to the safe area in one
animation.

While the pan is active the WebView height is held. iOS WebKit treats
every view-height change as a stylesheet-environment change and rebuilds
all styles (WebPage::viewportConfigurationChanged ->
updateSizeForCSSDefaultViewportUnits -> didChangeStyleSheetEnvironment),
about 30 ms per step on an iPhone 13. Like Safari, the page relayouts
once when the keyboard settles while the keyboard itself follows the
finger.
2026-10-06 02:37:26 -04:00
Darkatse
854ed06393 build(ios): build Swift packages unoptimized in Xcode 27 dev builds
swift-rs picks Swift optimization from the Rust debug setting, and with
Xcode 27 an optimized Swift package loses the runtime exports Tauri's
plugin registration needs (Brendonovich/swift-rs#79). Keep debug info
for tauri and for every plugin that ships a Swift package so they build
in one mode: mixing modes passes on the simulator but aborts on device
in registerPlugin with swift_deletedMethodError.

swift-rs 1.0.8 fixes the SDK mix-up in SwiftPM cross builds. Remove the
overrides once the upstream export fix ships.
2026-10-06 02:37:25 -04:00
Darkatse
e99cb76d33 fix(ios): adopt scene lifecycle while keeping a single window
Enable the scene lifecycle required by iOS 27 through Tao's current
multi-scene switch, and close extra system-requested scenes.
2026-10-05 05:50:47 -04:00
Darkatse
f4e48eccc5 refactor(layout): move mobile viewport ownership into native hosts
Consume system bars, cutouts and docked keyboards in Android and iOS,
then let web content use the resulting viewport. Publish window wallpaper
strips through one shared background path.

Remove the old CSS and IME compensation layers, update layout ABI v2,
and keep the matching documentation and behavior tests together.
2026-10-05 05:50:20 -04:00
Darkatse
9329278c6d refactor(files): unify native file selection and delivery
Centralize file picking, staging and delivery across platforms, with explicit cancellation outcomes and source ownership.

Remove superseded platform bridges and redundant tests, and document the shared contract and platform differences.

Validation: pnpm run check; Android aarch64 cargo check; 117 host tests.
2026-10-04 16:28:48 -04:00
Darkatse
068f8c8574 feat(ios): enable increased memory limit 2026-10-02 19:10:49 -04:00
Darkatse
a273ba9f8d refactor(sync): replace UDP discovery with Bonjour and mDNS 2026-09-08 13:53:23 -04:00
Darkatse
57910386b7 docs(sync): condense architecture and platform guidance 2026-09-07 23:23:25 -04:00
Darkatse
a3532dde5b feat(ios): add limited iOS 15 support 2026-08-29 20:52:16 -04:00
Darkatse
5fd500b84a feat(mobile): keep AI generations running in the background #18 2026-08-11 19:47:12 -04:00
Darkatse
008ab07af3 feat(skills): support batch ZIP and folder imports #153 2026-08-07 00:05:23 -04:00
Darkatse
027582c792 refactor: remove obsolete phase terminology 2026-07-22 20:00:59 -04:00
Darkatse
55a3f7e721 fix(characters): use native file picker for card replacement #123 2026-07-09 19:47:29 -04:00
Darkatse
34e9d8b6dd refactor(rust): move Tauri host crate into workspace crates 2026-07-02 15:30:20 -04:00
Darkatse
e6111d6363 refactor(data-archive): close platform boundaries for archive delivery 2026-06-28 16:20:47 -04:00
Darkatse
187dc020aa feat(agent): export Skill archives as zip by default 2026-05-30 18:04:17 +08:00
Darkatse
1a6722a1e8 feat(data-migration): support tar archive imports #20 2026-05-11 17:45:20 +08:00
Darkatse
4d3eb4fc3e fix(agent): support mobile skill imports 2026-05-05 23:30:14 -04:00
Darkatse
303153cbf1 fix (ios): Add dark and tinted app icon variants 2026-04-25 12:24:05 -04:00
Darkatse
841ca76b41 Refactor (iOS/macOS): centralize WKUIDelegate JS dialog bridge into shared Apple module 2026-04-21 15:30:45 -04:00
Darkatse
99b1939976 feat (iOS policy): Implement iOS policy tiering strategy 2026-04-15 21:39:01 -04:00
Darkatse
461cb996e0 Fix (iOS/macOS): Added WKWebView Fullscreen API for iOS/macOS. 2026-03-29 02:53:04 -04:00
Darkatse
e1a5416cea Fix (iOS): Added native iOS download and export functionality. 2026-03-28 22:23:23 -04:00
Darkatse
46ed58d51d fix (iOS): Fixed import/export issues with the data-migration extension on iOS. 2026-03-20 00:39:01 -04:00
Darkatse
6e19134edb fix (iOS): fixed an issue in WKWebView on iOS where automatic safe-area insets caused a dead zone at the bottom. 2026-03-16 22:17:59 -04:00