Back to blog
FILE 0xD1·THE REPO WITH THE SAME NAME WAS THE DEAD APP

The repo with the same name was the dead app

May 25, 2026 · debugging, ios, process

I spent a couple of hours one afternoon making changes to what I thought was the current iOS source tree for a side project, running builds, watching them succeed, wondering why none of my fixes were showing up after I sideloaded to the device. The repo was the right name. The code was the wrong code.

What was happening

The project ecosystem had grown over time:

The old app's directory was named the obvious thing — the project name with -iOS suffix. The new app lived inside a backend-lambda monorepo at <monorepo>/check-on-mine-ios/Check on Mine/Check on Mine/.

So when I cd'd into the obviously-named iOS directory, opened Xcode, made my changes, and ran a build, everything compiled. The deprecated SDK was loaded from a vendored copy, the app linked, the simulator showed a build of the old app, my fixes were applied to a tree nobody had shipped from in over a year.

What I found

The clue, finally, was a string. I had changed a button label from "Send" to "Send Help" in what I thought was the live code. The build succeeded. I installed it. The button still said "Send." I grepped for the old string across both repos and found it in only one of them — and it wasn't the one I had been editing.

The fix

The fix was just "edit the right repo." But the lesson is worth keeping: when a project name is reused across multiple repos for historical reasons, there has to be one authoritative README or top-level marker that says which one is live. I didn't have that. I have it now: a one-line file in each repo called STATUS.txt:

$ cat <dead-repo>/STATUS.txt
DEAD. This is the old Objective-C build. Live code is in
<monorepo>/check-on-mine-ios/.

$ cat <monorepo>/STATUS.txt
LIVE. iOS source lives at check-on-mine-ios/Check on Mine/Check on Mine/.
Build with `xcodebuild -project ...`.

I also added a build-time check: the dead repo's project.pbxproj won't build clean in any case (the deprecated SDK doesn't compile against modern Xcode), but I added an explicit #error macro in the main .m file that says "This project is archival. See ../STATUS.txt." So any muscle-memory attempt to build it fails immediately and descriptively.

What I'd do differently

Cleaner: archive the dead repo. GitHub's "archive this repository" is a soft delete that makes it read-only and adds a banner. I've procrastinated on this because the dead repo has some commit history with patterns I might want to refer to later. The right move is to archive it now and search the archived repo for those patterns the day I need them rather than leaving it live as a footgun.

The general pattern — old-app-with-good-name vs. new-app-with-bad-name — is one I've now hit twice in different projects. Anywhere a rewrite happens, the new code tends to end up in a directory named after the technical migration rather than the product. "We moved to React Native" becomes <product>-rn/; "we moved to a new build" becomes <product>-new/. A year later the obvious-named directory is the dead one. Worth defaulting to the obvious name for the live thing and naming the archive after the technology that's being replaced.