Everything the code and repo can carry is already in place: bundle id, version,
the privacy manifest, export-compliance flag, icon, and make archive /
make export. What remains needs your Apple Developer account, and only you can
do it. This is the whole path, in order.
- Apple Developer Program. You need a paid membership (developer.apple.com/programs, $99/yr). TestFlight is not available on a free account.
- Find your Team ID. developer.apple.com → Account → Membership. It is a
ten-character string like
ABCDE12345. You pass it tomake archive. - Create the App Store Connect record.
appstoreconnect.apple.com → Apps → +
→ New App.
- Platform: iOS
- Name:
Comb(must be unique across the App Store; have a fallback likeComb for Buzzready in case it is taken) - Primary language: English
- Bundle ID:
dev.jedbridges.comb— if it is not in the dropdown, register it first at Certificates, Identifiers & Profiles → Identifiers → + → App IDs → App, description "Comb", bundle iddev.jedbridges.comb, explicit. No special capabilities need enabling: background modes and notifications work without an entitlement toggle here. - SKU: anything, e.g.
comb-001.
From the repo root, with your team id:
make export DEVELOPMENT_TEAM=ABCDE12345That regenerates the project, archives a signed Release build, and writes a
.ipa to build/export/. The first run will prompt in your login keychain to
create a distribution certificate; allow it.
Then upload one of three ways:
- Transporter (simplest): free on the Mac App Store. Open it, drag in the
.ipa, Deliver. - Xcode Organizer: run
make archive DEVELOPMENT_TEAM=…, then Xcode → Window → Organizer → select the archive → Distribute App → App Store Connect. This skips the separate export step. - Command line:
xcrun altool --upload-appornotarytool, if you prefer.
Processing on Apple's side takes 5-30 minutes. You will get an email when the build is ready in App Store Connect under TestFlight.
- App Store Connect → your app → TestFlight tab.
- Export compliance: it will ask once. Comb declares
ITSAppUsesNonExemptEncryption = NOin Info.plist (only TLS and the secp256k1 signature library, both exempt), so this should auto-clear. If asked, the answer is: uses encryption limited to exempt categories. - Internal testing (you and up to 100 people on your team, no review): add testers under Internal Group, they install the TestFlight app and get the build immediately.
- External testing (up to 10,000, needs a one-time Beta App Review, usually a day): fill in the Test Information — the "what to test" and a contact email — then submit. External review is lighter than App Store review but real.
Be honest about the two things testers will notice first, or you will field the same questions repeatedly:
Comb is an unofficial, open-source iOS client for Buzz communities. It is not affiliated with Block.
- Notifications are not instant. Comb has no push server, so it checks for mentions in the background on iOS's own schedule. A mention can arrive a while after it was sent. Turn it on in Settings.
- You need an invite. Communities are invite-only. Paste an invite a member sent you, or pair with Buzz on your desktop (click your avatar, then Settings, then Mobile).
Found a bug? Settings → Report a problem attaches a local log you can send.
The notes above are standing copy and rarely change. "What to Test" is per-build, and the useful version names the symptom a tester would have noticed rather than the fix. Nobody experiences a SIGTRAP on a background queue; they experience notifications that stop arriving.
Say when something is unverified. A tester who knows a feature has never met a real relay reports a discrepancy instead of assuming they misread the screen.
Build 11 (0.1.2):
Two things to try.
Notifications should stop killing the app. Earlier builds could be shut down by iOS while checking for mentions in the background. Turn notifications on in Settings, leave Comb closed a few hours, and tell me if a mention arrives.
Read state can now sync. Settings has a switch, "Sync what I have read", off by default. Turn it on everywhere you read, including Buzz on desktop. Read a channel in one place, check the other. Badges should agree.
That second one has never run against a real relay. If badges disagree or go backwards, tell me what you did and send the log from Settings, Report a problem.
Not a bug: marking something unread only travels between Comb devices. Buzz cannot see it.
Everything else is groundwork. If anything else feels different, tell me.
- Walk the join flow on a clean install with a real, unexpired invite, and time it. Under ~45 seconds to first message is the bar.
- Confirm QR pairing works against Buzz on a desktop you control.
- Force one background-refresh wake with the Xcode debugger to see a mention
notification actually fire (Simulator will not do this on its own):
pause in the debugger and run
e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"dev.jedbridges.comb.refresh"] - Set a privacy policy URL in App Store Connect (required even for TestFlight external). A short page stating Comb collects nothing and keys stay on device is enough; the repo README can be that page.
- Add real, unexpired invite links to
communities/index.jsonso Browse does not dead-end.