Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/app-store/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ in the repo; the account-gated steps are called out as "you".
- **[ios-submission.md](./ios-submission.md)** — iOS App Store runbook (TestFlight → App Store).
- **[MAS-publishing-plan.md](./MAS-publishing-plan.md)** — Mac App Store plan (sandbox, certs, build flavor, review gotchas, phased plan).
- **[signing-setup.md](./signing-setup.md)** — Developer ID signing for the **direct-download** macOS DMG (separate from MAS).
- **[listing-copy.md](./listing-copy.md)** — store text for both products (name, subtitle, keywords, description), EN + 中文.
- **[privacy-label-and-review.md](./privacy-label-and-review.md)** — App Privacy questionnaire answers + App Review notes for both.
- **[listing.md](../../marketing/app-store/listing.md)** — store text for both products (name, subtitle, keywords, description), EN + 中文. *(canonical; in `marketing/app-store/`)*
- **[privacy-and-review.md](../../marketing/app-store/privacy-and-review.md)** — App Privacy questionnaire answers + App Review notes for both. *(canonical; in `marketing/app-store/`)*
- **[reviewer-sample-vault/](./reviewer-sample-vault/)** — a tiny vault to hand reviewers so the BYO-folder app isn't seen as "empty".
- Related: the iOS TestFlight build is the [`ship-ios-testflight`](../../.claude/skills/ship-ios-testflight/SKILL.md) skill; privacy policy is [`PRIVACY.md`](../../PRIVACY.md).

Expand Down
10 changes: 5 additions & 5 deletions docs/app-store/ios-submission.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ target iOS 17 · universal (iPhone + iPad).
## Already satisfied in the project (no work)

