feat(ios): polish onboarding and native sign-in flow (#15217)

## Summary
- Reworks the iOS onboarding, native sign-in, and paywall flow so
first-install and cold-start entry stay native, adaptive, and aligned
with the current login/subscription gates.
- Removes onboarding swipe paging, refines onboarding/paywall layout
behavior, and keeps AI/paywall entry behavior consistent for logged-in
and subscribed users.
- Adds the new mobile all-docs empty states with localized copy and
dialog entry points, and closes the remaining review follow-ups by
removing the onboarding plan artifact and dropping the iOS AI
subscription bypass.

## Test plan
- Built the iOS app for simulator with `xcodebuild -workspace
App.xcworkspace -scheme App -configuration Debug -sdk iphonesimulator
-destination 'generic/platform=iOS Simulator' ARCHS=arm64
ONLY_ACTIVE_ARCH=YES CODE_SIGNING_ALLOWED=NO CODE_SIGNING_REQUIRED=NO
build` during the native onboarding/sign-in flow work.
- Let the repo pre-commit hooks run on the latest follow-up commit
(`prettier` + `eslint --fix`).
- Checked diagnostics for the edited TS/TSX files after the review
follow-up changes.
- Manually iterated on onboarding/native sign-in/paywall UI states in
simulator during implementation.

---------

Co-authored-by: DarkSky <darksky2048@gmail.com>
This commit is contained in:
keepClamDown
2026-08-21 08:12:27 +08:00
committed by GitHub
parent c57004ea2c
commit 73e2d10973
130 changed files with 6478 additions and 2268 deletions
@@ -2,7 +2,7 @@
"ar": 88,
"ca": 85,
"da": 3,
"de": 96,
"de": 95,
"el-GR": 84,
"en": 100,
"es-AR": 84,
@@ -11,18 +11,18 @@
"fa": 84,
"fr": 88,
"hi": 1,
"it": 86,
"it": 85,
"ja": 84,
"kk": 91,
"ko": 85,
"nb-NO": 42,
"pl": 86,
"pl": 85,
"pt-BR": 84,
"ru": 86,
"sv-SE": 85,
"sv-SE": 84,
"tr": 91,
"uk": 84,
"ur": 91,
"zh-Hans": 95,
"zh-Hant": 87
"zh-Hant": 86
}
+36
View File
@@ -8425,6 +8425,42 @@ export function useAFFiNEI18N(): {
* `Create Collection`
*/
["com.affine.m.explorer.collection.new-dialog-title"](): string;
/**
* `No documents yet`
*/
["com.affine.m.explorer.empty.docs.title"](): string;
/**
* `Create your first document to start capturing ideas and organizing knowledge.`
*/
["com.affine.m.explorer.empty.docs.description"](): string;
/**
* `New Document`
*/
["com.affine.m.explorer.empty.docs.action"](): string;
/**
* `No collections yet`
*/
["com.affine.m.explorer.empty.collections.title"](): string;
/**
* `Create a collection to organize related content in one place.`
*/
["com.affine.m.explorer.empty.collections.description"](): string;
/**
* `New Collection`
*/
["com.affine.m.explorer.empty.collections.action"](): string;
/**
* `No tags yet`
*/
["com.affine.m.explorer.empty.tags.title"](): string;
/**
* `Add tags to your documents for easier organization and discovery.`
*/
["com.affine.m.explorer.empty.tags.description"](): string;
/**
* `New Tag`
*/
["com.affine.m.explorer.empty.tags.action"](): string;
/**
* `Rename`
*/
@@ -2096,6 +2096,15 @@
"com.affine.m.explorer.collection.rename": "Rename",
"com.affine.m.explorer.collection.rename-menu-title": "Rename Collection",
"com.affine.m.explorer.collection.new-dialog-title": "Create Collection",
"com.affine.m.explorer.empty.docs.title": "No documents yet",
"com.affine.m.explorer.empty.docs.description": "Create your first document to start capturing ideas and organizing knowledge.",
"com.affine.m.explorer.empty.docs.action": "New Document",
"com.affine.m.explorer.empty.collections.title": "No collections yet",
"com.affine.m.explorer.empty.collections.description": "Create a collection to organize related content in one place.",
"com.affine.m.explorer.empty.collections.action": "New Collection",
"com.affine.m.explorer.empty.tags.title": "No tags yet",
"com.affine.m.explorer.empty.tags.description": "Add tags to your documents for easier organization and discovery.",
"com.affine.m.explorer.empty.tags.action": "New Tag",
"com.affine.m.explorer.doc.rename": "Rename",
"com.affine.m.selector.type-doc": "Doc",
"com.affine.m.selector.type-tag": "Tag",