Ship iOS + Android arm64 in the package (23MB compressed).
macOS, Linux, and Android x86_64 (emulator): build from source with ./build_go.sh
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Document all 4 platforms with status and architecture details
- Add API reference table
- Add platform setup sections (iOS, macOS, Android, Linux)
- Document build commands for all platforms
- Add binary size table
- Note Android Tailscale tunnel limitation and path forward
- Add Linux test file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use DERIVED_FILE_DIR instead of symlinks for force_load path.
Symlinks in PODS_TARGET_SRCROOT fail when installed from pub cache
because Xcode validates build inputs before script phases run.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uses PUB_DEV_REFRESH_TOKEN secret to authenticate with pub.dev.
The refresh token is long-lived and auto-renews the access token.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add README.md and CHANGELOG.md (required by pub.dev)
- Add .pubignore / ios/.pubignore to include xcframework in published package
- Add Gitea Actions workflow: builds xcframework and publishes on release
- Release tag must match pubspec version with no v prefix (e.g. "0.1.0")
- Requires PUB_TOKEN secret in Gitea repo settings
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Go layer (c-archive) provides a localhost TCP proxy through a WireGuard tunnel.
Flutter connects gRPC to localhost:PORT, Go forwards via tsnet to heater's Tailscale IP.
No VPN entitlement needed — uses userspace netstack.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>