Repository navigation
ScreenTask Mac 0.1.3 改成「一位觀看者兩條長連線」(畫面串流一條、狀態心跳一條)。觀看頁預設以 multipart/x-mixed-replace 串流接收畫面,其餘請求也改為 keep-alive 重用連線,不再每張畫面開一次 TCP 連線:同一段 20 秒的觀看,0.1.2 會產生約 140 條用完即關的連線,0.1.3 是 0 到 1 條。
這同時處理了一個嚴重問題。macOS 對隔離(quarantine)過的 App 會啟用 App Translocation,從唯讀影子掛載執行;在該狀態下持續分享畫面時,曾在 macOS 26.6.2 觸發核心崩潰並重新開機(崩潰路徑落在每條新連入連線都會執行的系統網路政策檢查)。本版兩面處理:大幅減少連入連線數,並在偵測到程式不是從「應用程式」執行時,主動詢問是否複製過去並重新開啟(原本那份會保留,可勾選不再提醒)。請將 App 拖到「應用程式」再使用,不要直接從下載資料夾開啟。
觀看頁其他調整:串流模式停用「更新間隔」欄位(速度由分享端的擷取間隔決定);瀏覽器不支援串流時自動降級為逐張更新並恢復該欄位;以每 3 秒一次的 HEAD 心跳偵測分享端停止,中斷時顯示提示並自動重連——舊版在串流下不會觸發 error 事件,畫面會停在最後一張。
連線防護:同時上限 256 條、單一來源上限 24 條,串流連線改以 TCP keepalive 回收失聯裝置;同一次寫入超過 10 秒沒有進度就重置該連線,名額要等系統真的收掉通訊端才釋出。這些是兩輪覆核逼出來的:第一輪發現「串流連線沒有任何逾時,單一來源可占滿整張連線表並癱瘓服務」,第二輪發現第一版修法只放掉了帳面名額、通訊端仍活著,反而變成無上限的記憶體洩漏。實測同一來源連續四波各 8 條「不讀取」連線,現在停在 16 條不再成長,最後一波結束約 20 秒內全部消失,其他裝置全程可正常觀看。觀看頁按下暫停或切到背景分頁時,Safari 原本仍會繼續收畫面並留下連線,現在會確實中斷。
驗證:核心回歸測試 7 組;loopback 整合測試新增連線重用、多段串流與明確關閉的檢查;新增 scripts/viewer-test.py,以 Chromium、WebKit、Firefox 三種引擎實際開啟觀看頁,檢查串流播放、暫停/繼續、分享端停止與復原、降級與連線數(需自行安裝 Playwright,屬開發工具,不隨 App 發佈)。CI 追加 Chromium/WebKit 觀看頁測試。
建置腳本新增選配的正式簽署與公證:設定 SCREENTASK_SIGN_IDENTITY 與 SCREENTASK_NOTARY_PROFILE 即以 hardened runtime 簽署、送交公證並蓋章。本次發行包仍為 ad-hoc 簽署、未公證;若 Gatekeeper 阻擋,確認來源後於系統設定選「仍要打開」。HTTP 未加密,請在可信任網路使用。詳見 docs/VALIDATION.md。
GPL-3.0-or-later。致謝 EslaMx7/ScreenTask 原始專案;本專案是獨立 macOS 移植。