Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Scan 3025

Читать по-русски: README.ru.md

Website: oldscans.gorbikov.love — download, the supported-model list, and a plain-English explanation of why these printers print but won't scan on a modern Mac.

Native macOS app that scans over Wi-Fi from Samsung-protocol network MFPs that never got modern Mac drivers: Xerox WorkCentre/Phaser 3xxx, Samsung SCX/Xpress, and Dell laser MFPs (any device supported by SANE's xerox_mfp backend). These printers' AirPrint is print-only (no eSCL), so modern Macs can't scan from them at all — this app bundles its own driver and needs zero installation. Built and tested on a Xerox WorkCentre 3025.

Download

Grab the notarized app from GitHub Releases and drag "Scan 3025" to Applications. Requires an Apple Silicon Mac, macOS 14+. Download with a browser — files saved by the Mac App Store Telegram client get a quarantine flag that blocks launching any app ("File created by an AppSandbox").

  • SwiftUI; English UI with Russian localization (follows system language); Apple Silicon only (macOS 14+)
  • Auto-discovers the printer via Bonjour (_ipp._tcp), manual IP fallback
  • Multi-page scanning → one compact, searchable PDF (JPEG + invisible OCR text layer, EN/RU), 150/300/600 dpi, color/gray
  • Driver: SANE xerox_mfp backend + scanimage, made fully relocatable and bundled inside the .app (see below)

Layout

app/        main.swift (the whole app), Info.plist, icon.swift + generated icons
driver/     xerox_mfp-tcp-framing.patch  — our fix to the SANE backend
            prebuilt/                    — ready-to-bundle relocatable driver tree
scripts/    build-app.sh                 — compile + assemble + sign + zip
            notarize.sh                  — Apple notarization + staple + Desktop zip
dist/       built app, colleague README.txt, share zip (generated)
build/      throwaway build output (gitignored)
STATUS.md   current state / next steps (RU)
BUILD.md    original build notes, incl. how driver/prebuilt was produced

Build & ship

scripts/build-app.sh    # → dist/Скан 3025-share.zip (needs Developer ID cert in keychain)
scripts/notarize.sh     # → notarized, stapled, zip copied to ~/Desktop

Notarization needs one-time credentials setup — see the header comment in scripts/notarize.sh. Without notarization, Gatekeeper on macOS 15+ refuses the app on other people's Macs.

The driver (the interesting part)

The WorkCentre 3025 is rebadged Samsung hardware speaking the Samsung network scan protocol on TCP 9400. SANE's xerox_mfp backend supports it, but SANE is Homebrew-only and not relocatable. driver/prebuilt/ was made portable by:

  1. Copying scanimage, libsane.1.dylib (the dll loader backend), libsane-xerox_mfp.1.so, and the libjpeg/libpng/libusb dylibs from Homebrew.
  2. Rewriting all load commands to @executable_path/... via install_name_tool.
  3. Binary-patching the backend search path string inside libsane.1.dylib (/opt/homebrew/Cellar/sane-backends/1.4.0_2/lib/sanesane\0, a cwd-relative path — SANE's loader uses fopen, which can't expand @executable_path). The app sets cwd to the driver dir when spawning.
  4. Recompiling libsane-xerox_mfp.1.so from sane-backends 1.4.0 source with driver/xerox_mfp-tcp-framing.patch: the stock TCP transport waited out a 1-second socket timeout on every protocol exchange because it didn't parse the [0xa8][x][len] response framing. The patch reads the length and returns when the response is complete. 300 dpi scan: 129 s → 12.7 s. Worth upstreaming to https://gitlab.com/sane-project/backends.

Configs (dll.conf, xerox_mfp.conf with the printer IP) are written by the app to ~/Library/Application Support/Scan3025/etc and passed via SANE_CONFIG_DIR. Exact rebuild steps for the whole tree: BUILD.md.

License

App code (app/, scripts/): MIT. Bundled driver binaries: SANE (GPL v2+ with the SANE exception; built from the 1.4.0 release plus the two patches in driver/ — see THIRD_PARTY_LICENSES.txt), IJG libjpeg 9f, libpng 1.6.58. Contributing the patches back to SANE: driver/UPSTREAMING.md.

Device quirks

  • The printer accepts one scan session at a time; a killed/crashed session jams scanning for ~1–2 minutes (the app's error message explains this).
  • Discovery relies on the printer's AirPrint Bonjour advertisement; if the network blocks mDNS, use "Enter IP manually".

About

Free macOS app that scans over Wi-Fi from old Xerox WorkCentre/Phaser, Samsung SCX/Xpress and Dell laser MFPs — driver built in, no install. macOS 14+, Apple Silicon, notarized.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages