
OverAir.app
Share IPA / APK files to test groups before release
What it does
Developers often require test builds to be sent out to the test users. While test flight does a great job, it is often time consuming. OverAir allows users to upload theIPA andAPK with signed developer certificate and profiles, for eligible users.
Does a similar job
all alternatives →

NoMac.appJul 2026 · nomac.app · ▲136The publishing pipeline built for AI agents: build signed iOS releases, push to TestFlight, and submit to the App Store — no Mac, no Xcode.

- WBWe Built an AppStore for TestFlight Apps2020 · testflight.live · ▲16
TesterBuddy: Beta Feedback ExchangeFeb 2026 · testflight.apple.com · ▲41TesterBuddy – Stop silent TestFlight installs (Public Beta)
More dev tools this month
the category →



OpenTrailPaper is open-source bike computer firmware for the LilyGO T5S3 4.7" E-Paper PRO. It supports offline maps, GPX routes, FIT recording and Bluetooth sensors.
Dev tools · 5d ago · opentrailpaper.com

Lettertrace▲375Track your AI visibility for free (using your own API keys!)
Dev tools · 28d ago · lettertrace.com
Source: Product Hunt launch ↗
Launched alongside, March 2022
the whole month →- IM
Hi HN! I made many small web games in the past with Unity or Phaser. But this time I wanted to make something completely on my own. So I coded a basic game framework in plain JavaScript, and used it to make Almost Pong. This was a really fun project that taught me a lot about JavaScript, and I plan to make more minimalist games with this framework. Interesting fact: Almost Pong doesn't load any assets, all sprites and sounds are generated with code. Happy to answer questions, and please let me know if you have any feedback on the game. Thanks!
Dev tools · 2022 · lessmilk.com
- IM
Life & fun · 2022 · networksfromscratch.com
- HA
Paste the following into the console of any HN page - for annotated avatars on all HN comments. (self contained code) for(u of document.querySelectorAll('.hnuser'))for(u.prepend(c=document.createElement('canvas')),x=c.getContext('2d'),c.width=18,c.height=14,s=u.innerText,r=1,i=28+s.length;i--;i>>29>X*X/3+Y/2&&x.fillRect(6+2*X,2*Y,2,2)&x.fillRect(6-2*X,2*Y,2,2):r+=s.charCodeAt(i-28,x.fillStyle='#'+(r>>8&0xFFFFFF).toString(16)))r^=r>>17,r^=r>2
Dev tools · 2022


- AG
Life & fun · 2022 · backofyourhand.com