Writing / Engineering
The First Thing My New Linter Flagged Was My Own Live App
- Published
- Read time
- 3 min read
- Written by
- Victor Solano
I built a linter called screenproof. It checks App Store screenshot folders offline: exact pixel sizes, formats, file counts, locale layout, and the junk that should not be in an upload folder. One command, npx screenproof, zero dependencies. Before I published it, I ran it on my own apps.
The Store Only Graded the PNGs
I wanted a real check beyond the 99 unit tests. My test fixtures only contained the rules I had already written. The screenshots from my live apps had gone through the actual gate.
Apple had accepted the PNGs and was serving them on the App Store. That gave me a useful check for the image rules. It did not validate every other file sitting beside them on my drive.
Sixteen Findings, Two Different Verdicts
The first two apps came back clean. Then I pointed it at VaultSnap, which has been live since March, and got 16 findings.
Eight were accepted PNG screenshots carrying an alpha channel. The other eight were HTML mockup files I had left in the folder after building the screenshots.
Those findings meant different things. The PNGs tested my assumption about Apple's gate. The HTML files exposed local folder clutter. Apple never saw those files.
The Finding That Rewrote a Rule
I had drafted the alpha-channel rule as a hard error. The usual advice says screenshots should not include transparency, and a hard error felt tidy.
Then I had eight counterexamples from my own live listing. Apple accepted those PNGs in March. Calling alpha a guaranteed upload failure would have been false, so I shipped it as a warning instead.
The HTML files stayed warnings too. They were worth removing from the folder, but they were not rejected uploads.
My Folder Was the Embarrassing Part
I expected the first useful run to catch a bad rule. It caught one, then showed me I had left eight HTML files in a screenshot folder for months.
I removed the junk, kept alpha as a warning, and published screenproof with one less made-up certainty.
Related Articles
I Have 48 Readers, Not 4,958: Counting Real People From a Server Log
Six days of my own access log said 4,958 pageviews from 529 visitors. Verified against asset loads and request cadence, it was 48 from 21 addresses. Here is the full method, the jq, the three ways the easy count lies, and the two bugs I found in my own classifier.
Twelve App Updates Rejected at Once Under Guideline 4.3(a)
Apple rejected every pending version in one batch with the same spam template, named no app and no specific defect, and left all twelve live apps on the store. Here is what I measured before replying once.