|Home » Learning Curve » ACP Guru
On Manicuring NIBs
From the ACP/Xfile update 18 March 2017.
This update's about the NIBs that needed to be manicured.
A few words first about how it's done.
This NIB manicuring is necessary because Jony Ive, in addition to all else he's done, signed off on a fundamental GUI metric recently which means that apps with tableviews with column headers that have directional arrows must be heightened by six pixels to keep their layout correct.
NIBs today are *compiled* by Xcode. They weren't compiled by Project Builder. For along came Apple's 'keyed objects' (which we never use) and things were very messy for a while with ridiculous extraneous NIB helper files adding tens of megabytes to ordinary OS updates, thus giving rise to tools such as those from Ankur Kothari.
So to create a new modified NIB, one must *build* an entire app.
We've done this now for 8 (eight) ACP apps.
The punch line (the punch in the gut) is a 'Swift' one. For later Apple compilers, for now equipped with the childish 'Swift' capability, add puerile bulk to decent binaries even if that LLVM language isn't used. Talk about demented.
The closest we see to this is the 'fake' entry point used on Windows which adds about 2.5 KB to an executable. This, however, is in a class of stupidity all its own.
Here are the totals for the eight bundles with the current binaries:
89 items. 821,592 bytes. 1,872 blocks. 0 bytes in extended attributes.
Here are the totals where the only change is in the binaries themselves:
89 items. 975,292 bytes. 2,168 blocks. 0 bytes in extended attributes.
Can you see the diff? *153,700* bytes. For 8 binaries. That's *19,212.5* bytes per binary. And you know how tight our code already is. The diff is staggering.
App Apple Ours Bloat
--- ----- ---- -----
ACL 58592 42540 38%
ASM 39024 18788 107%
ASMX 61396 45496 35%
Clipotheque 60984 44936 36%
TempEdit 34608 18312 89%
TIFFCompress 34604 14268 143%
XaBatch 52444 28160 86%
Xbase 52180 27732 89%
There are two binaries there that are over twice as big. Those are all 'release' binaries. (Something the amateurs on the platform don't even know how to create.) They're the exact same code. The code's not been touched at all.
Use either binary in the same bundle - same results. Why the diff? What's all that additional code for?
It's for STUPIDITY.
And this is why we keep legacy boxen. So we don't have to appear as fucking demented as the rest of the Landed Gentry. We won't tolerate it. It's disgusting.
Xfile: Free Test Drive
CLIX: Learn How to Fish