Commit Graph
1154 Commits
Author SHA1 Message Date
tianma-if 7ceed4ea16 feat(ios): route App Store archives through Xcode Cloud on beta macOS
Add Cloud post-clone setup and docs so store binaries build on Apple's
release hosts; block local archive-app-store on seed OS to avoid ITMS-90111.
2026-08-07 19:54:28 +08:00
tianma-if 5124ef3539 fix(ios): image UX, editor stability, and create draft hygiene
Align iOS TipTap images with Android (width presets, ⋯ actions, WebP
compress, reliable preview). Persist contentJson so image width survives
detail/viewer; force shared WebView re-push and block late autosave so
new notes open empty. Long-press fullscreen image preview opens resource
actions on both iOS and Android.
2026-08-07 19:12:27 +08:00
tianma-if 96e4473a1b fix(ios): create-back commit, press motion, editor keyboard and toolbar
Make create Back commit like Android so notes appear in the list and the
next New note opens empty. Harden memo-card press feedback, allow
programmatic WKWebView keyboard focus, and pin the format toolbar above
the scrolling editor body so it no longer jumps under the software keyboard.
2026-08-07 14:54:04 +08:00
tianma-if 74fef8c57b feat(editor): add insert/edit external hyperlink controls
Give the rich-text and Markdown editors a dedicated hyperlink entry
separate from note linking, with Ctrl/Cmd+K, URL normalization, and
remove-link support. Closes the discoverability gap in #192; link
preview cards remain out of scope.

Related Issue: #192
2026-08-07 14:50:56 +08:00
tianma-if 0bbfd47357 release(ios): ship SwiftUI binary 1.12.6 (31) for App Review
Bump the native build number, prefer stable Xcode for archives, disable
fastlane precheck IAP checks, and document the App Store archive path.
2026-08-07 13:45:57 +08:00
tianma-if cf76d9dbb8 release(ios): prepare native SwiftUI App Store archive path
Bump marketing/build versions for the Swift client, reuse the existing
App Store share-extension App ID, and add ExportOptions/fastlane/archive
scripts so the native binary can be signed and submitted without EAS iOS.
2026-08-07 13:16:17 +08:00
tianma-if 47832af55c chore: release v1.12.6 [skip ci] 2026-08-07 12:48:40 +08:00
tianma-if a46ad3f7b5 chore: restore release baseline to 1.12.5 for formal cut
Pre-store bumps set package and Expo marketing versions to 1.12.6 without a GitHub Release. Restore the formal baseline so release automation can cut v1.12.6. Keep Android versionCode at 86 so the release commit advances it safely.
2026-08-07 12:48:02 +08:00
tianma-if 8bd21e2911 chore: ignore local App Review crash dump directory
Keep .tmp-app-review-crashes out of version control so device crash logs and self-test screenshots stay local.
2026-08-07 12:44:55 +08:00
tianma-if f4868b3136 fix(mobile): improve protected image load UX and diagnostics
Unify /blob path normalization for authenticated note images, log and surface load failures once per note, and show a skeleton instead of a broken-image flash while resources decode.
2026-08-07 12:43:11 +08:00
tianma-if 93cceada28 fix(typecheck): exclude iOS EditorSource from root tsc
Root bun install does not install apps/ios/EditorSource deps, so
including its Vite config in root typecheck failed with missing
vite-plugin-singlefile. Mirror mobile: exclude the nested package
and expose typecheck:ios-editor for optional local checks.

