Читать по-русски: 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.
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_mfpbackend +scanimage, made fully relocatable and bundled inside the .app (see below)
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
scripts/build-app.sh # → dist/Скан 3025-share.zip (needs Developer ID cert in keychain)
scripts/notarize.sh # → notarized, stapled, zip copied to ~/DesktopNotarization 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 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:
- Copying
scanimage,libsane.1.dylib(the dll loader backend),libsane-xerox_mfp.1.so, and the libjpeg/libpng/libusb dylibs from Homebrew. - Rewriting all load commands to
@executable_path/...viainstall_name_tool. - Binary-patching the backend search path string inside
libsane.1.dylib(/opt/homebrew/Cellar/sane-backends/1.4.0_2/lib/sane→sane\0, a cwd-relative path — SANE's loader usesfopen, which can't expand@executable_path). The app sets cwd to the driver dir when spawning. - Recompiling
libsane-xerox_mfp.1.sofrom sane-backends 1.4.0 source withdriver/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.
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.
- 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".