Skip to content

TinyOFD v0.0.4 — Windows x64 + macOS arm64 portable

Latest

Choose a tag to compare

@miemiekurisu miemiekurisu released this 17 Oct 04:08
· 3 commits to main since this release

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:

  1. xattr -dr com.apple.quarantine /Applications/ofdviewer.app (use the real path), then double-click.
  2. macOS 15+: try to open once, then System Settings → Privacy & Security → "Open Anyway" for TinyOFD Viewer.
  3. 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 / DocumentRes names declared in Document.xml <CommonData> (e.g. PublicRes_0.xml from 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 fixed Doc_N/PublicRes.xml lookup exited silently, so every embedded font and image declared there was dropped, and text whose TextCode is 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.ps1 no longer deletes third-party intermediates under _tmp/vendor (-Exclude only matches leaf names, so it never skipped _tmp).
  • ofdviewer.rc version resource was stale (FILEVERSION 0,0,2,0 while the app already reported 0.0.3); now 0,0,4,0, still generated from the single source of truth apps/ofdviewer/ofd_version.pas.

Tooling

  • script/build.ps1 also builds ofd_av_test, the offscreen render/screenshot tool used by the visual regression procedure.
  • script/macos_release_package.sh builds 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.