English | 繁體中文

Lynavo Drive Banner

Lynavo Drive Logo

Lynavo Drive

一款高效能、從行動端(iOS / Android)至桌面端(macOS / Windows)的區域網路 (LAN) 增量同步媒體工具。

OSS Release Gate CI Node Version Go Version Desktop Platform Mobile Platform License

產品預覽主要功能開發者快速開始開源邊界參與貢獻

--- ## 專案狀態 Lynavo Drive 已完成主要功能,並開放社群從原始碼建置與參與貢獻。本儲存庫只提供一套公開的本機原始碼建置與套件驗證流程;不發布官方簽署的安裝程式、行動應用程式商店版本、自動更新或託管服務。 | 使用範圍 | 目前的開源版本支援範圍 | | -------- | -------------------------------------------------- | | 桌面端 | macOS 與 Windows 應用程式執行環境 | | 行動端 | iOS 與 Android 應用程式執行環境 | | Linux | 僅供本機原始碼建置與套件驗證 | | 網路 | 同一區域網路中的前景同步 | | 發布方式 | 社群原始碼建置,以及在本機產生的套件/二進位執行檔 | ## 📸 產品預覽

Lynavo Drive Product Preview

## ✨ 主要功能 - **自動增量媒體同步**:掃描手機相簿,自動將尚未同步的照片與影片加入佇列,不需手動選取檔案。 - **本機探索與配對**:透過 mDNS 尋找同一區域網路內的桌面端,再使用 QR code 或 6 位數配對碼完成配對。 - **可續傳的序列傳輸**:每支手機一次上傳一個檔案,前景區域網路重新連線後會繼續處理未完成的佇列項目。 - **唯讀佇列與歷史紀錄**:顯示傳輸進度、已完成檔案與完成日期統計,不提供刪除、跳過或重新排序控制。 - **共用檔案存取**:讓行動端瀏覽及下載桌面端本機共用資料夾公開的檔案;此功能與自動媒體上傳是不同的路徑。 - **本機診斷**:不依賴託管診斷服務,也能匯出桌面端與行動端診斷資料。 ## 🛡️ 開源邊界 > [!IMPORTANT] > **區域網路開源核心** > > - 前景自動同步不需要登入或帳戶服務。 > - 上傳內容只來自行動端相簿掃描與本機待處理佇列,不提供手動檔案選取的替代流程。 > - 佇列維持唯讀,每支手機一次只會上傳一個檔案。 > - 缺少非開源模組或帳戶服務狀態,不會阻止前景區域網路配對與同步。 > [!WARNING] > **此儲存庫不包含的功能** > > - 遠端存取、雲端轉送、通道憑證、官方帳戶及靜默背景續傳均不可用,且維持停用。 > - 不提供官方簽署、公證、行動應用程式商店發布、套件上傳及自動更新基礎設施。 > - 原始碼套件不重新散布 Windows 版 Apple Bonjour。若本機已有或另行設定 Bonjour 執行環境便會使用,否則改用相容於 zeroconf 的備援方案。 > - Linux 僅供本機建置與套件驗證,不是目前支援的桌面端使用平台。 ## 🚀 開發者快速開始 這是提供給貢獻者的開發流程,不是一般使用者安裝程式。本機套件建置與各平台驗證方式請參閱[發布手冊](./docs/release/release-playbook.md)。 ```bash # 1. 啟用儲存庫指定的 pnpm 版本並安裝相依套件 corepack enable pnpm install --frozen-lockfile # 2. 建置共用套件 pnpm --filter @lynavo-drive/contracts build pnpm --filter @lynavo-drive/design-tokens build # 3. 啟動桌面端開發模式 pnpm dev:desktop ``` Electron 視窗會自動開啟,桌面端應用程式會啟動側車服務 (Sidecar)。 若要執行行動端,請保持桌面端運作,並開啟另一個終端機: ```bash # 啟動 Metro pnpm dev:mobile # 接著在另一個終端機啟動其中一個平台 pnpm --filter @lynavo-drive/mobile ios # 或 pnpm dev:mobile:android ``` 仍需準備各平台開發工具:iOS 需要 macOS、Xcode 與 CocoaPods;Android 需要 Android Studio 及 Android SDK/NDK。 配對應用程式: 1. 將手機與桌面端連接到同一個區域網路。 2. 開啟桌面端 Lynavo Drive,設定或查看 6 位數配對碼。 3. 在行動端探索桌面裝置,再掃描其 QR code 或輸入配對碼。 4. 使用開源版本進行區域網路自動同步時,請將行動應用程式保持在前景。 ## ❓ 常見問題與疑難排解
🔍 檢視疑難排解指南與常見問題 ### 1. 行動端應用程式找不到我的桌面裝置(mDNS 裝置探索失敗) - **檢查網路**:確保行動端和桌面端皆處於同一個區域網路 (LAN)。 - **Windows 防火牆**:驗證 Windows Defender 防火牆是否允許連接埠 `39593` (TCP/LMUP 檔案傳輸) 和 `39594` (HTTP API) 的連入流量。 - **Bonjour 執行環境**:開源建置版本不重新散布 Apple Bonjour。請確認 Windows 已安裝 Bonjour,否則使用相容於 zeroconf 的備援方案。 ### 2. 為什麼我的一些 iCloud 照片卡住 / 無法傳輸? - 標記為 `iCloud` 的照片在傳輸前,必須先從 Apple Photos 雲端儲存庫中匯出。 - 在 `cloud_downloading` 或 `preparing` 狀態下,手機正在將高解析度的原始內容下載至本機儲存空間。下載完成後會自動開始傳輸。 ### 3. 我可以手動選擇要同步哪些照片 / 影片嗎? - 不行。自動上傳由行動端相簿掃描及嚴格唯讀的待處理佇列驅動,開源流程不提供核取方塊選取功能。 ### 4. 當桌面端進入睡眠狀態或連線中斷時會發生什麼事? - 區域網路傳輸會中斷。當行動應用程式位於前景時,桌面端喚醒並恢復區域網路連線後,會繼續處理未完成的佇列。 - 開源執行環境不提供靜默背景續傳。 - 在桌面端應用程式設定中啟用「同步時防止電腦進入睡眠」,以確保傳輸不中斷。
## 🛠️ 技術架構 | 層級 | 技術 | | ------------------ | ---------------------------------------------------------- | | Monorepo | pnpm 10 + turborepo 2.8 | | 桌面端 | Electron 41 + electron-vite 5 + electron-builder 26 | | 桌面端 UI | React 18.3 + zustand 5 + Tailwind CSS v4 | | 行動端 | React Native 0.84.1 + React 19 (iOS / Android) | | iOS 原生 | Swift `SyncEngine` + BGTask + PhotoKit + Network.framework | | Android 原生 | Kotlin 橋接 + NativeSyncEngine / MediaStore / NsdManager | | 側車服務 (Sidecar) | Go 1.25.6 + SQLite + WebSocket | | 共用套件 | `@lynavo-drive/contracts` + `@lynavo-drive/design-tokens` | | 測試 | vitest 4.1 + jest + `go test` | ## 🏗️ 架構概覽 ```text Mobile (RN UI on iOS / Android) ├── iOS: Swift SyncEngine └── Android: Kotlin NativeSyncEngine ├── Bonjour/mDNS discover ├── LMUP/TCP :39593 └── Presence/HTTP :39594 │ ▼ Desktop (Electron + Go sidecar, macOS / Windows) ├── Electron: UI shell, window, bridge, sidecar lifecycle ├── Sidecar HTTP API / WebSocket ├── LMUP file receiver ├── SQLite └── Filesystem / shared directory detection ``` ## ⚙️ 系統需求 - **macOS 或 Windows**(桌面端目前支援 macOS / Windows;Linux 僅用於本機建置 / 套件驗證;iOS 建置仍需要 macOS + Xcode) - **Node.js** >= 22.12.0 - **pnpm** >= 10 - **Go** >= 1.25.6 (側車服務 (Sidecar) 開發與測試)
📱 檢視行動端與平台特定 SDK 需求 - **Xcode + CocoaPods**(iOS 建置和裝置偵錯,僅限 macOS) - **Android Studio + Android SDK / NDK**(Android 建置和偵錯)
## 💻 常用指令
🛠️ 檢視開發者指令參考 ```bash # Desktop pnpm dev:desktop pnpm build:desktop pnpm package:desktop # macOS local DMG pnpm package:desktop:win # Windows NSIS + zip (default desktop Windows package, no release profile) # Mobile pnpm dev:mobile pnpm build:mobile pnpm dev:mobile:android pnpm build:mobile:android # Android Debug build (assembleDebug) # Sidecar pnpm dev:sidecar pnpm build:sidecar pnpm test:sidecar # Full repository validation pnpm build pnpm test pnpm typecheck pnpm format:check pnpm check ```
## 📦 開源版本建置與套件驗證 此開源儲存庫保留本機原始碼建置與套件驗證流程。
🔬 檢視驗證與建置管道 ```bash # Inspect the local build / package commands that would run pnpm release --profile review --targets ios,android,mac,win,linux --dry-run # Local iOS / Android Debug / Desktop build verification pnpm build:mobile pnpm build:mobile:ios:release pnpm build:mobile:android pnpm package:desktop # Android Release source-build verification pnpm release --profile review --targets android --dry-run pnpm release --profile review --targets android # Local desktop platform package pnpm package:desktop # Linux package verification (Linux host, one arch per run) pnpm --filter @lynavo-drive/desktop package:linux -- --arch=x64 pnpm --filter @lynavo-drive/desktop package:linux -- --arch=arm64 ```
`release` 設定檔只會注入 `LYNAVO_RELEASE_CHANNEL` 與本機建置設定,並只選擇本機建置 / 套件指令。 ## 📁 專案結構
📂 檢視目錄結構圖 ```text lynavo-drive/ ├── apps/ │ ├── desktop/ # Electron desktop app │ │ └── src/ │ │ ├── main/ # Main process (window, IPC, sidecar lifecycle) │ │ ├── preload/ # Preload bridge │ │ └── renderer/ # React 18 UI │ └── mobile/ # React Native iOS/Android app + native sync │ ├── ios/ # Xcode project and Swift native modules │ ├── android/ # Android project, Kotlin bridge, native sync │ ├── src/ # RN screens and hooks │ └── __tests__/ # RN tests ├── packages/ │ ├── contracts/ # Shared DTOs / constants / events / error codes │ └── design-tokens/ # Shared design tokens ├── services/ │ └── sidecar-go/ # Go sidecar (TCP/HTTP/SQLite/mDNS) └── docs/ ├── architecture/ # Architecture, state machine, data model ├── operations/ # Troubleshooting, diagnostics, sidecar runbook ├── product/ # Product constraints, OSS boundaries, non-goals ├── release/ # OSS build and package verification playbook └── testing/ # OSS verification matrix ```
## 🎯 開發基準線 - 共用型別、常數、事件名稱和連接埠定義皆來自於 `@lynavo-drive/contracts`。 - 渲染器 (Renderer) 不直接存取側車服務 (Sidecar)、檔案系統或 SQLite;所有存取皆透過預載橋接 (preload bridge) / 主行程 (main process) 進行。 - 佇列保持唯讀狀態。使用者介面 (UI) 無法刪除、重新排序或跳過項目。 - 指定的手機一次只能上傳一個檔案。 - 訪客 / 本機前景區域網路 (LAN) 同步採 fail-open;遠端存取和背景持續運作則採 fail-closed。 ## 📄 文件參考 - 開發限制與營運規則:[`AGENTS.md`](./AGENTS.md) - 系統概覽:[`docs/architecture/system-overview.md`](./docs/architecture/system-overview.md) - 同步狀態機:[`docs/architecture/sync-state-machine.md`](./docs/architecture/sync-state-machine.md) - 資料模型與統計語義:[`docs/architecture/data-model.md`](./docs/architecture/data-model.md) - 疑難排解指南:[`docs/operations/troubleshooting.md`](./docs/operations/troubleshooting.md) - 行動端診斷套件:[`docs/operations/mobile-diagnostics.md`](./docs/operations/mobile-diagnostics.md) - 側車服務 (Sidecar) 運作手冊:[`docs/operations/sidecar-runbook.md`](./docs/operations/sidecar-runbook.md) - 產品限制、開源邊界與非目標:[`docs/product/constraints.md`](./docs/product/constraints.md) - 開源版本建置驗證手冊:[`docs/release/release-playbook.md`](./docs/release/release-playbook.md) - 開源驗證矩陣:[`docs/testing/oss-verification-matrix.md`](./docs/testing/oss-verification-matrix.md) - 安全性政策:[`SECURITY.md`](./SECURITY.md) - 隱私權聲明:[`PRIVACY.md`](./PRIVACY.md) - 貢獻指南:[`CONTRIBUTING.md`](./CONTRIBUTING.md) - 行為準則:[`CODE_OF_CONDUCT.md`](./CODE_OF_CONDUCT.md) - 第三方聲明:[`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md) ## 💡 參與貢獻 歡迎社群參與貢獻。若要開始: 1. **Fork 本儲存庫**:建立個人 Fork 並複製到本機。 2. **設定開發工作區**:依照[開發者快速開始](#-開發者快速開始),安裝預計修改平台所需的開發工具。 3. **驗證變更**:先執行聚焦測試,再於提交 pull request 前執行適用的儲存庫檢查: ```bash pnpm test pnpm typecheck pnpm format:check pnpm gate:release ``` 詳細的程式撰寫規範、專案結構與開發流程,請參閱[貢獻指南](./CONTRIBUTING.md)及[行為準則](./CODE_OF_CONDUCT.md)。 - [瀏覽現有 issue](https://github.com/lynavo/lynavo-drive/issues) - [回報錯誤](https://github.com/lynavo/lynavo-drive/issues/new?labels=bug) - [提出功能建議](https://github.com/lynavo/lynavo-drive/issues/new?labels=enhancement) - [私下回報安全漏洞](https://github.com/lynavo/lynavo-drive/security/advisories/new),請勿在公開 issue 張貼可被利用的漏洞細節。 ## ⚖️ 授權條款 本專案採用 GNU Affero General Public License v3.0。請參閱 [`LICENSE`](./LICENSE)。