Fixes #189
2026-08-07 12:28:36 +08:00
tianma-if aaa8d47799 fix(ios): harden edit/sync so notes keep text, order, and Markdown rendering
Rebase stale outbox revisions, leave edit onto the list without flashing
detail, treat TipTap JSON as structural truth for image order while
deriving markdown for sync, and force the detail viewer through
setMarkdown so flattened contentJson no longer kills headings/lists.
2026-08-07 12:19:14 +08:00
tianma-if 16c1d836d5 fix(ios): make note image upload pick, insert, and persist on reopen
Replace the silent PhotosPicker/Transferable path with PHPicker, insert
into TipTap with local hydrate, and flush materialized create/edit body
so uploaded images survive list → detail reopen.
2026-08-07 11:38:30 +08:00
tianma-if c246f916f7 fix(ios): stop yanking caret to end while typing in the editor
Focus at document end only once when opening a note for edit. SwiftUI
re-binds and setContent no longer call focusEnd on every keystroke, so
mid-document editing keeps the caret in place.
2026-08-07 11:15:17 +08:00
tianma-if 753a09c9a4 perf(ios): reuse TipTap WebViews and harden detail/edit open path
Keep one long-lived viewer and editor WKWebView so switching notes only
rebinds setContent instead of reloading the EditorBundle. Warm both
runtimes after sign-in, restore Evernote-style focus-at-end on edit,
block empty autosave from clobbering notes, and stop showing flattened
contentText when the rich viewer is still booting.
2026-08-07 11:12:04 +08:00
tianma-if dfc96c686c feat(ios): Android-parity image and attachment action menus
Add bottom-sheet resource actions (share, download, rename, delete)
with success and failure feedback. Viewer image tap opens fullscreen
preview; long-press and attachment taps open the menu. Download uses
the Files export picker so users always know whether the save worked.
2026-08-07 10:33:27 +08:00
tianma-if c22064bcea fix(ios): render demo note images including SVG blobs
Pre-hydrate protected image srcs before TipTap setContent so file://
WebView never loads /api paths under sandbox. Detect SVG correctly,
emit data URLs for SVG assets, treat numeric image width as percent,
and keep unit tests off real demo cache keys.
2026-08-07 10:15:10 +08:00
tianma-if 8af900e24b fix(ios): load note images and fix bottom-tab create layout
Authenticated and remote images in TipTap now load via a custom
edgeever-res scheme after native fetch, so the file:// editor can
display protected blobs. Bottom create control sits under the tab
separator at a smaller size, and list decode skips corrupt memo rows
instead of blanking the feed.
2026-08-07 03:22:51 +08:00
tianma-if 3a9dac9540 docs: document SwiftUI iOS app in tech stack and project tree
Update the bilingual READMEs and project-structure map so mobile is
split into Android Expo RN and native SwiftUI iOS under apps/ios.
2026-08-07 02:53:24 +08:00
tianma-if cd4f010d8f feat(ios): add native SwiftUI client with Android UI parity
Replace the abandoned RN iOS path with a SwiftUI app (iOS 17+) that reuses
the shared TipTap editor bundle, GRDB local mirror/outbox, and Android-aligned
shell chrome for list, create, detail, and Me. Package the editor HTML in the
app resources so Markdown renders, present edit from the workspace root with a
UIKit FAB, and keep caret stable while typing.
2026-08-07 02:52:01 +08:00
tianma-if b4e8be688b fix(mobile): push note edits online-first and unstick sync queue
Android edits could stay pending after pull-to-refresh because content always queued and refresh only pulled. Save online when reachable, force-flush the outbox on refresh and resume, and surface retry/error details so Web sees Android changes again.

Related Issue: #185
2026-08-06 21:05:57 +08:00
tianma-if 95db3ee5a3 fix(mobile): delete offline-created and empty notes from list selection
Unsynced notes used local temporary IDs while multi-select delete only
called the remote API, so empty notes could not be removed and failed
silently. Delete local-only notes offline, soft-delete remotes after
API success, remap multi-select IDs, and surface delete errors.