- ✅ **App Privacy** is "Data Not Collected" (backed by `PrivacyInfo.xcprivacy`).
Fill the questionnaire per [`privacy-label-and-review.md`](./privacy-label-and-review.md).
Fill the questionnaire per [`privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md).
- ✅ **Export compliance**: `ITSAppUsesNonExemptEncryption=NO` is set, so uploads
don't prompt.
- ✅ **App icon**: a 1024×1024 marketing icon is present (single-size app icons
Expand All @@ -25,7 +25,7 @@ target iOS 17 · universal (iPhone + iPad).
## You provide (account-gated — I can't log in)

1. **Apple Developer Program** active on `wangharp@gmail.com` (Team `9LH9NBX7P4`). ✅ already used for TestFlight.
2. **Screenshots** (see [`listing-copy.md`](./listing-copy.md) for sizes): iPhone
2. **Screenshots** (see [`screenshots/README.md`](../../marketing/app-store/screenshots/README.md) for sizes): iPhone
6.9" + 6.5", and **iPad 13" (required — the app supports iPad)**.
3. **Privacy Policy URL**: https://github.com/oratis/Markup/blob/main/PRIVACY.md
4. (optional) Localized zh-Hans metadata for a China listing.
Expand All @@ -42,16 +42,16 @@ target iOS 17 · universal (iPhone + iPad).
2. In **App Store Connect → Apps → Markup → (+) macOS/iOS App → iOS App**, create
a new **App Store version** (e.g. `1.0.0`).
3. **Listing**: paste name/subtitle/keywords/description/promo from
[`listing-copy.md`](./listing-copy.md). Set **Category = Productivity**,
[`listing.md`](../../marketing/app-store/listing.md). Set **Category = Productivity**,
**Price = Free**, **Support URL** + **Privacy Policy URL**.
4. **Screenshots**: upload iPhone + iPad sets.
5. **Build**: attach the processed TestFlight build to this version.
6. **App Privacy**: complete as "Data Not Collected"
([`privacy-label-and-review.md`](./privacy-label-and-review.md)).
([`privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md)).
7. **Age rating**: answer the questionnaire → 4+.
8. **App Review Information**: paste the review notes (incl. the sample-vault
pointer + "GitHub sign-in is optional") from
[`privacy-label-and-review.md`](./privacy-label-and-review.md).
[`privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md).
9. **Submit for Review.** First reviews are typically ~24–48h.

## Versioning note
Expand Down
8 changes: 4 additions & 4 deletions docs/app-store/launch-1.0-checklist.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ Binary pipeline already proven (EAS → App Store Connect). Remaining:
2. ⏳ ~5–10 min ASC processing.
3. 🔑 App Store Connect → Markup → **+ Version → 1.0.0**:
- Attach build **100000**
- Paste metadata from [`listing-copy.md`](./listing-copy.md) — name, subtitle, keywords, description, promo text, support/marketing/privacy URLs, **category Productivity**, **age 4+**, copyright
- **App Privacy → "Data Not Collected"** (answers in [`privacy-label-and-review.md`](./privacy-label-and-review.md))
- Paste metadata from [`listing.md`](../../marketing/app-store/listing.md) — name, subtitle, keywords, description, promo text, support/marketing/privacy URLs, **category Productivity**, **age 4+**, copyright
- **App Privacy → "Data Not Collected"** (answers in [`privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md))
- Upload screenshots — iPhone 6.9″ (1320×2868) + 6.5″ (1242×2688) + iPad 13″ (2064×2752)
- **App Review notes** + sample-vault pointer ([`privacy-label-and-review.md`](./privacy-label-and-review.md))
- **App Review notes** + sample-vault pointer ([`privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md))
4. 🔑 **Submit for Review.**

---
Expand All @@ -52,7 +52,7 @@ Code is ready; this is new account/cert work.
- `MAS_INSTALLER_IDENTITY` — e.g. `3rd Party Mac Developer Installer: Bihao Wang (9LH9NBX7P4)`
- `MAS_PROVISION_PROFILE_BASE64` — base64 of the `.provisionprofile`
5. 🤖 Produce the `.pkg`: push tag **`v1.0.0`** → CI `mas` job runs `scripts/build-mas.sh` → uploads `Markup.pkg` artifact (7-day retention). *I can create + push the tag once the secrets exist.* (Local alt: run `scripts/build-mas.sh` with the three `MAS_*` env vars.)
6. 🔑 App Store Connect → **+ New App** (macOS) for `com.appkon.markup`: SKU, **Free**, metadata from [`listing-copy.md`](./listing-copy.md), **"Data Not Collected"**, screenshots (1280×800 or 2560×1600, ≥1).
6. 🔑 App Store Connect → **+ New App** (macOS) for `com.appkon.markup`: SKU, **Free**, metadata from [`listing.md`](../../marketing/app-store/listing.md), **"Data Not Collected"**, screenshots (1280×800, 1440×900, 2560×1600, or 2880×1800 — the `mac/` set is 2880×1800; ≥1).
7. 🔑 Upload `Markup.pkg` — **Transporter.app** (drag in) or
`xcrun altool --upload-app -f Markup.pkg -t macos --apple-id wangharp@gmail.com --password <app-specific-password>`.
8. 🔑 Attach build → **Submit for Review.**
Expand Down
200 changes: 12 additions & 188 deletions docs/app-store/listing-copy.md
Original file line number Diff line number Diff line change
@@ -1,188 +1,12 @@
# App Store listing copy — Markup (iOS + Mac)

Ready-to-paste store text for both products, EN + 中文. Keep the two products'
copy aligned but platform-true (iOS = read-first vault on iPhone/iPad with
iCloud; Mac = WYSIWYG editor). Character limits are App Store Connect's.

- **App name** (30): `Markup`
- **Category**: Productivity (primary). Secondary (optional): Utilities.
- **Price**: Free, no in-app purchases.
- **Age rating**: 4+ (no objectionable content).
- **Support URL**: https://github.com/oratis/Markup
- **Marketing URL** (optional): https://github.com/oratis/Markup
- **Privacy Policy URL**: https://github.com/oratis/Markup/blob/main/PRIVACY.md
- **Copyright**: `© 2026 Bihao Wang`

---

## iOS

### Subtitle (30)
- EN: `Markdown reader & editor`
- 中文: `Markdown 阅读与编辑`

### Promotional text (170, editable any time)
- EN: `Read your Markdown like a page — code, math, diagrams, tables. Point it at any iCloud/Files folder. Open files straight from GitHub. Private by default.`
- 中文: `像读一页纸那样读 Markdown——代码、公式、图表、表格。指向任意 iCloud/「文件」文件夹,还能直接打开 GitHub 上的文件。默认隐私。`

### Keywords (100, comma-separated, no spaces)
- EN: `markdown,editor,notes,reader,obsidian,vault,iCloud,github,preview,writing,latex,mermaid,code`
- 中文: `markdown,笔记,编辑器,阅读,vault,obsidian,iCloud,github,预览,写作,公式,图表`

### Description
EN:
```
Markup reads and edits your Markdown beautifully — and it works with the folder
of notes you already have, on your iPhone and iPad.

POINT IT AT YOUR FOLDER
• Open any folder of .md files from iCloud Drive or Files — the same vault you
use on your Mac. Nothing to import, no lock-in.
• Open several vaults and switch between them.

READ LIKE A PAGE
• High-fidelity rendering: syntax-highlighted code, LaTeX math, Mermaid
diagrams, tables, task lists, and GitHub-style callouts.
• Light / Dark / Sepia themes, adjustable text size and width, Dynamic Type.
• Wikilinks, backlinks with context, a per-document outline, and tags.

FIND ANYTHING
• Full-text search with tag: and path: filters; fuzzy Quick Open.

EDIT WITH EASE
• A focused Markdown editor with smart lists, auto-closing brackets, table
formatting, and inline [[wikilink]] and #tag autocomplete.
• Insert images straight into your vault. Export or share as PDF, HTML, or
Markdown.

iPAD
• Open documents in tabs; edit with a live rendered preview beside the source.
• Hardware-keyboard shortcuts.

OPEN FROM GITHUB
• Paste a GitHub link or browse a repo to read a file. Sign in (optional) to
reach private repos and your own repositories.

HTML, TOO
• Open and read .html and web bundles, with scripts off by default for safety.

PRIVATE BY DEFAULT
• No account required, no telemetry, no tracking. Your notes stay on your device
and your iCloud. Signing in to GitHub is optional and only used to fetch the
files you ask for.

English and 简体中文, switchable in-app.
```

中文:
```
Markup 把你的 Markdown 漂亮地读出来、顺手地写下去——而且直接用你已经有的笔记
文件夹,在 iPhone 和 iPad 上。

指向你的文件夹
• 打开 iCloud 云盘或「文件」里任意 .md 文件夹——和你 Mac 上用的是同一个仓库。
无需导入,不绑定。
• 可打开多个仓库并随时切换。

像读一页纸
• 高保真渲染:代码高亮、LaTeX 公式、Mermaid 图表、表格、任务列表,以及
GitHub 风格的提示框(callout)。
• 浅色/深色/护眼三种主题,字号与宽度可调,支持动态字体。
• 双链 [[wikilink]]、带上下文的反向链接、单文档大纲、标签。

快速查找
• 全文搜索,支持 tag: 与 path: 过滤;模糊「快速打开」。

轻松编辑
• 专注的 Markdown 编辑器:智能列表、括号自动闭合、表格对齐,行内
[[双链]] 与 #标签 自动补全。
• 图片可直接插入仓库。可导出/分享为 PDF、HTML 或 Markdown。

iPad
• 多文档标签页;编辑时源码旁实时渲染预览。
• 支持硬件键盘快捷键。

从 GitHub 打开
• 粘贴 GitHub 链接或浏览仓库即可阅读文件。登录(可选)后可访问私有仓库与
你自己的仓库列表。

也支持 HTML
• 可打开并阅读 .html 与网页压缩包,默认关闭脚本以保安全。

默认隐私
• 无需账户、无遥测、无追踪。你的笔记只留在本机与你的 iCloud。登录 GitHub 为
可选,且仅用于拉取你指定的文件。

支持 English 与简体中文,App 内即可切换。
```

---

## Mac

### Subtitle (30)
- EN: `Markdown editor for your vault`
- 中文: `面向你仓库的 Markdown 编辑器`

### Promotional text (170)
- EN: `A fast, local-first Markdown editor. WYSIWYG editing, full-text search, math & diagrams, HTML export. Open any folder — your notes stay on your Mac.`
- 中文: `快速、本地优先的 Markdown 编辑器。所见即所得、全文搜索、公式与图表、HTML 导出。打开任意文件夹——笔记只留在你的 Mac。`

### Keywords (100)
- EN: `markdown,editor,notes,vault,obsidian,wysiwyg,search,latex,mermaid,html,export,writing,canvas`
- 中文: `markdown,编辑器,笔记,仓库,obsidian,所见即所得,搜索,公式,图表,html,导出,写作`

### Description
EN:
```
Markup is a fast, local-first Markdown editor for the folder of notes you
already have.

• WYSIWYG editing that stays plain Markdown on disk — no proprietary format.
• Open any folder as a vault; instant full-text search, tags, wikilinks, and
backlinks.
• Syntax-highlighted code, LaTeX math, Mermaid diagrams, tables, task lists,
and GitHub-style callouts.
• Export or preview as self-contained HTML; print to PDF.
• Open files straight from GitHub, public or (signed in) private.
• Light / Dark / Sepia themes and custom CSS.
• English and 简体中文.

Private by default: no account, no telemetry. Your notes never leave your Mac.
The Mac App Store edition is fully sandboxed.
```

中文:
```
Markup 是一款快速、本地优先的 Markdown 编辑器,直接用你已经有的笔记文件夹。

• 所见即所得编辑,磁盘上始终是纯 Markdown——无私有格式。
• 把任意文件夹作为仓库打开;即时全文搜索、标签、双链与反向链接。
• 代码高亮、LaTeX 公式、Mermaid 图表、表格、任务列表,以及 GitHub 风格提示框。
• 可导出或预览为自包含 HTML;可打印为 PDF。
• 可直接打开 GitHub 上的文件,公开仓库或(登录后)私有仓库。
• 浅色/深色/护眼主题,支持自定义 CSS。
• 支持 English 与简体中文。

默认隐私:无账户、无遥测,笔记绝不离开你的 Mac。Mac App Store 版完全沙盒化。
```

---

## "What's New" (release notes) template

- iOS first App Store release: lead with "First public release — read & write your
Markdown vault on iPhone and iPad."
- Mac App Store first release: "Now on the Mac App Store — fully sandboxed."

Keep per-release notes short; mirror the human-facing items, not internals.

## Screenshots needed (you produce these)

- **iPhone** 6.9" (1320×2868) and 6.5" (1242×2688) — at least 2, up to 10. Suggested:
reader page, search, editor, GitHub open, settings/themes.
- **iPad** 13" (2064×2752) — required because the app supports iPad. Suggested:
tabs + split-view live preview, file list + reader.
- **Mac** 2560×1600 (or 1280×800) — editor, search, HTML export/preview, themes.

Localize screenshots for zh-Hans if you want a localized China listing (optional).
# App Store listing copy — moved → marketing/app-store/listing.md

> **Not maintained here.** The single source of truth for the App Store listing
> copy (app name, subtitle, promo text, keywords, description, category, URLs,
> copyright — EN + 中文, iOS + Mac) now lives in **`marketing/app-store/`**:
>
> ## → [`marketing/app-store/listing.md`](../../marketing/app-store/listing.md)
>
> Paste from that file in App Store Connect. An earlier copy lived here and had
> drifted — e.g. it gave the app name as `Markup`, but ASC actually uses
> `Markup - MD Reader` (which the marketing/ version has). This stub is kept as a
> redirect so older links don't break.
92 changes: 10 additions & 82 deletions docs/app-store/privacy-label-and-review.md
Original file line number Diff line number Diff line change
@@ -1,82 +1,10 @@
# App Privacy label + App Review notes — Markup (iOS + Mac)

Exact answers for App Store Connect's **App Privacy** questionnaire and the
**App Review Information** notes, for both products. Markup has **no backend and
no analytics**, so the label is "Data Not Collected" on both platforms. This is
backed in code by the iOS `PrivacyInfo.xcprivacy` (Tracking = false, Collected
data types = none) and by the absence of any analytics SDK in either app.

## App Privacy questionnaire → answers

**"Do you or your third-party partners collect data from this app?"** → **No.**
Result label: **Data Not Collected.**

Rationale you can paste if asked:
- No account system, no server owned by us — there is nowhere for data to be
collected to.
- No analytics, crash-reporting, advertising, or tracking SDKs.
- Notes/files stay on the device (and the user's own iCloud, iOS only).
- The only outbound network is **user-initiated**:
- **GitHub API** (api.github.com / raw.githubusercontent.com) when the user
opens a file/repo from GitHub. Requests go to GitHub, not to us. An optional
OAuth token is stored **on-device** (iOS Keychain; macOS login Keychain) and
sent only to GitHub as an `Authorization` header.
- **Math/diagram CDN** (jsDelivr) only inside *exported/preview* HTML that uses
KaTeX/Mermaid (Mac export; iOS reader bundles these offline). No personal
data is sent.
- This contacts third parties (GitHub, jsDelivr) but does **not** "collect data"
in the App Privacy sense — nothing about the user is gathered, and the calls
fetch content the user explicitly asked for.

**Tracking** (App Tracking Transparency): **No tracking.** Do not add the
`NSUserTrackingUsageDescription` key — the app never tracks.

## Export compliance (iOS) — answered in the project

`ITSAppUsesNonExemptEncryption = NO` is set in the Xcode build settings, so each
upload auto-answers the export-compliance prompt. The app only uses standard
HTTPS (App Transport Security), which is exempt. Nothing to do per-submission.

## App Review notes (paste into "App Review Information → Notes")

```
Markup is a local-first Markdown reader/editor. It has NO account and NO
server of ours — there is no login to Markup itself and no test credentials are
needed.

HOW TO REVIEW (the app works on a folder of files the user picks):
1. Launch the app. On first run an onboarding card explains the "bring your own
folder" model.
2. Tap "Open a Folder" and choose any folder of .md files. On the simulator you
can use the Files app's "On My iPhone" area; or use the bundled sample below.
3. A sample vault for review is included in the repo at
docs/app-store/reviewer-sample-vault/ — copy it into Files/iCloud and open it,
or download the repo. It demonstrates rendering (code, math, tables,
callouts), wikilinks, search, and editing.

OPTIONAL GITHUB SIGN-IN:
- "Open from GitHub" works with PUBLIC repos WITHOUT signing in — e.g. paste
github.com/oratis/Markup and browse README.md. No account needed to review.
- Signing in (GitHub OAuth device flow) is OPTIONAL and only unlocks private
repos + higher rate limits. The token is stored in the Keychain on-device and
is sent only to GitHub.

PRIVACY: no analytics, no tracking, no data collection. See PRIVACY.md.
```

(Mac: same notes; instead of Files, the reviewer uses ⌘⇧O / "Open Folder" and
the same sample vault. The Mac App Store build is sandboxed — see
MAS-publishing-plan.md.)

## Sample vault for reviewers

A tiny, self-contained vault lives at
[`reviewer-sample-vault/`](./reviewer-sample-vault/) — it exercises the headline
rendering features and gives a reviewer something to open immediately (BYO-folder
apps are commonly rejected when a reviewer opens the app and sees "nothing").

## Why this matters (BYO-folder gotcha)

Markup's whole model is "point me at a folder you already have." A reviewer who
launches it cold sees onboarding, not content. The review notes + bundled sample
vault prevent a "the app appears to be non-functional / incomplete" rejection.
# App Privacy + App Review notes — moved → marketing/app-store/privacy-and-review.md

> **Not maintained here.** The single source of truth for the App Privacy
> questionnaire answers ("Data Not Collected"), the App Review notes, and the
> export-compliance answer now lives in **`marketing/app-store/`**:
>
> ## → [`marketing/app-store/privacy-and-review.md`](../../marketing/app-store/privacy-and-review.md)
>
> Paste from that file in App Store Connect. This stub is kept as a redirect so
> older links don't break.
Loading