BRAMPP 1.6
Uygulama artık kendi güncellemesini buluyor ve açmadan önce doğruluyor. Ama yükseltmenin asıl nedeni paylaşımlar: ikinci bir BRAMPP kopyası ya da bir test koşusu canlı tünelleri öldürebiliyordu, ölmüş bir tünel ise arayüzde canlı görünmeye devam ediyordu. 1.5'in içeriği de bu pakette.
Düzeltildi
- Birim testleri çalıştırmak — ya da yalnızca ikinci bir BRAMPP kopyasının açık olması — canlı Cloudflare tünellerini öldürüyordu. Tünellerin pid ve log dosyaları siliniyor, MCP portu çalışan kopyanın üstüne bağlanmaya çalışılıyor, Homebrew servisleri başlatılıyor ve "son çalışan servisler" listesi üzerine yazılıyordu. BRAMPP'ın tuttuğu makine düzeyindeki durum makineye aittir, bir sürece değil: ona artık yalnızca birincil kopya dokunuyor (
Core/ProcessRole.swift). Konsol satırları da hangi sürecin yazdığını taşıyor — kurulu uygulama, Xcode derlemesi, test ana uygulaması ve önizlemeler aynı dosyaya eklediği için bunu görmek bu kadar zordu. - cloudflared'i ölmüş bir paylaşım canlı bildirilmeye devam ediyordu. Servisler satırı yeşil kalıyor, MCP
list_sharesaracı adresi vermeyi sürdürüyor, Cloudflare ise Error 1033 döndürüyordu. Tüneller artık zaten dönen tazeleme döngüsünde gerçekle karşılaştırılıyor. - İkinci bir BRAMPP kopyasını kapatmak, birincinin canlı tünellerini öldürüyordu. Kapanan süreç artık yalnızca kendi başlattığı tünelleri durduruyor.
- "Paylaşımı durdur", site herkese açık kalırken başarı bildiriyordu. SIGKILL'e yükseltme yoktu ve bekleme, cloudflared'in 30 saniyelik kapanma payına karşı 0,4 saniyeydi.
- Veritabanı geri yükleme, başarısız olduğunda başarılı raporluyordu. Betik
if psql …; then exit 0; fiyazıp ardındanrc=$?okuyordu — POSIX'te koşulu başarısız olan veelse'i bulunmayan birif0 ile biter, yani hata kodu hiçbir zaman görülmüyordu. Hem PostgreSQL hem MariaDB tarafında. - MariaDB, PostgreSQL ya da Python'u kaldırmak yalnızca "paket ve yapılandırma dosyaları silinecek" diyordu — betik ise veri dizinini siliyordu: her veritabanınızı, ya da site-packages ağacının tamamını. Onay artık somut yolları adıyla sayıyor, yapılandırmayı veriden ayırıyor, neyin gittiğini söylüyor ve servis adının yazılmasını istiyor.
- Üretilen phpMyAdmin ve Adminer Apache yapılandırmaları
apachectl configtest'te AH00671 uyarısı veriyordu: ikiAliasyönergesi ters sıradaydı, bu yüzden ikincisi hiçbir zaman eşleşemiyordu. - Üç konsol satırı metin yerine ham çeviri anahtarını yazıyordu.
Eklendi
- Açılışta güncelleme bildirimi — kurulu sürüm, yeni sürüm, sürüm notları kaydırılabilir bir liste olarak, ve o sürümü atlama ya da sonra hatırlatma seçeneği.
- Ayarlar'da kendine ait bir Güncellemeler sekmesi: kanal, şimdi denetle, otomatik denetim, otomatik indirme ve bir güncelleme bulunduğunda ne yapılacağı.
- İndirilen dosya, hiçbir şey açılmadan önce doğrulanıyor: güncelleme manifestinde yayınlanan sağlama, dosyanın gerçekten beklenen yayın varlığından geldiği (yönlendirmelerin ardından yeniden denetlenerek), kod imzası, Team Identifier'ın çalışan uygulamanınkiyle aynı olduğu ve Gatekeeper'ın noter onayı kararı. Herhangi biri geçmezse indirilen dosya siliniyor. BRAMPP kendini asla değiştirmiyor — doğrulanan disk kalıbı size veriliyor.
- Manifestteki
blockedVersionsveminimumOSalanları dikkate alınıyor, böylece sorunlu çıkan bir sürüm onu zaten çalıştıran kişileri uyarabiliyor. - Servisler'deki cloudflared satırında, açık bütün paylaşımları tek seferde durduran bir düğme — bunu zaten yapan menü çubuğu komutunun yanına.
Değişti
- Güncelleme denetimi sürümü ve sağlamayı yayınlanan manifestten, sürüm notlarını ise yalnızca GitHub'dan okuyor — dosyayı sunan makine, ona kefil olan makine değil. Manifest geride kaldığında denetim GitHub'a düşüyor ve doğrulanamayacak bir indirme yerine sürüm sayfasını öneriyor.
- Yayın betiği o manifesti kendisi yayınlıyor, gerçek sağlamayla ve yalnızca noter onayından gerçekten geçmiş bir yapı için.
- Kullanılmayan proje çatısı algılayıcısı kaldırıldı.
Ayrıntı: Değişiklikler
Apple Silicon, macOS 14+.
In English
The state BRAMPP keeps belongs to the machine, not to a process — and until this release a second copy of the app, or a test run, would walk all over it. Also: BRAMPP now tells you when there is a new version, and verifies the download five ways before it opens.
Fixed
- Running the unit tests — or simply having a second copy of BRAMPP open — tore down the live environment. Cloudflare tunnels were killed, their pid and log files deleted, the MCP port was bound on top of the copy already holding it, Homebrew services were started, and the "last running services" list was overwritten. The machine-wide state BRAMPP keeps belongs to the machine, not to a process; only the primary instance touches it now (
Core/ProcessRole.swift). Console lines also carry which process wrote them, because the installed app, an Xcode build, the test host and previews all append to one file — that is what made this so hard to see. - A share kept being reported as live after its cloudflared had died. The Services row stayed green, the MCP
list_sharestool still handed out the address, and Cloudflare answered Error 1033. Tunnels are now checked against reality on the refresh loop that was already running. - Quitting a second copy of BRAMPP killed the first copy's live tunnels. A quitting process now only stops the tunnels it started itself.
- "Stop sharing" reported success while the site stayed public. There was no SIGKILL escalation and the wait was 0.4 s against cloudflared's 30-second grace period.
- Restoring a database reported success when it had failed. The script ran
if psql …; then exit 0; fiand readrc=$?afterwards — in POSIX anifwhose condition fails and which has noelseexits 0, so the failure code was never seen. Both PostgreSQL and MariaDB. - Uninstalling MariaDB, PostgreSQL or Python said only that "the package and its config files will be removed" — while the script deleted the data directory: every database, or the whole site-packages tree. The confirmation now names the concrete paths, separates configuration from data, says what dies, and asks you to type the service name.
- The generated phpMyAdmin and Adminer Apache configs made
apachectl configtestwarn AH00671. The twoAliasdirectives were in the wrong order, so the second could never match. - Three console lines printed their raw translation key instead of text.
Added
- An update notice on launch — the installed version, the new version, the release notes as a scrollable list, and the choice to skip that version or be reminded later.
- A dedicated Updates tab in Settings: channel, check now, automatic checking, automatic download, and what to do when one is found.
- Downloads are verified before anything opens — the checksum published in the update manifest, that the file really came from the expected release asset (re-checked after redirects), the code signature, that the Team Identifier matches the running app's own, and Gatekeeper's notarization verdict. Any failure deletes the download. BRAMPP never replaces itself: the verified disk image is handed to you.
- The manifest's
blockedVersionsandminimumOSare honoured, so a release that turns out to be harmful can warn the people already running it. - A button on the cloudflared row in Services that stops every open share at once, next to the menu bar command that already did it.
Changed
- Update checking reads the published manifest for the version and the checksum, and GitHub only for the release notes — so the host that serves the file is not also the host that vouches for it. When the manifest lags behind, the check falls back to GitHub and offers the release page instead of an unverifiable download.
- The release script publishes that manifest itself, with the real checksum, and only for a build that was actually notarized.
- The unused project framework detector was removed.
Details: Changelog
Apple Silicon, macOS 14+.