Repository navigation
TinyOFD v0.0.4 — Windows x64 + macOS arm64 portable
平台 / Platforms: Windows (x64) and macOS 11+ (Apple Silicon / arm64 only). Portable zips: extract and run, no install. Intel Macs and Linux are not supported.
Download
| Platform | Asset | SHA-256 |
|---|---|---|
| Windows x64 | tinyofd-win64-0.0.4-20261017.zip |
cfb7543203bc71319ad2212d04bbbcdfe50e3172efd1756cebcf821025d807d1 |
| macOS arm64 | tinyofd-macos-arm64-0.0.4-20261026.zip |
e3fd85efd256f894bf0577b94e6d16fc3c2ec5b08c1e501b9d9bb8ad17a7569f |
The macOS zip contains ofdviewer.app, README.md, LICENSE and INSTALL-macOS.txt.
macOS first launch (Gatekeeper)
The macOS bundle is adhoc-signed and not notarized, so Gatekeeper blocks the first launch of a browser-downloaded copy. This is a policy rejection, not a corrupt download or broken signature. Clear it with any of:
xattr -dr com.apple.quarantine /Applications/ofdviewer.app(use the real path), then double-click.- macOS 15+: try to open once, then System Settings → Privacy & Security → "Open Anyway" for TinyOFD Viewer.
- macOS 14 and earlier: right-click → Open → Open again in the dialog.
After one successful launch the quarantine flag is gone and later launches work normally. INSTALL-macOS.txt inside the zip documents these steps and checksum verification.
Fixed
- Resource file names are no longer hard-coded. The
PublicRes/DocumentResnames declared inDocument.xml<CommonData>(e.g.PublicRes_0.xmlfrom some producers) are resolved to package entries: a leading/is package-root relative, otherwise document-directory relative, with the canonical file name as fallback. The previous fixedDoc_N/PublicRes.xmllookup exited silently, so every embedded font and image declared there was dropped, and text whoseTextCodeis only meaningful through the embedded font's cmap rendered as garbage. - CJK documents whose font is not embedded now render instead of drawing
.notdef: a generic CJK system-font substitution is allowed only when the whole glyph run consists of Unicode scalars, so resolution through the substituted face's cmap cannot misplace glyphs. Runs carrying authoritative glyph indices still draw placeholders rather than wrong glyphs. script/clean.ps1no longer deletes third-party intermediates under_tmp/vendor(-Excludeonly matches leaf names, so it never skipped_tmp).ofdviewer.rcversion resource was stale (FILEVERSION 0,0,2,0while the app already reported 0.0.3); now0,0,4,0, still generated from the single source of truthapps/ofdviewer/ofd_version.pas.
Tooling
script/build.ps1also buildsofd_av_test, the offscreen render/screenshot tool used by the visual regression procedure.script/macos_release_package.shbuilds the macOS arm64 zip outside the FileProvider-synced tree, signs and verifies the bundle, then replays a quarantined browser download (extract, re-verify signature, check architecture / minimum macOS / executable bit, and reject leaked FinderInfo/FileProvider xattrs).
Quality
- 1016 automated tests passing (7 new regression cases: 4 resource-path, 3 font-fallback), heaptrc enabled
- Visual regression (gemma4:12B vision QA + manual inspection): the previously garbled sample renders crisp Chinese title and body text with no garbled glyphs, no black blocks and no overlap
- macOS arm64 headless render acceptance across seven samples, no garbled glyphs or black blocks
Notes
- Windows x64 portable zip: extract and run, no install. Non-commercial license (PolyForm Noncommercial 1.0.0).
- macOS arm64 portable zip: Apple Silicon only, macOS 11+. Adhoc-signed, not notarized; see the Gatekeeper steps above.
- Linux is unvalidated.