Appearance
Bekannte Bugs
Aktive Issues + Workarounds. Wird händisch gepflegt; gemeldete Bugs landen im Posteingang bugs@funkwelt.net.
Aktiv
- Contest-Scoring (neu in v1.10.0) ist in Erprobung. Die komplett neu aufgebaute Wertungs-Engine ist noch nicht vollständig gegen offizielle Contest-Resultate validiert — Endpunktzahlen vor einer Einreichung prüfen. Noch ohne eigene Regeln (und daher mit 1 Punkt/QSO gewertet): ARRL RTTY Roundup, Russian DX, All Asian DX, JIDX. Für die IARU-HF-Wertung („gleiche ITU-Zone") muss die eigene CQ-/ITU-Zone in den Stations-Einstellungen gesetzt sein.
Behoben in v1.10.8
- WSJT-X lief nicht parallel zu HAM-Tools (User-Report HB9HJL). Solange HAM-Tools per CAT verbunden war, blockierte es den seriellen Port exklusiv — WSJT-X kam nicht ans Funkgerät. Jetzt kann HAM-Tools' eingebetteter rigctld als lokaler Server (
127.0.0.1:4532) offen gehalten werden, an den sich WSJT-X & Co. parallel anhängen (Einstellungen → CAT → »CAT teilen«). Der Server bleibt am Leben, auch wenn HAM-Tools die eigene Verbindung trennt. - Yaesu: TUNE löste keinen Tuner-Abgleich aus, sondern schaltete den Tuner aus (User-Report HB9HJL). Die TUN-Pille togglet den Tuner nur an/aus. Neu: ein separater TUNE-Knopf startet bei modernen Yaesu einen echten Abgleich (
AC002;). Bei Rigs ohne CAT-Tuner (FT-817/857/897) ausgeblendet — der genaue Tune-Befehl ist pro Profil überschreibbar.
Behoben in v1.10.7
- Moxon Rectangle lieferte ~24 % zu lange Antenne. Die Konstanten im Rechner stammten aus einer unverifizierten Quelle und führten zu einer Resonanz bei 11.4 MHz statt 14.2 MHz (20 m). Jetzt Cebik W4RNL MoxGen-Polynome drahtdurchmesser-abhängig — verifiziert gegen die offizielle Cebik-Wire-Moxon-Tabelle. Material-Picker Draht 2 mm / Alurohr 12 mm + Validitäts-Warnung außerhalb des Modellbereichs.
- POTA/WWFF/BOTA-ADIF-Export schrieb Multi-Park-Liste als Komma-Liste in MY_SIG_INFO. Die Upload-Plattformen pota.app / wwff.co / wwbota.net verlangen aber pro Aktivierungsziel ein eigenes File. Jetzt: pro Park/Ref/Bunker eine eigene ADIF mit single MY_SIG_INFO, Filename
{call}@{ref} YYYYMMDD.adi. Activator-Call überall einheitlich auf den Log-Aktivierer normalisiert (löst WSJT-X-„STATION_CALLSIGN gemischt"-Problem). - Spiderbeam Multi-Band Lel-Werte waren systematisch zu lang. 23 Tabellenwerte (5-Band, Low-Sun, WARC, Original) korrigiert nach DF4SA Bauanleitung v2.20 §2.3.2 („Lel = Tabellenwert − 8 cm" für isolierten Kupferlackdraht).
- Hexbeam-Rechner skalierte alle Bänder linear aus 20 m. Jetzt bandspezifische Werte direkt aus der WiMo HEX6B-Bauanleitung (G3TXQ Rev. V2.1) für 20/17/15/12/10/6 m, andere via Extrapolation.
- Spiderbeam-Einzelband konnte nur Flat-Yagi. V-Form-Modus mit Spreader-Halbarm ergänzt, Label „mm" → „cm" gefixt, Multiband-Armwerte angeglichen.
- HB9CV hatte keine Gamma-Match-Auslegung. Innenleiter-Ø, Abstand und Trimmer-Kapazität werden jetzt berechnet, plus Material-Toggle Rohr/Draht.
- Groundplane: Drift zwischen App und Web (1.02 vs 1.05) — beide jetzt einheitlich auf 1.02.
Behoben in v1.10.6
- Zweiter TRX verband nicht / „Port besetzt" (User-Report HB9HJI). Nach Crash, Force-Quit oder USB-Replug blieb ein rigctld-Prozess auf dem fest verdrahteten TCP-Port 4532 liegen und blockierte neue Verbindungen. Die App räumt verwaiste rigctld jetzt vor jedem Verbindungsaufbau auf (exakter Binary-Pfad-Match via libproc).
- Transceiver-Menü zeigte „CAT einschalten" trotz Verbindung. Der Eintrag richtete sich nach einem internen Schalter statt nach der echten Verbindung → „einschalten" obwohl verbunden, Klick trennte. Jetzt „CAT verbinden/trennen" nach tatsächlichem Zustand, konsistent mit dem Start/Stop-Button.
Behoben in v1.10.5
- IC-9700 verband nicht über CAT (User-Report HB9HJI). Hingen zwei Icom-Geräte mit CP210x-USB (IC-9700 + IC-7610) am selben Mac, waren ihre Ports im Picker nicht unterscheidbar (
usbserial-XXXXX) → es wurde der falsche gewählt, rigctld brach mit „Exit -1" ab. Der Port-Picker zeigt jetzt die USB-Identität (CP210x-Seriennummer). Dazu: echte rigctld-Fehlermeldung (Exit-Code + stdout/stderr) statt „kein stderr", Band-Plausibilitäts-Warnung bei unpassender Frequenz, Icom-Flusssteuerung immer None, CI-V-Platzhalter = Modell-Default.
Behoben in v1.10.4
Drei Fixes aus dem Live-Test (User-Reports HB9HJI) plus Export-Spec-Konformität:
- Laufende Nummer beim Bearbeiten nicht eingebbar. Der Contest-QSO-Editor hatte keine Felder für Serial/Exchange — jetzt sind S-Nr, Sent Exch und Recv Exch editierbar (wie die Spalten der Log-Tabelle).
- Contest-Rate viel zu hoch. „Rate 10/60 min" rechnete auf die Spanne seit dem ersten QSO im Fenster hoch (wenige dichte QSOs → absurde Werte). Jetzt feste Fensterbreite als Divisor (N1MM-Verhalten).
- DX-Cluster „Kont."-Filter filterte nach dem DX statt nach dem Spotter. „Kont. = EU" zeigt jetzt nur Spots von Spottern aus EU (Propagations-Sicht). Land-Spalte und Band-Activity bleiben beim DX-Kontinent.
- Export-Konformität (Cabrillo/ADIF/EDI). Cabrillo:
CATEGORY-MODE: SSBstattPH, neueCATEGORY-ASSISTED/CATEGORY-TRANSMITTER,LOCATION: DXfür internationale Calls, ungültigeCATEGORY-TIMEweggelassen. ADIF:MY_ANTENNAstatt des undefiniertenANTENNA. Cabrillo + EDI: CR-LF-Zeilenenden. Geprüft gegen WWROF-v3-, ADIF-3.1.5- und REG1TEST-Spezifikation.
Behoben in v1.10.3
- EDI-Export: falscher Wertungsblock bei UKW-Contesten. Im EDI-/REG1TEST-Export war das Bänder-Feld der Zähl-Zeilen falsch (
CQSOs=n;0stattn;1;CWWLs/CExcs/CDXCsohne drittes Feld). Entspricht jetzt VHF Managers Handbook + RUMlogNG-Referenz; gegen reale IARU-R1-145-MHz- und DARC-UKW-Logs geprüft. QSO-Zeilen, QRB-Distanzen und Punktsummen waren bereits korrekt.
Behoben in v1.10.2
Reines Feature-Release (neues „Letzte QSOs"-Panel in der DX-Sidebar) — keine Bugfixes.
Behoben in v1.10.1
Drei Fixes aus dem Live-Test von 1.10.0 (User-Reports HB9HJI):
- ATNO meldete fälschlich „NEW MODE". Im DX-Cluster zeigte die ATNO-Pille „NEW MODE" für Länder, die in SSB längst gearbeitet waren. Grund: Der aus der Frequenz abgeleitete Seitenband-Mode (
USB/LSB) wurde gegen den ADIF-ModeSSBaus dem Log verglichen. Seitenbänder werden jetzt zusammengefasst (USB/LSB = SSB, CWR = CW, RTTYR = RTTY). - FT8/FT4 wurde als SSB/USB angezeigt. Die Mode-Erkennung verlangte einen Treffer exakt auf die Dial-Frequenz; FT8-Signale liegen aber über das ~3 kHz breite NF-Passband oberhalb der Dial-QRG verteilt. Jetzt wird das ganze Passband erkannt, plus ergänzte Dial-Frequenzen für 4 m und 2 m FT4.
- QRZ-Bild-Bereich ließ das Eingabeformular springen. Ohne geladenes Bild hielt die Profil-Spalte ihre Breite nicht — die Felder sprangen nach rechts, mit Bild zurück nach links. Feste Bild-Box mit Platzhalter, kein Springen mehr. Neu: Klick aufs Bild öffnet es in dreifacher Größe.
Behoben in v1.10.0
Kern-/Refactor-Release — keine klassischen Bugfixes, aber zwei Scoring-Korrekturen, die mit der neuen Engine kommen:
- Kanton-/Distrikt-Multiplikatoren bei vollem Austausch. Steht der Multiplikatorwert als Token in einem mehrteiligen Austausch (z. B.
599 ZH,599 B07), wird er jetzt korrekt erkannt — zuvor wertete der Multiplikator das ganze Feld und zählte dadurch 0 (Helvetia/Weihnachtswettbewerb-Kantone, WAG-Distrikt). - USKA 50 MHz (CW/SSB): kein Großfeld-Multiplikator mehr. Endpunktzahl ist die reine km-Summe gemäß offiziellem USKA-Reglement (zuvor fälschlich mit Großfeldern multipliziert).
Behoben in v1.9.18
Contest-Scoring-Fix aus dem Live-Test (User-Report HB9HJI):
- Helvetia-Contest-Score komplett falsch berechnet. Ein 219-QSO-Log zeigte 411 Pkt × 23 Mult = 9 453 statt korrekt 1 328 × 110 = 146 080. Drei Fehler: (1) Punkte zählten HB-QSOs mit 1 statt 10 und alle Nicht-HB pauschal mit 3 statt 1 (gleicher Kontinent EU) / 3 (DX) — entgegen USKA-Reglement §2.7. (2) Der Multiplier wertete nur Kantone und deduplizierte sie global, statt Kantone UND DXCC-Länder je Band zu zählen. (3) Das Stats-Panel zeigte in der Summen-Zeile 23 statt 66 Kantone. Jetzt korrekt, mit neuer »Länd«-Spalte und robuster Länder-Auflösung (HB→Schweiz, sonst Feld, sonst Präfix). DXCC-Präfix-Tabelle um fehlende EU-Subpräfixe (DL-Block, BE, NL, PL, BY) erweitert.
- Export-Buttons in Outdoor-Logs zeigten das volle DX/Contest-Menü. In BOTA/POTA/SOTA/WWFF-Logs erschienen Cabrillo + EDI (und bei SOTA ADIF), obwohl die Portale andere Formate verlangen. Jetzt log-typ-spezifisch: SOTA → nur CSV, POTA/WWFF/BOTA → nur ADIF, Standard/Contest → ADIF + Cabrillo + EDI.
Behoben in v1.9.17
Critical-Hotfix aus dem Live-Test:
- Outdoor-Log-Anlage »Anlegen«-Button stumm disabled bei unbekannten Refs. Alle vier Outdoor-Wizards (BOTA/POTA/SOTA/WWFF) setzten zwingend einen DB-Match auf den eingegebenen Ref voraus. Neue Refs (noch nicht im gebundelten CSV) oder ungewöhnliche Schreibweisen führten zu
canCreate == false, aber der.borderedProminent-Button bleibt visuell aktiv — Klick passierte nichts. Jetzt reicht ein nicht-leerer Query, DB-Lookup ist Bonus für Auto-Fill. Orange Hinweiszeile wenn Ref nicht in DB. - Multi-Ref-Hopping-Sektion war versteckt bei ungelookupten Primär-Refs. Greift jetzt sobald ein nicht-leerer Primär-Query da ist.
Behoben in v1.9.16
UX-Hotfix aus dem Live-Test:
- Outdoor-Tab öffnete ohne Wahl direkt das POTA-Sheet. Wer SOTA, WWFF oder BOTA aktivieren wollte, musste den POTA-Wizard erst abbrechen und über den Sub-Picker neu navigieren. Jetzt zeigt sich beim Outdoor-Klick (wenn noch kein Outdoor-Log existiert) ein Programm-Picker mit allen vier Optionen.
- WWFF/BOTA-Logs wurden bei Outdoor-Klick ignoriert. Die »existiert schon ein Outdoor-Log?«-Prüfung checkte nur POTA und SOTA — wer ein WWFF- oder BOTA-Log hatte, sah trotzdem den POTA-Wizard. Reihenfolge ist jetzt POTA → SOTA → WWFF → BOTA, also wird zu jedem existierenden Outdoor-Log korrekt gewechselt.
Behoben in v1.9.15
Privacy-Hotfix — drei vergessene Setup-Reste mit dem Call des Autors, retroaktiv beim ersten Lauf des neuen Pre-Release-User-Daten-Checks aufgefallen:
- Sidebar-Subtitle »HB9HJI Funkwelt« hardcoded. Im Hauptfenster oben unter »HAM-Tools« stand der Call des Autors statt eines neutralen oder dynamisch übernommenen Werts. Jetzt aus den Station-Settings dynamisch, leer bei nicht-gesetztem Callsign.
- Previous-QSOs-Popover-Hilfetext nannte »HB9HJI« als Beispiel für Base-Call-Match-Erklärung. Auf generisches »DL1ABC« umgestellt.
- QTHLocator-Feld zeigte »JN47PN« als Placeholder ohne »z.B.«-Prefix — sah aus wie Default-Wert. Auf »z.B. JN47PN« vereinheitlicht.
Erweitert die Privacy-Welle aus v1.9.7 (damals fünf Stellen). Neuer Pre-Release-Check ist seit heute fester Pipeline-Schritt vor build-dmg.sh.
Behoben in v1.9.14
Outdoor-Logger-Polish + 1 selbst gemeldeter Bug:
- SOTA-Chaser-Logs konnten gar nicht als CSV exportiert werden. Der SOTACSVExporter prüfte »gibt es eigene Summits im Log?« und gab bei Chaser-Logs (logischerweise keine eigenen Summits) stumm eine leere File-Liste zurück. Du hattest also einen sauber geführten Chaser-Trip, aber kein CSV das du auf sotadata.org.uk hochladen konntest. Jetzt eigenes Chaser-Spalten-Schema + neues Pre-Export-Sheet mit Rollen-Picker.
- Per-Summit-Aktivierungs-Status war über alle Summits eines Logs summiert. Bei Multi-Summit-Hopping zeigte »12/4 — Aktivierung gültig«, obwohl jeder einzelne Summit für sich noch keine 4 QSOs hatte. SOTA-Regel ist aber pro Summit + UTC-Tag separat. Jetzt korrekt mit
SOTASessionStatus-Helper und Pro-Aktivierung-Pillen im Form. - WWFF-Aktivierungs-Status hatte den gleichen Bug (X/44 über alle Refs summiert), Hunter hatte gar keinen Live-Status. Jetzt analog gelöst mit
WWFFSessionStatus+ Hunter-Block »N Refs · M Programme · R2R K«. - POTA-Aktivierungs-Status ebenfalls (X/10 über alle Parks/Tage summiert). Identisch nachgezogen.
- BUG-20260522-2040-AW: »Felder nach QRZ-Lookup nicht alle korrekt« (HB9HJI, v1.9.12). Im Standard-Log blieb nach einem zweiten QRZ-Lookup das Feld »Country« mit dem Wert der vorigen Station hängen, andere Felder waren korrekt. Root cause:
clearCallbookFields()in QSOEntryPanel räumte 11 Felder,applyCallbookResult()schrieb in 12 —countrywar im Apply, aber nicht im Clear. Eine Zeile Fix + Symmetrie-Invariante explizit dokumentiert.
Behoben in v1.9.13
Contest-Saison-Cleanup + ein paar Spec-Stellen, die wir bisher kreativ ausgelegt hatten:
- Contest-ADIF schickte RST doppelt. STX_STRING/SRX_STRING enthielten zusätzlich zum dedizierten RST_SENT/RST_RCVD nochmal den Rapport (»59 LU«). USKA/DARC-Cross-Check verdoppelte das beim Auswerten. Jetzt nur noch das Exchange-Datum (Kanton/State/Grid/Zone) im STX_STRING/SRX_STRING.
- Cabrillo ohne T-Spalte (Cabrillo-3.0-Spec). Manche Contest-Robots wiesen die Files mit »Parse error: missing T-field at column 80« zurück, weil der Transmitter-ID-Wert am Zeilenende fehlte. Jetzt
0automatisch ans Ende — und gleich auchCREATED-BYvon hardcoded »HAM-Tools 1.5« auf dynamischBuildInfo.appVersionumgestellt. - ADIF: MY_GRIDSQUARE nur bei POTA/SOTA-QSOs. Bei normalen DX- und Contest-Logs fehlte das Feld komplett. LoTW machte deswegen für VHF-QSOs (wo das Feld pflicht ist) keinen QRB-Cross-Check, Club-Log konnte für manche Awards (WAB etc.) die geografische Zuordnung nicht herleiten. Jetzt für jedes QSO geschrieben, generisch aus den Station-Settings.
- Contest-Form: Cursor blieb nach Enter beim Exchange-Feld. Bei 100 QSOs pro Stunde merkbarer Klick-/Tab-Detour. Jetzt
@FocusStatemit Cursor-Rücksprung auf »Call« nach jedem Submit + Auto-Uppercase für Kanton/State/Grid/Zone (damit »so« nicht klein im Log landet). - USKA 50 MHz Contest-Template hatte falsches Datum + falsche Time-Category. Datum war auf das 2. Wochenende Juni statt 3., Time-Cat war 6 h statt 24 h. Plus Template-Name war nur »USKA 50 MHz« — jetzt »USKA / IARU R1 50 MHz Contest«, damit klar ist welche Regelwerks-Variante gilt.
- RadioControlPanel-Footer war seit 1.9.4 statisch. Stand permanent »Idle — nicht verbunden«, auch wenn die CAT-Verbindung längst stand. Ein TODO aus dem CAT-Refactor, das durch alle Bug-Reports gerutscht ist. Jetzt echter
CATController.Statusim Footer.
Behoben in v1.9.12
Feature-Release — reine Erweiterungen, keine Regressionen aus 1.9.11:
- Logbuch ADIF-Export war »alles-oder-nichts«. Bisher exportierte der »Export ADIF«-Button immer das komplette aktive Log. Für ein Lebens-Log mit ein paar tausend QSOs unpraktisch, wenn man nur einen Ausschnitt (Contest-Tag, letzte 50 QSOs für Club Log) hochladen wollte. Jetzt: ⌘-/⇧-Klick in der QSO-Tabelle markiert eine Auswahl, der Button wechselt zu »Export ADIF (N)« und schreibt nur diese N Zeilen.
- CAT-Panel hatte keine Slider für Volume und TX-Power. RUMlog/HamLog-Vorbilder zeigen AF/RF-Slider — wir hatten nur Mode/VFO/Split-Buttons. Jetzt zwei neue Slider zwischen S-Meter und Status-Badges. Drag-and-Release-Pattern: während des Ziehens läuft das Update lokal, beim Loslassen einmal ans Rig — spart Roundtrips.
- SWR war nirgendwo sichtbar. Bei jedem TX musste man aufs Rig-Display schauen, ob die Stehwelle okay ist. Jetzt SWR-Live-Balken im Panel während des Sendens, farbcodiert (≤ 1.5 grün, ≤ 2.0 gelb, > 2.0 rot).
- TX/RX-Badges waren Placeholder. Die zwei kleinen
RX/TX-Pillen neben demPWR-Wert hatten keinen Live-Read und blieben immer grau. Jetzt liest die App jeden Poll-Tick den PTT-Status (t-Befehl) und färbt die Badges entsprechend — egal ob die PTT vom Mikro, Data oder CAT kommt. - Keine schnellen DSP-Toggles. Standard-Funktionen wie Noise Blanker, Noise Reducer, Auto-Notch und Antennen-Tuner waren nur am Rig erreichbar — bei einer leise reinkommenden CW-Station verschwendet man Zeit am Knopf. Jetzt vier Toggle-Pills unter den Status-Badges, Klick togglet die Funktion am Rig.
Behoben in v1.9.11
Live-Test-Feedback aus 1.9.10 (5 Bug-Mails über In-App-Reporter):
- Previous-Popover fand keine /P-/M-/QRP-QSOs (BUG-20260521-2000-QP).
LogbookDatabase.findQSOs(matching:)verglich Calls exakt — wer als »HB9XYZ« suchte, fand keine »HB9XYZ/P«-Einträge, obwohl die im Log waren. Jetzt Base-Call-Match: längster Teil zwischen den »/«-Trennern wird auf beiden Seiten verglichen. Empty-State diagnostiziert zusätzlich »X Logs durchsucht · Base-Call-Match«. - »QSL-Bestätigungen abrufen« nur im QSL-Tab versteckt (BUG-20260521-1958-WJ). User suchten die Buttons in den Einstellungen, wo auch die Credentials liegen. Buttons jetzt gespiegelt in Einstellungen → Lookup & Upload → QRZ.com / LoTW, mit Hint »(auch im QSL-Tab verfügbar)«.
- Contest-Cluster fehlte Worked-Filter + Mult-Markierung (BUG-20260521-2005-CT). Im Contest-Modus erscheint jetzt eine Filter-Bar oben mit Toggle »👁 Gearbeitete ausblenden« + auffälligem grünem »MULT«-Badge neben Multiplikator-Kandidaten + Color-Legende. Erscheint nur bei
activeLog?.type == .contest. - Frequenz-Eingabe steuerte das Radio nicht (BUG-20260521-1937-SS). Das TextField im RadioControlPanel war editierbar,
commitFreqText()setzte aber nurradio.frequencyMHzlokal — keincat.setFrequencyMHz(). Der Poll-Loop überschrieb den Wert ~200ms später mit der echten Radio-Frequenz, aus User-Sicht »passierte nichts«. Jetzt sendet das Commit bei aktiver CAT die Frequenz ans Radio, mit optimistischem UI-Update um Flicker zu vermeiden. - USB-Port musste nach jedem Reboot neu gewählt werden (BUG-20260521-1954-YH). Bei FTDI/CP210x-Chips vergibt macOS dem Stick nach Boot ggf. ein anderes Pfad-Suffix; der gespeicherte Pfad war dann tot, Connect schlug stumm fehl. Neue
SerialPortDiscovery.resolve(stored:)-Logik: wenn der Pfad weg ist und genau ein USB-Serial-Port da ist, wird der automatisch übernommen + in CATSettings persistiert (Info-Toast »ℹ️ USB-Pfad migriert: alt → neu«). Bei Mehrdeutigkeit klare Fehlermeldung mit Kandidaten-Liste.
Behoben in v1.9.10
- LoTW-Pfad-Setup war terminal-lastig. Feld »tqsl-Binary« in den LoTW-Einstellungen war ein reines TextField — wenn die Auto-Detection die App nicht fand (TQSL.app statt Tqsl.app, ungewöhnlicher Installationsort, Homebrew), musste der User mit
mdfindoderfindim Terminal nach dem Pfad suchen. Jetzt »📁 Suchen…«-Button rechts neben dem Feld, der einen Finder-Picker öffnet und das Binary automatisch aus dem .app-Bundle extrahiert. - Yaesu Voice-Memory V5-Slot fehlte. TRX-Voice-Keyer-Reihe zeigte bei Yaesu-Profilen nur V1–V4, obwohl die unterstützten Modelle (FT-991/A, FT-710, FTDX-10, FTDX-101D/MP) hardware-seitig 5 Slots haben. Fünfter Button ergänzt — der Code-Kommentar wies sogar selbst auf das »wir mappen nur 4«-TODO hin. ICOM bleibt unverändert bei 4 Slots (Hardware-Limit).
Behoben in v1.9.9
- Schedules-Tab war Platzhalter ohne Inhalt. Tab-Bar zeigte »Schedules« mit Calendar-Icon aber disabled-Tooltip »kommt in späterer Phase«. Tab ist jetzt voll implementiert: Skeds + DX-Events mit Countdown, QSO-Form-Pre-Fill, Cluster-Filter, Status-Menü und macOS-Notifications. Persistiert in
~/Documents/HAM-Tools/Cache/schedules.json. Doku unter Module → Schedules.
Behoben in v1.9.8
- TRX-Voice-Keyer-UI war ICOM-only. V1–V4-Buttons in DX/Contest/Outdoor-Forms zeigten »ICOM Voice / IC-7300/7610/9700/705« und waren stillschweigend nur für ICOM gedacht — Yaesu/Kenwood/Elecraft-User konnten nicht klicken um zu sehen ob ihr Hamlib-Backend das mittlerweile unterstützt. Jetzt markenspezifische Anzeige, Buttons immer aktiv solange CAT verbunden ist.
- RPRT -11 in der Status-Zeile war kryptisch. Bei Voice-Memory-Aufrufen, die das Hamlib-Backend nicht implementiert, kam »sendVoiceMem abgelehnt: RPRT -11«. Jetzt verständliche Meldung: »Funktion wird vom Hamlib-Backend für dieses TRX-Modell (noch) nicht unterstützt.«
Behoben in v1.9.7
- Privacy-Leck: DXCluster-Default-Callsign war hardcoded
HB9HJI, QTH-Locator hardcodedJN47PNan fünf Stellen (Cluster, Weltkarte 2×, QTH-Locator, Grayline), und der API-User-Agent enthielt »HAMTools/2.0 HB9HJI«. Bei Erstinstallation ohne Eintrag in Station-Settings starteten andere User mit Autor-Identität in Cluster-Login + Distanz-Berechnung; bei jedem API-Request an pota.app/sotadata.org.uk/wwff-cc.org wurde der Autor-Call im HTTP-Header mitgeschickt. Alle Defaults auf "" gesetzt, User-Agent jetztHAMTools/<appVersion>. - Cluster-Spot-Zeit-Mismatch (BUG-20260520-1945-JS): Spot-Liste zeigte je nach Quelle Mac-Lokalzeit, RBN-Skimmer-»UTC«-Strings mit lokalem Inhalt, oder gar gar keine Zeitzone. Jetzt rendert
DXSpot.displayTimeimmer aus dem timestamp-Date in UTC (HHmmZ). - Mode-Multi-Select + Band-Sortierung (BUG-20260520-1943-G8): Mode-Filter war Single-Pick, jetzt Multi-Select (
Set<String>mit Migration). Band-Filter-Liste sortiert nach Wellenlänge statt alphabetisch. - TRX-Setup-Submenu schließt sich (BUG-20260520-1942-B3): CATController als
@ObservedObjectin TransceiverCommands triggerte sekündliche CommandMenu-Rebuilds durch den Status-Poll-Loop. Jetztlet-Reference, Status wird nur beim Klick gelesen. - Spot-Cap zu klein (BUG-20260520-1942-AA):
SpotPersistence.maxSpots500 → 2000. An Contest-WE mit 4+ DXSpider-Knoten waren 500 in ~50 s voll. - Grayline-Performance (BUG-20260520-1940-33): nightCells war computed property → 2592 Polygon-Constructions pro Body-Render. Jetzt @State-Cache mit Recompute nur in onAppear/onChange. Plus Grid-Step 5° → 10° (648 statt 2592 Polygone).
Behoben in v1.9.6
- LoTW: Station-Location-Picker fand keine in tqsl 2.5+ konfigurierten Locations, weil nur der alte Pfad
~/Library/Application Support/TrustedQSL/station_data.xmlversucht wurde — aktuelles tqsl legt sie unter~/.tqsl/station_data.xmlab. Zweiter Pfad-Kandidat ergänzt; Picker zeigt jetzt automatisch was in tqsl-GUI eingerichtet wurde. - LoTW: tqsl-Exit-Codes 9 und 10 waren vertauscht. Ein Tester mit falsch eingegebener Station-Location bekam »LoTW-Server nicht erreichbar« statt der korrekten »Location nicht gefunden«-Meldung. Mapping aus tqsl 2.8.4 Live-Test verifiziert: 9 = CONNECTION_FAILED, 10 = COMMAND_ERROR.
- LoTW: »Station Location X could not be found« landete im generischen CLI-Argument-Fehler-Branch und zeigte einen wenig hilfreichen Text. Eigene Klartext-Erkennung im interpret() gibt jetzt direkt »in Einstellungen → LoTW prüfen« aus.
Behoben in v1.9.5
- LoTW-Upload meldete »Netzwerk: LoTW-Server nicht erreichbar« obwohl der Upload tatsächlich erfolgreich war. Ursache: das Wort »Connection« in einer tqsl-Zwischen-Logzeile triggerte den Network-Branch im interpret(). Erfolgs-Klartext-Match (»uploaded successfully« / »queued for processing«) läuft jetzt VOR den Netzwerk-Heuristiken. Zusätzlich startet der Subprocess jetzt mit explizitem HOME/PATH + cwd=$HOME (manche App-Sandboxing-Szenarien lieferten ein leeres Environment, das tqsl verwirrte). Fehler-Alerts zeigen jetzt die letzten 500 Zeichen der tqsl-Rohausgabe als Diagnose-Hilfe.
Behoben in v1.9.4
- LoTW-Upload: tqsl-Exit-Codes waren auf das alte 1.x-Schema (0/3/4/6) gemappt — die aktuelle tqsl-2.5+-Version benutzt Codes 0–11 mit komplett anderer Semantik. UploadOutcome bei Erfolg/Duplikat/Network-Fehler war daher unzuverlässig. Codes neu nachgezogen aus tqsl-Source (apps/tqsl.cpp), Duplikate werden zusätzlich per Text-Match in stdout erkannt (tqsl 2.5+ signalisiert sie nicht mehr per Exit-Code).
Behoben in v1.9.3
- Startcrash auf macOS 26.3.x: HAM-Tools.app crashte unmittelbar nach Login mit
EXC_BREAKPOINTinSCPService.loadRawFile. Ursache war ein vergessenerBundle.module-Direktaufruf — der tolerantenAppResource-Helper (aus 1.8.16 für genau diese Klasse von Bugs gebaut) wurde im neuen Contest-SCP-Code übersehen. Jetzt umgestellt; SCPService findet dieMASTER.SCP-Datei jetzt unabhängig vom Bundle-Format (flat oder canonical Contents/-Layout). Tester die nach 1.9.2 nicht mehr starten konnten: 1.9.3 manuell laden, danach läuft Auto-Update wieder normal.
Behoben in v1.9.2
- Rechte Sidebar sprang nach dem 1.9.1-Release weiterhin auf wechselnde Breiten, sobald man zwischen Contest und Standard/Outdoor wechselte. Ursache: HSplitView identifizierte
ContestStatsPanelundPropagationPanelViewals zwei verschiedene Child-Views und resettete den Splitter bei jedem Wechsel. Beide Panels sitzen jetzt in einem gemeinsamen Outer-VStack, der Frame-Modifier sitzt außen — HSplitView sieht damit stets dieselbe View-Identity. Frame zusätzlich nochmal enger gezogen (min 230 / ideal 255 / max 290). - ICOM-Voice-Keyer-Marken-Einschränkung war nur per
.help()-Tooltip am Text-Label sichtbar. SwiftUI auf macOS triggert den Hover-Tooltip auf reinen Text-Views unzuverlässig — User sahen die Einschränkung deshalb nicht. Modell-Liste jetzt inline als zweiter Text-View neben „ICOM Voice":IC-7300/7610/9700/705.
Behoben in v1.9.1
- Light-Theme: CAT-Frequenzanzeige war schwarz-auf-schwarz unsichtbar — Vordergrund hing an
theme.textPrimary(fast schwarz), Hintergrund antheme.bgLog(fast schwarz). Wechsel auftheme.logText(grünes Radio-Display) macht die Anzeige in allen Themes konsistent lesbar. - Light-Theme: Sidebar-Headlines (DX-Spot senden, Propagation, Solar-Daten, Eigene Spots, Band Activity) waren in hellem Pastell-Gold auf weißem Panel kaum lesbar. Im Light-Theme jetzt
theme.accentOrange(#E07000) als Headline-Ton; Dark/Ham Classic bleiben unverändert beim klassischen Gold, Matrix nutzt das Cyan-Akzent. - Contest-Wizard speicherte die im Cabrillo-Picker gewählte Band-Kategorie nicht — Wert ging beim Anlegen verloren, Cluster-Filter und Cabrillo-Export fielen immer auf den Template-Default zurück. Schema-v12-Migration ergänzt
log_meta.contestBandCategory, alle drei Konsumenten (Cluster-Tab, Export-Sheet, Stats-Panel) lesen jetzt zuerst den Log-Wert. - Rechtes Panel sprang beim Wechsel zwischen DX/Outdoor/Contest auf bis zu 340px („zu breit"). Beide Sidebar-Varianten (Propagation, Contest-Stats) nutzen jetzt identische Frame-Werte (min 250 / ideal 285 / max 320), HSplitView kann nicht mehr an den oberen Anschlag ziehen.
- „Band Activity"-Headline brach bei schmaler Sidebar zweizeilig um (Picker mit
width: 100ließ nicht genug Platz).lineLimit(1)+ Picker auf 88px verschmälert — Headline bleibt zwingend einzeilig.
Behoben in v1.9.0
- DX-Cluster Heatmap-Picker (Band Activity, rechtes Panel): Die 15/30/60-Min-Auswahl wirkte nur visuell — die Zahlen in der Heatmap rechneten weiter mit dem alten Wert. Picker im Panel und
bandMatrix-Berechnung waren über zwei unabhängige States entkoppelt. Jetzt computed property direkt im Panel, AppStorage-basiert. Zusätzlich »5 min«-Option, damit man bei vollem Cluster (~500 Spots in der 15-Min-Retention) überhaupt einen Unterschied sieht. - App war auf Englisch nicht startbar (war auch nie wirklich englisch). Drei Bugs gleichzeitig: SwiftPM kompiliert das String-Catalog nicht automatisch in die runtime-fähige Form; die generierten Lokalisierungs-Dateien landeten nur im SwiftPM-Sub-Bundle (für SwiftUI unsichtbar); Info.plist fehlten die CFBundleLocalizations-/DevelopmentRegion-Einträge. Alle drei Stellen gefixt — Sprach-Picker im Darstellungs-Tab tut jetzt was er soll.
- DX-Map QTH-Zentrierung griff nach interaktiver Camera-Bewegung nicht:
MapCameraPosition.regionwurde von SwiftUI als »gleich« verworfen wenn der User die Karte vorher manuell verschoben hatte. Jetzt mit.camera(MapCamera(...))-Snapshot, animiert sauber zurück zum eigenen QTH.
Behoben in v1.8.16
- Callbook-Lookup: Beim Klick auf einen neuen Cluster-Spot oder bei manuellem Call-Wechsel + Tab blieben First/Last/Street/City/State/Email/Locator/Zonen der vorigen Station stehen, obwohl Bild und Header schon die neue Station zeigten.
applyCallbookResultfüllte nur leere Felder; jetzt räumt ein gemeinsamer Helper vor jedem frischen Lookup auf. - Radio/CAT-Frequenz-Anzeige: rechtes Segment war nur 2-stellig (10-Hz-Auflösung) — »7.095.00«. Jetzt 3-stellig mit voller 1-Hz-Auflösung: »7.095.000«.
- Programm-Maps (POTA/SOTA/WWFF/BOTA) hatten dasselbe MapKit-Stall-Risiko wie der History-Tab vor 1.8.15. Hard-Cap + Overflow-Banner ist jetzt auf alle Programm-Maps ausgedehnt.
Behoben in v1.8.15
- History-Tab-Crash: Bei »Zeitraum = Alle« und einem großen Standard-Log konnte die App beim Klick auf den History-Tab komplett »verschwinden« — Prozess lief weiter, aber kein Fenster wurde mehr sichtbar. Ursache: MapKit-Render-Stall durch zu viele Annotations + Polylines. Drei Schutzschichten: Hard-Cap auf 1500 Annotations, Linien-Limit 500, »Alle«-Option im Zeitraum-Picker entfernt (Max »2 Jahre«).
Behoben in v1.8.13
- Auto-Update-Check meldete »HAM-Tools ist aktuell«, obwohl auf dem Server eine neuere Version bereitstand —
isNewerBuild()verglich nur das Build-Datum als String, Hotfix-Releases vom selben Tag (1.8.11 → 1.8.12 → 1.8.13) wurden so nicht erkannt. Jetzt numerischer Semver-Vergleich primär, Build-Datum nur als Tiebreaker. Wirkt ab dem 1.8.13-Build — wer auf 1.8.12 oder älter sitzt, muss einmalig manuell aus/app/dmg/latest.dmgupdaten. - Multi-Cluster: Host- oder Port-Änderungen an einem bereits aktiven Cluster-Node wurden vom Pool-Resync ignoriert (alter Client lief weiter).
applyActiveNodes()macht jetzt einen Field-Diff und startet betroffene Clients gezielt neu.
Behoben in v1.8.12
- App-Startcrash auf macOS 26.5 (echte Ursache): macOS 26.5's
Bundle.init(url:)liefert für SwiftPM-Resource-Bundles bei manchen Setups nil —Bundle.modulegreift dann auf seinenfatalError-Fallback zurück und die App crashed direkt inBOTARefService.init. Der 1.8.11-Fix (Bundle-Format kanonisch umbauen) hat das nicht behoben. Ab 1.8.12 wirdBundle.modulekomplett umgangen: ein neuerAppResource-Helper sucht das Resource-Bundle selbst, toleriert verschiedene Bundle-Layouts und gibt nil statt zu crashen.
Behoben in v1.8.11
- App-Startcrash auf macOS 26.5 (erster Versuch — siehe v1.8.12 für die echte Behebung): Bundle-Format-Korrektur in
build-dmg.sh. Brachte allein noch keinen Erfolg, ist aber für saubere Code-Signing-Hygiene weiter im Build drin.
Behoben in v1.8.10
- POTA-ADIF-Upload abgelehnt mit „Only a single STATION_CALLSIGN value is supported per log file" — beim FT8-Loggen über WSJT-X-Spots konnte mid-session der
my_callvon Home- auf Portable-Call wechseln (z.B.HB9HJI↔IT/HB9HJI/P). Jetzt zwei Sicherungen: WSJT-X-Importer nimmt für Outdoor-Logs immer das im Log-Wizard gewählte Aktivierungs-Rufzeichen; zusätzlich vereinheitlicht der POTA-Export auch alte gemischte Logs. - Mode-Picker im Radio/CAT-Panel war ohne CAT-Verbindung gedimmt und nicht klickbar — Loggen ohne Funkgerät (z.B. Remote/Reise-Setup) war damit auf den zuletzt aktiven Mode festgenagelt. Jetzt immer klickbar; ohne CAT zusätzlich FT8/FT4/JT65/JT9/PSK31/JS8/Q65/MSK144 wählbar (Hamlib kennt diese nicht direkt — laufen am TRX über PKTUSB).
Behoben in v1.8.9
- Club-Log-Upload: 403 Forbidden bei Email-Adressen mit
@und anderen Sonderzeichen — Form-Encoding war nicht RFC-3986-konform und wurde von Club Logs nginx-WAF blockiert. Jetzt strikt RFC-3986-kodiert. - Standard-DX-Log warnte bei Mehrfach-Logs desselben Calls (Lebens-Log/Stammrunde/Tages-Log) mit „Schon gearbeitet" — dort sinnlos. Dupe-Warnung jetzt nur noch in Programm-Logs (POTA/SOTA/WWFF/BOTA) und Contest.
Behoben in v1.8.8
- POTA-ADIF-Upload wurde von pota.app abgelehnt — Export verwendete das ältere nicht-dokumentierte Feld
MY_POTA_REF. Jetzt standardkonform mitMY_SIG=POTA+MY_SIG_INFO. - WWBOTA-ADIF: alter Stub erzeugte kein hochladbares File — jetzt offizielles Format mit
MY_SIG=WWBOTAund Komma-Liste inMY_SIG_INFOfür Multi-Bunker. - POTA Multi-Park-Hopping: pota.app verweigerte Komma-Listen in
MY_SIG_INFO— Export schreibt jetzt automatisch eine eigene Datei pro Park. - QRZ-Auto-Fill in POTA/SOTA/WWFF/BOTA-Logs übernahm nur den Namen, der Rest blieb leer — ADIF war DXCC-unvollständig. Jetzt zusätzlich QTH, Locator, Country, Continent, CQ-/ITU-Zone.
- Hopping-Feld beim Log-Anlegen zeigte nur Häkchen ohne Kontext — jetzt voller Name + Details (Park/Summit/Bunker) pro Eintrag.
- Bandplan war beengter Sub-Tab im Logbuch — jetzt eigenes Fenster (⌘⇧P, Menü Fenster → Bandplan-Fenster).
Behoben in v1.8.7
- Update-System verglich die macOS-Mindestversion als String — „10.9" hätte fälschlich als höher als „10.15" gegolten. Jetzt strikt numerischer Versionsvergleich.
- Inkompatibler Update-Dialog zeigte aktivierbaren „Download öffnen"-Button, obwohl die DMG auf dem System nicht laufen würde. Jetzt deaktiviert mit klarer Begründung.
Behoben in v1.8.6
- FAQ-Link „Updates rückgängig machen?" verwies auf
/app/dmg/— der Pfad lieferte 403 statt eines Versions-Listings. Jetzt Verzeichnis-Index aller DMG-Versionen. - Top-Nav-Download zeigte auf eine versionsspezifische DMG und veraltete bei jedem Release — jetzt versionsloses
latest.dmgmit Auto-Symlink.
Behoben in v1.8.5
- Bandmap als Sub-Tab im Logbuch eingeschränkt — jetzt zusätzlich als Pop-up-Fenster pro Band öffenbar, mehrere parallel auf einem Zweitmonitor sichtbar.
- DX-Propagation: keine globale Tag/Nacht-Sicht — neue Grayline-Karte als eigenes Fenster.
- Einstellungs-Zahnrad in der Logbuch-Top-Bar wurde schnell übersehen — entfernt, Einstellungen jetzt über das App-Menü "HAM-Tools → Einstellungen…" (⌘,) bzw. das Transceiver-Menü.
Behoben in v1.8.4
- CAT-Verbindung trennte sich nach einem QSY oder Mode-Wechsel — Race-Condition zwischen Poll-Loop und Write-Operationen auf demselben rigctld-TCP-Socket. Neuer Client-Lock im CATController serialisiert alle Operationen.
- Spot-Klick wechselte zwangsweise vom DXClusters- in den Log-Sub-Tab. Du bleibst jetzt, wo du bist — der Draft füllt sich im Hintergrund.
- DX-Cluster-Tabelle zeigte „SSB" als Mode, obwohl LSB/USB band-abhängig korrekt ableitbar ist (jetzt automatisch).
- "Einstellungen…"-Eintrag im Transceiver-Menü reagierte nicht (alter NSApp-Selector durch SwiftUI-API ersetzt).
- 13"-MacBook-Air-Layout: rechte Sidebar (Propagation/Solar/Band Activity) passte nicht auf den Bildschirm, man musste scrollen.
Behoben in v1.8.3
- BOTA-Map Sub-Tab erschien fälschlich im Standard-DX-Log (nur im BOTA-Programm-Log sinnvoll)
- "Neuer Contest"-Sheet war zu klein → Buttons "Abbrechen / Anlegen" im Kategorien-Schritt abgeschnitten
- POTA-Spalten "State" und "Their Park" wurden im Standard-Log angezeigt, obwohl sie nur in POTA-Logs Sinn ergeben
- Spalten-Auswahl der QSO-Tabelle war nur via Header-Rechtsklick erreichbar → neuer "Spalten"-Button in der Toolbar mit allen 32 Spalten + Reset
- Spot-Tabellen (DX/POTA/SOTA/BOTA/WWFF) hatten keine Reorder-/Hide-Show-Funktion → komplett auf SwiftUI Table umgestellt
Behoben in v1.7.1
- Cluster-Click füllte das Contest/POTA-Form nicht — Race-Condition zwischen QSOEntryPanel und dem spezialisierten Form
- Mode-Picker im Contest zeigte alle Modes statt nur die zur Cabrillo-Mode-Kategorie passenden
- "Neu…"-Button für CAT-Config kopierte den Serial-Port nicht mit
- DX-Cluster im Contest zeigte Spots in allen Modes statt nur Contest-Mode
Behoben in v1.7.0
- Sidebar mit 42 Tools war unübersichtlich → 3 Top-Punkte (Logbuch / DX-Cluster / Rechner) mit Akkordeon
- Bandplan war eigener Sidebar-Eintrag → in Logbuch-Sub-Tab verschoben
- DX-Cluster verband erst beim Tab-Klick → jetzt global beim App-Start
Bug melden
In der App: Cmd+Shift+B oder Menüleiste → Hilfe → Bug melden… Per Mail: bugs@funkwelt.net