Tags: reddrickdee/SideScreen
Tags
fix(mac): info popover renders hint text instead of empty bar (0.8.1) The `ⓘ` icon next to Status rows opened an empty horizontal bar — fixedSize(horizontal: false, vertical: true) was applied after frame(maxWidth: 320), so the popover computed ideal height before width and collapsed to one thin row stretched to 320 pt. Reordered modifiers to a fixed 280 pt frame with fixedSize before frame, plus explicit leading alignment. Wireless mode and all other 0.8.0 functionality unchanged.
fix(ci): satisfy stricter Mac Swift + Android ktlint on GitHub Actions
Mac (release.yml runner Swift toolchain is stricter than local Xcode):
- Strong-bind self before Task in three closures (handleConnectionModeChange
observer, onWirelessClientPaired callback, refreshStatusIndicators detached
ADB probe). Local accepted self?.foo inside Task { @mainactor in ... }, CI
flags it as 'reference to captured var self in concurrently-executing code'
and refuses to compile.
- Drop bogus 'await self.settings.port' (no async work happens — port is read
synchronously before the detached Task).
Android (build-android.yml runs ktlint --strict):
- Run ktlint --format across all new wireless files (try/catch spacing,
statement wrapping, function-signature multiline, argument-list-wrapping).
- Hand-fix four max-line-length offenders by splitting long error strings
across continuation literals.
fix: remove tccutil reset to stop XProtect quarantining the app (0.7.1) The 0.7.0 stale-TCC helper added in tranvuongquocdat#8 spawned `/usr/bin/tccutil reset ScreenCapture <bundle-id>` from inside the app. That exact call sequence is the textbook signature of TCC-bypass malware (Atomic Stealer / Cthulhu Stealer family) and XProtect's YARA rules match on it. With our ad-hoc signature plus disable-library-validation / allow-unsigned-executable-memory entitlements already in place, the binary scored high enough to be auto-quarantined to Trash on install. This commit removes the in-app reset path entirely: - Drops `resetScreenRecordingPermission()` and the 1.5s post-request recheck / stale detection in AppDelegate.checkPermissions(), reverting that block to 0.6.8 behavior. - Drops the "Permission stuck" and "Couldn't auto-reset" banners and the `hasGrantedBefore` / `isPermissionStale` / `tccResetFallbackVisible` properties from SettingsWindow. - No literal `tccutil` / `reset ScreenCapture` strings remain in the binary, verified with `strings`. Tradeoff: users who hit a stale TCC entry after a reinstall (tranvuongquocdat#8) must remove the entry manually in System Settings instead of clicking a button. Worth it to stop the install-time quarantine that's blocking all 0.7.0 users. All other 0.7.0 improvements (short-GOP encoding, instant decode handshake, default 60 Hz, touch parsing gate, Arrange Displays shortcut, decoder latency log) are preserved.
fix: ADB race condition on first connect + SCStream idle false-positi… …ve restart - setupADBReverse() is now async and awaited before server start, eliminating the race where the streaming server listened before the ADB tunnel was ready. Adds 3-attempt retry with 1s delay for first-install USB authorization delays. - Frame flow monitor now sends a keepalive frame (last captured buffer) when the screen is idle instead of restarting SCStream. macOS does not deliver frames when content is unchanged — this is by design, not a crash. Real SCStream errors are still caught via the error delegate. - Bump version to 0.6.8, update Info.plist and CHANGELOG.
PreviousNext