Refs #184
2026-08-06 20:47:24 +08:00
tianma-if ee49d280ec fix(deploy): make fork upstream sync a readable deploy mirror
Read-only Cloudflare forks were getting silent green no-ops when already
aligned, or unclear merge skips after Sync fork. Align deploy-only forks
with reset, keep merge for customized trees, always write a job summary,
and document force_redeploy plus an optional Cloudflare Deploy Hook.
2026-08-06 18:22:33 +08:00
tianma-if 852e618835 Revert "fix(mobile): harden iPadOS 26.5 paths against Fabric/WebView crashes"
This reverts commit 494cce5e84.
2026-08-06 18:02:13 +08:00
tianma-if 494cce5e84 fix(mobile): harden iPadOS 26.5 paths against Fabric/WebView crashes
Detail preview now uses static HTML WebView instead of Dom TipTap. Stagger
TextInput and editor host mount/teardown for edit, Me, create, and back so
Fabric ShadowNode measure and Hermes GC no longer SIGSEGV on iPadOS 26.5.
2026-08-06 17:41:30 +08:00
tianma-if e46e66b46e fix(mobile): stop App Review crashes on iPadOS 26.5
Apple rejected 1.10.1 for SIGSEGV in RCTTextLayoutManager and malloc
corruption during WKWebView media TCC probes on iPad. Drop Reanimated
list layout transitions, deny DOM/WebView media capture by default, and
declare required iOS privacy strings with full-screen phone-on-iPad
presentation for the next review build.
2026-08-06 11:47:50 +08:00
tianma-if 969fde537a chore: release v1.12.5 [skip ci] 2026-08-06 00:43:40 +08:00
tianma-if 548cf3de2a feat(mobile): allow landscape orientation
Unlock device rotation for tablet/phone landscape use (#182), and make
the login form scrollable on short landscape viewports.
2026-08-06 00:33:57 +08:00
tianma-if 2c2b5e3f0c fix(mobile): rename resource Export menu to Download
Folder save matches user expectation of Download; Share stays separate.
2026-08-06 00:01:59 +08:00
tianma-if 35f0195352 fix(mobile): label resource share action as Share, not Download
The action opens the system share sheet; Download was misleading.
2026-08-05 23:53:47 +08:00
tianma-if 50611ef9d5 chore: release v1.12.4 [skip ci] 2026-08-05 23:35:10 +08:00
tianma-if 2f62a24486 fix(mobile): make resource download and export work on Android
Read RN blobs via FileReader instead of missing Blob.arrayBuffer, dismiss
the action sheet before SAF/share UI, surface cancel/errors, and confirm
successful folder exports.
2026-08-05 23:32:15 +08:00
tianma-if 0056150f05 chore: release v1.12.3 [skip ci] 2026-08-05 22:06:05 +08:00
tianma-if f1f5804340 feat(mobile): surface app updates with a quiet toast and settings entry
Show a one-time bottom toast per installed version, and let users open
Play/GitHub or apply OTA updates from System info without blocking notes.
2026-08-05 22:05:19 +08:00
tianma-if bae5f910f2 chore(demo): reset the public demo daily at 03:00 CST
Document and default the demo reset cron to every day at 19:00 UTC
(03:00 China Standard Time), replacing the previous weekly Monday schedule.
2026-08-05 21:48:34 +08:00
tianma-if 72b4791557 fix(sync): resolve memo conflicts with adopt-cloud and copy-draft actions
Give Web, desktop, and mobile the same product-baseline conflict recovery:
copy the local draft, then adopt the cloud version and rehydrate, instead of
telling users to reload while durable local conflict state remains.
2026-08-05 21:44:45 +08:00
tianma-if 9d34f31eea fix(mobile): fit TipTap tables on narrow screens with shared styles
Equalize columns via container-query widths so typical tables wrap in place, and scroll only inside tableWrapper when many columns still overflow. Preview and edit share LocalTiptapEditor styles.
2026-08-05 21:14:36 +08:00
tianma-if 092b092508 fix(mobile): tighten attachment chips in TipTap preview
Reduce attachment row height, icon, and padding so chips sit closer to the
15px body scale while remaining within a 48px touch target.
2026-08-05 20:31:50 +08:00
tianma-if 5717160c09 fix(mobile): align TipTap body type with PC memo style
Use MEMO_CONTENT_STYLE (15px / 24 line-height) for the mobile editor and
preview WebView instead of a hardcoded 17px body, and size headings in rem
so notes feel consistent with desktop reading density.
2026-08-05 20:28:35 +08:00
tianma-if a665009226 fix(mobile): keep TipTap preview layout within the WebView width
Wide tables and flex attachment rows were expanding the editor shell past
the viewport, so text and cells clipped on the right. Cap the shell/content
to 100%, use content-relative table column widths instead of 100vw, and
scroll wide tables inside their wrappers.
2026-08-05 20:16:20 +08:00
tianma-if 3a1ce18c5a fix(mobile): make image ⋯ menu work in TipTap preview
Bind resource actions on the image control itself instead of relying on
ProseMirror handleClick after pointerdown preventDefault, which Android
WebView often suppresses. Also accept resource URLs without a /blob suffix.
2026-08-05 19:56:34 +08:00
tianma-if 2d784297ff fix(desktop): ship complete macOS ICNS so Dock never blanks
Prebuild a full iconutil ICNS (including 1024) instead of converting a lone
512 PWA PNG, validate Dock-critical types at package verify time, and set the
Dock icon at runtime as a Launch Services cache fallback.
2026-08-05 19:22:00 +08:00
tianma-if 1fe3fdc428 chore: release v1.12.2 [skip ci] 2026-08-05 19:01:29 +08:00
tianma-if 9d73865306 feat(mobile): render note preview with read-only TipTap
Share the editor TipTap schema for App note detail body so images, tables,
and Mermaid stay aligned with edit mode instead of a second Markdown path.
2026-08-05 18:56:47 +08:00
tianma-if 4d95d834f3 feat(web): explain note save conflicts with concrete reasons
Surface revision, content, edit-session, and offline-stale conflict details in the editor, keep error metadata through the sync queue, and avoid hook-order crashes plus stale dev service workers after failed HMR.
2026-08-05 17:19:55 +08:00
tianma-if 6bebb5c1d6 feat(web): expose note delete as a direct list action
Make deleting notes one click on desktop list cards instead of buried under the more menu, while keeping the existing menu path for keyboard and right-click.
2026-08-05 16:53:03 +08:00
tianma-if cdb6d00be2 chore: release v1.12.1 [skip ci] 2026-08-05 14:43:59 +08:00
tianma-if 7a7f89339f fix(web): harden Mermaid preference reads against test window stubs
getStoredMermaidRenderer assumed localStorage always exists whenever window
was defined, so full bun test runs could fail after other suites stubbed a
partial window. Safe-read the storage key and clean up shared window mocks
so Verify update stays green for forked deployments.
2026-08-05 14:41:01 +08:00
tianma-if 1709746b7b chore: release v1.12.0 [skip ci] 2026-08-05 13:55:39 +08:00
tianma-if b20d43e642 fix(web): prevent stale remote detail from clobbering editor state
Stop getMemo background refresh from overwriting newer local autosaves or
queued updates, and skip redundant setContent when reopening a note so the
caret no longer jumps to the end after detail refetches.
2026-08-05 13:54:08 +08:00