本頁與 支援頁面 內容一致地對照產品目前的程式碼逐句核實(2026-09-05)。「定稿」不代表「不會再改」——本文只保證在核實那一刻與當時的程式碼一致,程式碼或 Apple 隱私問卷的要求變化時會跟著更新。
生效日期:2026-09-05
最後更新:2026-09-05
一、這份政策適用於誰
本政策適用於「眺一下」iPhone App 及其搭配的 Apple Watch App(以下統稱「本 App」)。本 App 是一款幫助你執行 20-20-20 用眼休息習慣的工具,不提供醫療診斷功能,也不應被當作醫療建議。
二、一句話結論
本 App 不收集你的任何資料,也沒有我們自己的伺服器。 它沒有帳號系統,沒有第三方分析/廣告/當機回報 SDK。你在 App 裡產生的週期狀態、個人化設定、今日次數,全都留在你自己的裝置上。
但「沒有我們的伺服器」不等於「這個 App 從不連網」,這兩件事必須分開說清楚。 準確的說法是:
- 本 App 自己沒有寫任何一行網路請求的程式碼。 截至本文定稿,四個發布 target 的 Swift 原始碼裡對
URLSession、URLRequest、NWConnection的檢索零命中;Core/Package.swift未宣告任何第三方相依套件。 - 它與外界的全部互動,都發生在 Apple 的系統框架裡,而不是我們自己的通道:
| 系統框架 | 用來做什麼 | 會不會離開你的裝置 |
|---|---|---|
| StoreKit | 查詢 Pro 商品資訊、發起購買、恢復購買、核對目前權益 | 會。這一條確實會與 Apple 的 App Store 伺服器通訊,「恢復購買」還可能要求你重新登入 Apple 帳戶。經手的是 Apple,不是我們——我們既拿不到也不儲存你的付款資訊 |
| WatchConnectivity | iPhone ↔ Apple Watch 同步週期狀態與控制指令 | 不會。走 Apple 系統層的裝置間本機配對通道 |
| UserNotifications / AlarmKit | 排程與呈現提醒、持續警示 | 不會。本機系統服務 |
| WidgetKit | 更新「今日進度」小工具(主畫面/StandBy 小工具位置;不支援鎖定畫面小工具位置) | 不會。本機系統服務 |
| ActivityKit | 呈現鎖定畫面上那張會走倒數的即時動態卡片與動態島 | 不會。本機系統服務,狀態由系統在本機保管 |
Apple 如何處理經過 StoreKit 的資訊,適用 Apple 官方隱私權政策。
隨 App 一起提交給 Apple 的隱私清單 PrivacyInfo.xcprivacy 宣告 NSPrivacyTracking = false、採集資料類型為空陣列——這說的是「我們不採集、不追蹤」,不是「不產生任何網路流量」。
三、我們不收集哪些資訊
本 App 不需要註冊帳號,因此不會、也沒有管道收集:
- 姓名、電子郵件地址、電話號碼
- 登入憑證(密碼、驗證碼等)
- 任何形式的使用者唯一身分識別碼——本 App 不建立自己的使用者系統,也不產生任何自訂使用者 ID、裝置指紋或廣告識別碼
我們沒有自建伺服器,產品功能不依賴任何我們自己的後端,因此:
- 不存在「我們的伺服器收到了你的資料」這種情形
- 不向任何第三方分享、出售你的資料,也不用於廣告投放
- 本 App 不含廣告,未整合任何廣告 SDK、分析統計 SDK 或當機回報 SDK
唯一的例外是 App 內購買:Pro 的商品查詢、購買與恢復購買要經過 Apple 的 App Store 伺服器(見第二節的表和第四節)。那條通道由 Apple 提供、由 Apple 經手,我們既看不到也存不下你的付款資訊。
四、Pro 購買與付款資訊
本 App 提供一項「Pro 一次性購買」App 內購買項目(非消耗型,不是訂閱,不會自動續訂),用於解鎖個人化的工作時長、遠眺時長、提醒鈴聲、延後時長四項設定。
- 購買流程完全由 Apple StoreKit 處理。 本 App 透過 Apple 官方介面(
Product.products查詢商品、product.purchase發起購買)完成購買,全程不接觸、不儲存你的信用卡號、帳單地址等任何付款資訊。 - 這幾步會與 Apple 的 App Store 伺服器通訊——商品價格、購買結果都來自 Apple;目前權益的判斷不以 App 自行保存的某個布林標記為準,而是看系統在本機維護的已驗證交易記錄(見下一條)。我們自己沒有伺服器參與這條鏈路,但這不等於這條鏈路不連網,前一句和後一句都得說。
- 你的購買記錄、發票與退款均由 Apple 管理。本 App 判斷「你是否擁有 Pro」的唯一依據,是系統(StoreKit)提供的已驗證交易記錄(
Transaction.currentEntitlements)——本 App 不自己保存一份「已購買」的憑證,也沒有地方可以上傳它。(這份記錄由系統在本機維護,讀它本身不一定需要連網;真正需要連網的是上面那幾步與 Apple 的互動。) - 「恢復購買」入口在 App 內:設定 →「關於」→ 打開購買頁 → 頁面底部「恢復購買」(那一行入口的文字:未購買時顯示「解鎖 Pro」,已購買時顯示「眺一下 Pro」)。它做的事是呼叫
AppStore.sync()讓系統重新核對你 Apple 帳戶下的購買記錄——這一步同樣要連 Apple 的伺服器,而且可能要求你重新登入 Apple 帳戶。 - 關於 Apple 如何處理你的付款資訊,請參閱 Apple 官方隱私權政策。 Apple 對這兩件事的官方說明:App 內購買、AppStore.sync()
基礎提醒能力在免費版中完整提供,不是付費功能——標準 20 分鐘工作 / 20 秒遠眺週期與預設到時提醒不收費;AlarmKit 持續警示同樣不收費,但需要 iOS 26.0 以上版本並授予「鬧鐘」權限,條件不滿足時會自動改走一般系統通知(見上一節)。Pro 只解鎖上面那四項個人化設定。提醒能不能準時響起,還取決於系統版本、權限、裝置狀態以及靜音、專注等系統設定,本 App 不承諾必響,也不會無條件穿透靜音或專注模式。
五、系統權限說明
本 App 只在需要時申請以下系統權限,全部只用於完成提醒功能,不用於收集任何個人資訊。
權限請求的時機:本 App 不會在你第一次打開它時就連環跳出授權框。首次導覽看完之後,直到你第一次真正按下「開始」,才會請求提醒相關的權限;無論你允許還是拒絕,這一次「開始」都會照常執行,不會因為拒絕授權就吞掉你的操作,也不會反覆追問第二次。
下面兩項是相互獨立的兩次系統授權,不是一個開關:通知權限歸 iOS 的「通知」設定管,AlarmKit 權限是 iOS 26 起新增的另一項授權。允許其中一個、拒絕另一個都是可能的,App 會按實際拿到的權限選擇用哪條通路提醒你。
1. 通知權限(UNUserNotificationCenter)
用於在工作到時、遠眺結束時提醒你,也作為下方 AlarmKit 無法使用時的備援提醒方式。通知內容只有「該休息了」這一類提示文字與操作按鈕,不包含任何個人資訊,也不上傳到任何地方。
2. AlarmKit 權限(NSAlarmKitUsageDescription)
用於提供一條比一般通知更明確、持續性更強的系統級警示(體驗更接近「鬧鐘」)。App 內向你展示的權限說明原文為:
「用於在你設定的時間發出持續提醒,提醒你抬頭看向遠方。」
AlarmKit 依賴 iOS 26.0 及以上系統版本。系統版本低於 iOS 26、或你拒絕了 AlarmKit 授權時,App 會自動回退為一般系統通知,不會因為拿不到 AlarmKit 權限就完全失去提醒能力。
本 App 不申請定位、聯絡人、照片、麥克風、相機、健康資料或任何形式的追蹤權限。
六、Apple Watch 與 iPhone 之間的資料同步
如果你安裝並配對了 Apple Watch 版「眺一下」,兩台裝置之間會透過 Apple 官方的 WatchConnectivity 框架同步:
- 目前週期狀態的一份唯讀投影:現在是工作階段還是遠眺階段、本輪的絕對結束時間、週期識別碼與版本號;
- 少量控制指令:例如在手錶上按「開始遠眺」「延後」「結束本次」,以及手錶 App 的一條啟動記錄(啟動時刻、累計啟動次數、手錶端 App 的版本號與建置號)。這條啟動記錄保存在 Apple Watch 本機,只是隨訊息捎給 iPhone 用來在診斷頁上顯示「手錶上這個 App 到底跑起來沒有」;iPhone 拿到後只放在記憶體裡,不寫進 iPhone 的儲存空間。
關於這條通道:
- 它是裝置與裝置之間的本機直連(走 Apple 系統層的 iPhone-Watch 配對通道),既不經過我們的伺服器(我們沒有),也不經過 Apple 的伺服器——這條通道就是兩台裝置之間的事。
- 同步內容僅限上述週期狀態與控制指令,不包含任何身分資訊。
- 警示最終呈現在 iPhone 還是 Apple Watch 上由 iOS 決定,本 App 不控制、也不做承諾。
七、本 App 在你裝置上儲存了哪些資料
以下清單於 2026-09-05 逐項對照程式碼的實際讀寫點核實(不是只搜鍵名)。全部保存在裝置本機的 UserDefaults(iOS/watchOS 提供的應用程式本機設定儲存區),開發者不會收到這些資料,本 App 也不會主動上傳到任何伺服器、不會主動同步到 iCloud 或任何雲端帳戶。
關於系統備份:上面這些持久化設定可能會依照你自己的系統設定,隨 Apple 的裝置備份/iCloud 備份機制進入系統備份。那是 iOS/watchOS 平台層面的行為,由你在系統「設定」裡自行開關,本 App 既不控制它、也讀不到那份備份,更不會因此收到任何資料。這一條和第二章那張表並不衝突:本 App 自己主動發起的網路通訊仍然只有 StoreKit 那一項會與 Apple 的 App Store 伺服器通訊——「App 自己主動上傳資料」(沒有這回事)和「系統依照你的設定替整台裝置做備份」是完全不同的兩件事。
「存在哪台裝置上」是一個會被誤讀的地方,所以單列一欄:iPhone 上的資料和 Apple Watch 上的資料是兩份,各自存在各自那台裝置裡,不存在一個跨裝置的共享池。
| 儲存內容 | 用途 | 存在哪台裝置 | 具體位置 |
|---|---|---|---|
| 目前工作/遠眺週期狀態(週期階段、絕對結束時間、週期識別碼與版本號等) | App 重新啟動、鎖定畫面、背景切換後回復正確的週期狀態,避免重複提醒或錯誤倒數 | iPhone | 主 App 自己的 UserDefaults |
| Pro 個人化設定(自訂工作時長、遠眺時長、鈴聲、延後時長) | 記住你購買 Pro 後設定的參數 | iPhone | 主 App 自己的 UserDefaults |
| 鈴聲選擇(提醒音效類型識別碼),以及一次性的鈴聲設定移轉完成標記 | 記住你選擇的提醒音效;標記確保舊版本升級時只移轉一次 | iPhone | 主 App 自己的 UserDefaults |
| 已排程警示的識別碼台帳 | 記錄目前排了哪些 AlarmKit 警示,取消或重排時按識別碼精確清掃,避免漏掉或重複 | iPhone | 主 App 自己的 UserDefaults |
| 首次體驗的兩個標記(導覽是否看過、權限是否已經請求過一次) | 導覽只在第一次顯示;權限只問一次,不反覆打擾 | iPhone | 主 App 自己的 UserDefaults |
| 今日完成次數(權威副本) | 主 App 顯示「今天眺了幾次」 | iPhone | 主 App 自己的 UserDefaults,不在共享容器裡 |
| 給「今日進度」小工具看的那份投影(目前階段、本輪結束時間、今日完成次數的一份拷貝) | 今日進度小工具讀它來顯示(可以放在主畫面或 StandBy 的小工具位置;不支援鎖定畫面小工具位置)。鎖定畫面上那張會走倒數的即時動態卡片和動態島不讀它,見下 | iPhone | App Group 共享容器 group.com.adrain.tiaoyixia(見下) |
| Watch 指令去重表(近期從 Apple Watch 收到的指令識別碼的短字串記錄) | 避免同一條來自手錶的操作被重複執行 | iPhone | 主 App 自己的 UserDefaults |
| Watch 啟動記錄(啟動時刻、累計啟動次數、手錶端版本號/建置號) | 判斷手錶上這個 App 是否真的啟動過 | Apple Watch(不是 iPhone) | 手錶端 App 自己的 UserDefaults。它會隨每條發往 iPhone 的訊息捎過去,但 iPhone 只把它放在記憶體裡顯示在診斷頁上,不寫入儲存空間 |
| 最近一份週期狀態投影的快取 | 手錶離線或 iPhone 暫時無法連線時仍能顯示上次已知狀態 | Apple Watch | 手錶端 App 自己的 UserDefaults |
關於「權威副本」和「投影」的區別(上表裡今日完成次數佔了兩行,不是寫重了):真正被當作事實的那一份「今天眺了幾次」存在主 App 自己的 UserDefaults 裡;共享容器裡那一份是衍生出來的唯讀投影,專門寫給小工具讀。分開的原因很實際——App Group 在某些簽章設定下可能拿不到,那時不該連你自己 App 裡的次數也一起丟掉,丟掉的只應該是「小工具上還能不能看到它」這一件事。
關於 App Group 共享容器:主 App 與「今日進度」小工具同屬本 App 的同一個 App Group(group.com.adrain.tiaoyixia),主 App 把上面那份投影寫進去,小工具讀它。這個容器只在你這台 iPhone 上、只在本 App 自己的這幾個部件之間共享,其他 App 讀不到,也不會寫給任何群組外的東西看。Apple Watch 不參與這個共享容器——手錶在另一台裝置上,兩端之間靠 WatchConnectivity 傳訊息,不是共享同一塊儲存空間。這一條已在提交給 Apple 的隱私清單裡按 Apple 要求宣告為 UserDefaults 的兩條使用理由(CA92.1 與 1C8F.1)。
鎖定畫面即時動態與動態島走的是另一條路,不經過這個共享容器(這兩條別混成一件事):
| 你在螢幕上看到的東西 | 資料從哪來 |
|---|---|
| 今日進度小工具(主畫面/StandBy 小工具位置上那個不走秒的小方塊;不支援鎖定畫面小工具位置) | 讀上面那份 App Group 共享投影 |
| 鎖定畫面上那張會走倒數的卡片、以及動態島(StandBy 全螢幕顯示的也是它) | 讀的是系統 ActivityKit 自己保管的那份即時動態狀態——主 App 透過系統介面把「目前階段 + 本輪的絕對結束時間」推給系統,之後由系統負責在鎖定畫面與動態島上呈現。它不讀、也不寫 App Group 那個共享容器,因此也不在上面那張儲存表的任何一行裡 |
兩條路都只發生在你這台裝置上,都不涉及任何伺服器;分開寫只是為了讓上面那張表的「讀的是誰」準確,不是說存在第二處資料留存。
關於開發偵錯功能:開發者選項、模擬購買面板、短週期測試模式等僅供內部開發使用的功能,不參與正式版本的編譯,不會出現在你從 App Store 安裝的 App 裡。這一點已用簽章後的正式建置產物逐項核驗過(二進位符號與四種語言的文案資源中相關條目計數均為 0),不是「執行時隱藏」。
八、沒有帳號,如何清除本機資料
因為本 App 不要求註冊帳號,所以不存在「申請刪除帳號」這類流程。
本 App 目前沒有提供 App 內的「清除本機資料」按鈕;清除的辦法是移除 App。因為 iPhone 與 Apple Watch 上的資料是兩份(見上表),這裡分三件事說清楚:
- 移除 iPhone 上的「眺一下」 —— iOS 會清除該 App 在這台 iPhone 上的本機儲存,包括上表中標著「iPhone」的全部內容,以及那個 App Group 共享容器。
- Apple Watch 上那份要跟著手錶端的 App 走 —— 上表中標著「Apple Watch」的兩項(啟動記錄、週期狀態投影快取)存在手錶本機。它們隨手錶端 App 一起被移除;iPhone 端移除時,系統通常會一併移除配對手錶上的隨附 App,但如果你此前在 Watch App 裡單獨保留了它,就需要在手錶上再刪一次。請以你裝置上的實際情況為準,不要假設刪一端就一定刪乾淨了兩端。
- 已購買的 Pro 不受影響,也刪不掉 —— 購買記錄由 Apple 管理、存在你的 Apple 帳戶下,不在我們能觸及的範圍內。重新安裝後在購買頁按「恢復購買」即可重新取得權益;反過來說,移除 App 也不會撤銷或退掉這筆購買。
另外:因為我們從未收集過你的任何資料、也沒有自建伺服器,所以不存在需要我們代為刪除的遠端副本。(Apple 側與你購買記錄相關的資料由 Apple 按其隱私權政策處理,不由我們經手。)
九、兒童隱私
本 App 不收集任何使用者的個人資訊,無論年齡。它沒有帳號、沒有社群功能、沒有使用者生成內容、沒有廣告,也不進行任何形式的追蹤,因此不存在針對兒童的資料採集行為。
十、政策的變更
本政策如有更新,我們會在本頁更新「最後更新」日期,並在 App 版本更新說明中提示。因為本 App 沒有帳號體系,無法逐一通知使用者,請以本頁目前內容為準。
十一、聯絡方式
如你對本政策有任何問題,可透過以下方式聯絡我們:
電子郵件:safferuk@gmail.com
十二、與 App Store 隱私標籤(Privacy Nutrition Label)的對應關係
App Store Connect 在提交審核前要求填寫「App 隱私」問卷。基於上文已核實的事實,本 App 對應的正確填法是:
- 資料收集:不收集任何資料(Data Not Collected)——無帳號、無第三方 SDK、我們自己不接收也不儲存任何使用者資料。 注意理由要寫對:這一條不能用「App 完全不連網」來論證,因為 App 內購買要經過 Apple 的 App Store 伺服器(見第二、四節)。正確的理由是:那條通道由 Apple 經手,開發者一側既不接收也不儲存任何可關聯到你的資料;Apple 的隱私問卷本身也不要求把 Apple 自己的 App 內購買處理算作開發者的資料採集。
- 用於追蹤:否——與隨套件提交的
PrivacyInfo.xcprivacy中NSPrivacyTracking = false一致。
這份問卷需要專案負責人在 App Store Connect 上實際操作填寫,本頁不代替那一步;提交前應按 Apple 當時的問卷選項,對最終提交的那一份建置再核實一次。參考:Apple App Store Connect:管理 App 隱私