Rixstep
 About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Home » Learning Curve » Developers Workshop

Detach Audit

Frankly, what Apple did forever forfeited your trust.


Get It

Try It

This was the 'Detach Audit'. It was about securing secondary threads. Changes have been made to our 70+ Cocoa applications.

A few preliminaries for those new to the club.

1. All executables are generated for release. Many software houses, who don't know any better, simply turn off generation of debugging info. This is not enough. Still others don't turn off debugging info. No paying customer, no user at all, should ever be given a debug image, period.

2. All bundles are stripped of unnecessary cruft. We were first to strip classes.nib and info.nib. We worked with Ankur Kothari to strip designable.nib. Apple finally followed suit several years later, but PkgInfo still remains, as but one example. We strip that too as it's useless. We also strip unnecessary XAs and ACLs. File times are preset identically to further compact download archives. And we put info from Credits.html in Info.plist to save another 4 KB per bundle.

3. There are no 'code resources' files, no code-signing. Generally there are no 'resource' files other than NIBs and app icon. The graphics in use are stored in a compact non-graphic format with the framework and not per application, further reducing redundancy. This not only saves storage space, it also makes for much faster program launches, SSD or no - once the framework's active, the graphics are resident for all applications. We've been using this for over fifteen years. Where are the others? And no, Apple's asset files don't hold a candle. Can no one at Apple figure things like this out?

4. The ACP today comes with a small army of software titles to combat the walled garden control Apple try to impose on you all. Frankly, what Apple did was greedy, monopolistic, unethical, and it forever forfeited your trust. That no other software house will dare object only shows how 'sheeplish' Apple users are. One year they're glad to boast they're the most secure popular platform, the next year they accept the lie that they're suddenly insecure again. Almost a replay of the PowerPC/Intel rubbish they ran with years before. And no, no other Unix distro, not even the ultra-secure ones, do anything like this. Not OpenBSD, not Red Hat. Not any of them. It's all baloney. Apple baloney. Billion-dollar baloney. It comes out of your pocket. Got it? FYI.

Now onto business.

~~The Detach Audit~~

After twenty years with Apple, and countless years with NeXT, Apple suddenly decided to 'outlaw' screen updates from background threads. Of course they didn't explain why this was a good thing, why it was necessary, or what had changed after twenty years with the platform. Apple never explain things.

The way to accomplish this is through the instance method:

performSelectorOnMainThread:
    withObject:
    waitUntilDone:

But of course you have to find that on your own. Apple will never help you. They just outlaw and deprecate things - even macros - as it suits them, as if they're trying to create a pristine 'first release' that never needs updating ever. Sick.

The method, anyway, is easy to use. What is not clear is why it's suddenly necessary after all these years.

What is clear, OTOH, is that both new Apple code and stable NeXT code (the bulk of the OS) not only don't need it, but also that Apple introduced software traps to prevent crash reports from revealing what otherwise is going on under the bonnet.

This makes for a very arbitrary - not to say shaky - environment. Many times screen updates from secondary threads will in fact work. Apps built for earlier versions of the OS will work magnificently. There is no consistency, there is no justification, there is no satisfactory explanation, and there likely never will be.

That being said, and despite considerable efforts to update our considerable code base over the past year or two, we felt it necessary to give the code base a thorough going-over to make sure everything's up to 'standard'. No matter that it runs fine 'as is' now, doesn't veer off in a southward direction, so it's certain we're fully playing Apple's weird game.

Playing this game involved first isolating code files containing calls to create secondary threads. For now we're dispensing with issues Apple's code can have. We can't always know when Apple code will attempt to do screen updates on its own. If we're not directly responsible for screen updates, we turn off the paranoia crank and leave well enough alone.

Approximately thirty of our 70+ apps create secondary threads.

(One notable outlier is Xfile which was intentionally written as a single-thread application. Files are the most crucial resource a user has, and, as an IBM developer in Boca Raton once quipped, when you start a second thread, you open Pandora's Box. Xfile's stability is legendary, and that's one of the reasons.)

For each of these thirty apps, we isolated the code files containing code to start secondary threads. Then we followed to the entry points for these secondary threads and followed that code in all directions, inspecting line by line.

We made some changes. Most were related to the project at hand, but we found two or three other things we wanted changed anyway.

All in all we updated fourteen apps this time.

None of the executables are smaller what we know. Some are of the same size as before. A few have grown in size, although never as much as a single allocation block of 4096 bytes. So things are still lean and mean like no one else seems capable of.

The affected apps are:

BBC Chex GD macTag Rixstamp Runner Spike SPXN Swap TIFFCompress Xrename Xscan Xstrings XX

Should you notice anything with these apps - or any app for that matter - please contact us. By the time you receive this, we'll have been testing the new builds for quite some time. But even so: shit can at times happen.

Now the actual changelog notes - which this time are naturally rather brief. Stay safe, virus-free, and please see the latest warnings about mRNA vaccines and please visit the FLCCC. It's a global health crisis, don't forget.

2021-05-18 RxSelflip Pruning and adding. GDE, Lightman, Xbase. Removed from Changes where multiple selections not used.

2021-06-17 Detach Audit 29 apps in this batch, 11 down, 18 to go.

2021-06-19 Detach Audit 18 down, 11 to go.

2021-06-19 Detach Audit (Final?) 27 apps all told, revised tally. 14 revised, several were previously audited and revised.

AUDITED: BBC CandS Chex CLIX CRLF GD Lightman macTag MD Rixcomp Rixmode Rixstamp Rixtime Runner Spike SPX SPXN Swap TIFFCompress Tracker XaBatch Xfind Xrename Xscan Xsed Xstrings XX

REVISED: BBC Chex GD macTag Rixstamp Runner Spike SPXN Swap TIFFCompress Xrename Xscan Xstrings XX

Now it's to test these 14 for a while before we unleash them on you guys.

2021-06-19 Toolbar The glyphs for Copy and Duplicate are too similar. We have an alternate Duplicate we've never used and are giving it some thought.

2021-06-19 Detach Audit Now testing.

2021-06-19 Spike Disable Get query field on search.

2021-06-19 Rixedit Shortcuts for save frame and goto saved frame.

We're still thinking of putting validation on 'Update' but we see potholes in that pavement. We shall see.



You've obviously heard of us, otherwise you wouldn't be here.
We're known for telling the truth even if it's not in our interest.
We're now telling you to beware Apple's walled garden. Don't get locked in.
What you've seen so far may be only the beginning of something far far worse.
Download our Test Drive and at least check out our free Keymaster Solo.
That's the first step to regaining your freedom. See here.

CONTACT INFO:
John Cattelin
Media Contact
contact@rixstep.com
PURCHASE INFO:
ACP/Xfile licences
User/Family/Business
http://rixstep.com/buy
About | ACP | Buy | Industry Watch | Learning Curve | News | Products | Search | Substack
Copyright © Rixstep. All rights reserved.