| Vienna 3 on Tiger | Vienna 3 Sync on Tiger |
|---|---|
Vienna 3 is the first version of the RSS reader that supports syncing with any online services like The Old Reader. However, 3.0.x+ requires Mac OS X 10.6 Snow Leopard and later. I wanted this backport so I could use an RSS reader with The Old Reader syncing for my iMac G4 which cannot run Snow Leopard.
This backport also replaces the underlying RSS Feed and Account syncing networking code with modern libcurl and OpenSSH which supports TLS 1.2. This means, that you are no longer limited by the networking limitations of the legacy version of Mac OS X you are running.
This backport project is powered by Altivec Intelligence to allow easy cross-compiling for Mac OS X Tiger.
| Area | Change |
|---|---|
| Minimum OS | 10.4 Tiger |
| Architectures | ppc + i386 fat binary |
| Networking | ASIHTTPRequest re-plumbed to use libcurl with bundled CA bundle — enables TLS 1.2 against modern servers (CFNetwork on Tiger/Leopard cannot) |
| Concurrency | Fast enumeration, blocks, and NSOperationQueue replaced with Tiger-compatible equivalents |
| Dependencies | PSMTabBarControl bundled as a .framework; JSONKit, SQLite, libcurl, libssl, libz statically linked |
| Compatibility shims | Runtime-checked API bridges centralized in src/custom/CrossPlatform.{h,m} and injected via -include |
- Networking and/or Database activity happens on main thread so usually beachballs when syncing
- Copy and Paste do not work (this is bizarre)
- WebView uses system networking, not libcurl
- Investigate beachball on sync
- Convert nib files to code
- Add x86_64 and arm64 builds
- Create release builds with Github Actions
vienna/ git submodule — upstream source, NEVER modified
deps/ external dependencies (JSONKit, PSMTabBarControl) — NEVER modified
patches/ unified diffs applied against vienna/ and deps/
src/
custom/ files authored for this project (CrossPlatform, etc.)
nibs/ custom nib builders
resources/ custom .tiff / .plist / .pem
scripts/ build/stage/patch shell scripts
build-stage/ generated staging area (patched copies) — do not edit in place
altivec/ toolchain submodule (osxcross, libcurl, deploy script)
You do not need a Mac. The build system is Altivec Intelligence which distributes a preconfigured Docker container with the osxcross toolchain targeting the 10.5 SDK with a 10.4 deployment target.
- Docker + Docker Compose
gitwith submodule support- ~5 GB free disk for the toolchain image
git clone git@github.com:jeffreybergier/Vienna-Altivec.git
cd vienna-altivec
git submodule update --init --recursive
docker compose build # 5-20 min
docker compose run --rm altivec "cd ./altivec/libs/libcurl && make mac" # 5-90 minAll build commands run inside the container. The below command makes a release build.
docker compose run --rm altivec "make stage && make release"Note: The build command produces many warnings with regard to property syntax and fast enumeration. These warnings can be ignored because there are runtime patches to support these features even on Tiger.
The other available commands
make stage # apply patches into build-stage/
make debug # compile a debug fat binary → build-debug/Vienna.app
make release # compile a release build
make patches # updates patch files based on changes in build-stage
make clean # wipe build artifactsIf you have a vintage Mac accessible over SSH, the helper script copies the built bundle and launches it:
./altivec/altivec_deploy.sh build-debug -d <ssh-host>Replace <ssh-host> with the host alias in your ~/.ssh/config.
build-stage/ is regenerated on every make stage, so changes there are
ephemeral until you run make patches to persist them as unified diffs.
make stage
$EDITOR build-stage/source/SomeFile.m # edit the staged copy
make patches # diff build-stage/ back into patches/
make debug$EDITOR src/custom/CrossPlatform.m
make debugNo staging step needed — src/ files are compiled directly.
- Forgetting
make patchesafter editingbuild-stage/— changes are lost on the nextmake stage. - Editing
build-stage/before runningmake stage— the directory may be empty or out of date.
Vienna itself is Apache 2.0 — see vienna/LICENSE. The Altivec build
scripts and patches in this repository are released under the same terms.