Jak działa FlyingFiles
Ta strona jest dla ciekawych i dla administratorów, którzy chcą wiedzieć, co program robi z plikami, hasłami i siecią, zanim go zainstalują.
W skrócie
FlyingFiles to natywny program na macOS i Windows. Działa wyłącznie na Twoim komputerze.
Nie ma serwera pośredniczącego ani konta. Pliki idą bezpośrednio między Twoim komputerem, Twoimi dyskami i Twoimi serwerami.
Strona
nci.plsłuży do pobrania programu na macOS i — na Twoje żądanie — do sprawdzenia aktualizacji. Wersję dla Windows dostarcza i aktualizuje Microsoft Store.
flowchart LR
subgraph PC["Twój komputer"]
APP["FlyingFiles"]
DISK["Dyski, pendrive'y,<br/>udziały sieciowe"]
KEY["Pęk kluczy /<br/>Menedżer poświadczeń"]
TERM["Terminal systemu"]
end
SRV["Twoje serwery<br/>FTP · FTPS · SFTP"]
NCI["nci.pl<br/>pobranie i aktualizacje macOS"]
STORE["Microsoft Store<br/>instalacja i aktualizacje Windows"]
APP <--> DISK
APP <--> KEY
APP --> TERM
APP <--> SRV
APP -. "na żądanie" .-> NCI
STORE -. "Windows" .-> APP
Budowa programu
FlyingFiles jest napisany w C# na platformie .NET 10, z interfejsem Avalonia 12. Ten sam kod działa na obu systemach; kod specyficzny dla systemu jest wydzielony w jednym miejscu.
Program składa się z trzech warstw:
| Warstwa | Za co odpowiada |
|---|---|
| Core | systemy plików (dysk, archiwa), kopiowanie i przenoszenie, skanowanie konfliktów, archiwa, podgląd, wyszukiwanie, porównanie, statystyki, reguły .ffignore, ustawienia, tłumaczenia |
| Network | FTP i FTPS (biblioteka FluentFTP), SFTP (SSH.NET), odczyt i zapis haseł w magazynie systemu |
| App | okna i panele (wzorzec MVVM), klawiatura, integracja z systemem: Kosz, Finder i Eksplorator, programy skojarzone z plikami, Terminal, instalacja i aktualizacje |
Kompilacja do kodu natywnego
Program jest kompilowany z wyprzedzeniem (Native AOT) do pliku wykonywalnego dla danego procesora. Dzięki temu:
nie trzeba instalować .NET,
program startuje w ułamku sekundy,
zajmuje mniej pamięci niż aplikacja z interpreterem.
Interfejs, który nie zamarza
Każda operacja na dysku i w sieci działa w tle, a interfejs tylko pokazuje postęp. Nawet listowanie katalogu na zawieszonym udziale sieciowym nie blokuje okna. Każda operacja, która może potrwać, ma okno postępu i działający przycisk Anuluj.
Jeden model dla wszystkich miejsc
Dysk lokalny, archiwum, serwer FTP i serwer SFTP mają w programie wspólny interfejs systemu plików: listowanie, odczyt, zapis, tworzenie katalogów, usuwanie, zmiana nazwy. Panel, kopiowanie, podgląd, wyszukiwanie i porównanie korzystają tylko z tego interfejsu. Dlatego:
kopiowanie działa w każdej kombinacji: dysk → serwer, serwer → archiwum, serwer → serwer;
archiwum zachowuje się jak katalog — program rozpakowuje je do prywatnego katalogu tymczasowego, a zmiany pakuje z powrotem przy wyjściu;
wyszukiwanie i statystyki działają tak samo na dysku, w archiwum i na serwerze.
Jak przebiega kopiowanie
Reguły
.ffignore— elementy objęte regułami źródła i celu są odfiltrowane.Sprawdzenie celu — nie da się skopiować elementu na niego samego ani katalogu do jego podkatalogu.
Skan — program jednym przejściem zbiera listę plików, sumę bajtów i konflikty. Przy serwerach zapamiętuje listingi katalogów docelowych, żeby nie pytać serwera o każdy plik osobno.
Decyzja o konfliktach — okno z wyborem: nadpisz wszystkie, nadpisz starsze, pomiń duplikaty, anuluj.
Kopiowanie porcjami po 256 KB, z postępem:
przenoszenie w obrębie jednego dysku to zmiana nazwy — natychmiastowa;
zapis na dysk idzie do pliku tymczasowego obok celu i dopiero na końcu zastępuje plik docelowy, więc przerwanie nie zostawia połówki pliku;
błąd jednego pliku nie przerywa całości — plik trafia na listę nieudanych z przyczyną.
Po zakończeniu — opcjonalne sprzątanie plików metadanych macOS, odświeżenie paneli, podsumowanie, lista nieudanych i wpis w dzienniku transferów.
Przy serwerach
Ponawianie po przekroczeniu czasu i ponowne łączenie po zerwaniu, z powrotem do tego samego katalogu.
Sprawdzenie kompletności — po błędzie program porównuje rozmiar pliku na serwerze. Plik kompletny uznaje za gotowy, a gdy stanu nie da się ustalić, nie ponawia w ciemno, żeby nie nadpisać dobrej kopii.
Weryfikacja SHA-256 (opcjonalna) — suma pliku źródłowego jest porównywana z sumą kopii. Na SFTP program próbuje policzyć sumę na serwerze (
sha256sum,shasum,openssl), a gdy konto na to nie pozwala, czyta kopię z powrotem.Anulowanie — plik wysłany w połowie jest usuwany z serwera, a pobieranie nie zostawia śmieci na dysku.
Dane i bezpieczeństwo
Co program zapisuje
| Co | Gdzie |
|---|---|
| ustawienia, zapisane połączenia (bez haseł), skróty ścieżek, terminale | settings.toml w katalogu ustawień — macOS: ~/Library/Application Support/FlyingFiles/, Windows: %APPDATA%\FlyingFiles\ |
| kopie zapasowe ustawień | settings.toml.bak.0 … .bak.5 obok |
| hasła do serwerów FTP/SFTP | pęk kluczy macOS / Menedżer poświadczeń Windows, usługa FlyingFiles FTP |
| dziennik transferów | logs/transfers.log w katalogu ustawień |
| adresy udziałów sieciowych (macOS) | network-mounts.toml w katalogu ustawień |
| rozpakowane archiwa | prywatny katalog tymczasowy systemu, usuwany po zamknięciu archiwum |
Hasła
Hasła są przechowywane wyłącznie w systemowym magazynie haseł — pęku kluczy macOS albo Menedżerze poświadczeń Windows. System szyfruje je i pilnuje, który program może je odczytać.
Plik ustawień nigdy nie zawiera haseł.
Program czyta hasło dopiero przy łączeniu z danym serwerem albo przy edycji połączenia, nie przy starcie.
W dzienniku rozmowy z serwerem hasło jest zamaskowane (
PASS ********).
Plik ustawień
Zapis jest atomowy (plik tymczasowy, potem podmiana), z blokadą chroniącą przed jednoczesnym zapisem z dwóch okien.
Na macOS plik ma uprawnienia tylko dla właściciela (
0600), bo zawiera adresy serwerów i loginy.Program przy odczycie toleruje brakujące i nieznane klucze, a przy zapisie zachowuje klucze, których nie zna — ręczne dopiski i ustawienia starszych wersji nie giną.
Przed zapisem powstają kopie zapasowe.
Terminale
Adres i nazwa użytkownika terminala mogą zawierać tylko bezpieczne znaki (litery, cyfry, ., -, _, : i nawiasy adresów IPv6). Dzięki temu zapisany wpis nie może przemycić dodatkowego polecenia do terminala.
Znane ograniczenia bezpieczeństwa
Certyfikat serwera FTPS nie jest weryfikowany, a klucz hosta SFTP jest akceptowany bez sprawdzenia z listą znanych hostów. Szyfrowanie chroni przed podsłuchem, ale nie przed podstawionym serwerem.
Zwykły FTP nie szyfruje niczego — ani hasła, ani plików.
Dystrybucja i aktualizacje
macOS
Program jest podpisany certyfikatem Developer ID, działa z włączonym Hardened Runtime i jest notaryzowany przez Apple. Bilet notaryzacji jest dołączony do programu i do obrazu
.dmg, więc system może go sprawdzić bez sieci.Program ma jedno dodatkowe uprawnienie: sterowanie innymi aplikacjami (Apple Events) — wyłącznie po to, żeby otworzyć połączenie SSH albo Telnet w aplikacji Terminal. macOS pyta o zgodę przy pierwszym użyciu.
Uruchomiony z obrazu program sam kopiuje się do
~/Applications. Instalacja w katalogu użytkownika sprawia, że aktualizacje nie wymagają hasła administratora.Aktualizacje (biblioteka Velopack) pobierane są na żądanie z katalogu
https://nci.pl/flyingfiles/releases/osx-arm64/przez HTTPS. Program sprawdza listę wydań, pobiera pakiet, podmienia się i uruchamia ponownie. Program w pakiecie jest podpisany tym samym certyfikatem Developer ID i notaryzowany jak przy pierwszej instalacji.
Programu nie ma w Mac App Store: piaskownica sklepu nie pozwala na swobodne poruszanie się po całym dysku ani na sterowanie Terminalem — czyli na to, do czego menedżer plików służy.
Windows
Program jest wydawany jako pakiet MSIX w Microsoft Store. Pakiet podpisuje Microsoft, więc instalacja przebiega bez ostrzeżeń SmartScreen.
Aktualizacje instaluje Microsoft Store. Program rozpoznaje, że działa z pakietu Sklepu, i wyłącza własny mechanizm aktualizacji.
Program działa jako zwykła aplikacja Windows z uprawnieniami Twojego konta. Nie potrzebuje specjalnych zgód na dostęp do plików, a ustawienia trzyma w zwykłym
%APPDATA%\FlyingFiles.
Prywatność z założenia
Brak telemetrii, analityki, kont i reklam.
Połączenia sieciowe programu to wyłącznie: Twoje serwery FTP/FTPS/SFTP, Twoje udziały sieciowe oraz — gdy wybierzesz Sprawdź aktualizacje… (macOS i dawna beta dla Windows z pliku
Setup.exe) —nci.pl.Podgląd nagrań korzysta z systemowego QuickLook na Twoim komputerze; nic nie jest wysyłane.
Pełny tekst: polityka prywatności.
Języki
Wszystkie teksty interfejsu są w jednym pliku tłumaczeń, po polsku i po angielsku. Każdy tekst istnieje w obu językach, co sprawdzają testy automatyczne. Język zmienia się od razu, bez ponownego uruchomienia.
Jakość
Ponad 1700 testów automatycznych sprawdza logikę programu i okna — także bez ekranu — na macOS i na Windows.
Każda poprawka błędu zaczyna się od testu, który ten błąd pokazuje.
Obsługa FTP i SFTP jest dodatkowo sprawdzana na prawdziwych serwerach osobnym narzędziem, które przechodzi listę operacji: łączenie, listowanie, wysyłanie, pobieranie, weryfikację, anulowanie i ponowne łączenie.
Historia
Do wersji 0.1.0 FlyingFiles był aplikacją w Pythonie z interfejsem Qt. We wrześniu 2026 program napisano od nowa w C#, według szczegółowej specyfikacji zachowań starej wersji, żeby zyskać natywny start, podpis i notaryzację na macOS, pakiet w Microsoft Store i jeden kod dla obu systemów. Pierwsze stabilne wydanie nowej wersji to 1.0.0 z 13 września 2026. Historia zmian.
Biblioteki open source
| Biblioteka | Licencja | Do czego |
|---|---|---|
| .NET 10 | MIT | środowisko uruchomieniowe |
| Avalonia, Avalonia.Themes.Fluent | MIT | interfejs |
| CommunityToolkit.Mvvm | MIT | wzorzec MVVM |
| Tomlyn | BSD-2-Clause | plik ustawień TOML |
| SharpCompress | MIT | archiwa bzip2, xz, 7z, RAR |
| Joveler.Compression.XZ, liblzma | MIT; public domain / 0BSD | zapis archiwów xz |
| FluentFTP | MIT | FTP i FTPS |
| SSH.NET, BouncyCastle.Cryptography | MIT | SFTP |
| Microsoft.Extensions.Logging.Abstractions | MIT | zależność SSH.NET |
| Avalonia.AvaloniaEdit | MIT | edytor tekstu |
| SkiaSharp | MIT | obrazy |
| Velopack | MIT | aktualizacje na macOS |
Aktualne wersje pokazuje okno Pomoc → O programie.