--- title: Poradnik wspierania projektu revision: 31.01.2023 --- | Updated 31.01.2023 | Języki: PL, [EN](/docs/CONTRIBUTING.md) [FR](/docs/lang/fr/CONTRIBUTING.md), [CZ](/docs/lang/cs/CONTRIBUTING.md) | # Poradnik wspierania projektu ## Kompilacja z włączonym szyfrowaniem SQLCipher Dodaj `cabal.project.local` do katalogu głównego projektu z lokalizacją nagłówków i bibliotek OpenSSL oraz flagą ustawiającą tryb szyfrowania: ``` cp scripts/cabal.project.local.mac cabal.project.local # lub # cp scripts/cabal.project.local.linux cabal.project.local ``` ## OpenSSL na MacOS MacOS ma domyślnie zainstalowany LibreSSL, OpenSSL musi być zainstalowany, aby skompilować SimpleX z kodu źródłowego. OpenSSL można zainstalować za pomocą `brew install openssl@3.0` Będziesz musiał dodać `/opt/homebrew/opt/openssl@3.0/bin` do swojego PATH, aby wszystko działało poprawnie ## Branche projektu **W repo simplex-chat** - `stable` - stabilne wydanie aplikacji, może być używane do aktualizacji poprzedniego stabilnego wydania (GHC 9.6.3). - `stable-android` - używane do budowania stabilnej biblioteki rdzenia Androida z Nix (GHC 8.10.7) - tylko dla Androida armv7a. - `stable-ios` - używane do budowania stabilnej biblioteki rdzenia iOS z Nix (GHC 8.10.7) - ten branch powinien być taki sam jak `stable-android` z wyjątkiem plików konfiguracyjnych Nix. Przestarzałe. - `master` - branch dla wydań wersji beta (GHC 9.6.3). - `master-ghc8107` - branch dla wydań wersji beta (GHC 8.10.7). Przestarzałe. - `master-android` - używane do budowania biblioteki rdzenia Androida w wersji beta z Nix (GHC 8.10.7) - tylko dla Androida armv7a. - `master-ios` - służy do budowania biblioteki rdzenia beta iOS z Nix (GHC 8.10.7). Przestarzałe. - `windows-ghc8107` - branch do kompilacji głównej biblioteki Windows (GHC 8.10.7). Przestarzałe? Branche `master-ios` i `windows-ghc8107` powinny być takie same jak `master-ghc8107` z wyjątkiem plików konfiguracyjnych Nix. **W repo simplexmq** - `master` - używa GHC 9.6.3, jego commit powinien być użyty w branchu `master` repo simplex-chat. - `master-ghc8107` - jego commit powinien być użyty w branchu `master-android` (i `master-ios`) repo simplex-chat. Przestarzałe. ## Development i proces wydawania 1. Tworzenie PR-ów do brancha `master` _tylko_ dla repozytoriów simplex-chat i simplexmq. 2. Jeśli repozytorium simplexmq zostało zmienione, aby skompilować mobilne biblioteki rdzenia należy połączyć jego branch `master` z branchem `master-ghc8107`. 3. Aby skompilować podstawowe biblioteki dla Androida, iOS i Windows: - scal branch `master` z branchem `master-android`. - Zaktualizuj kod, aby był kompatybilny z GHC 8.10.7 (patrz niżej). - push do GitHuba. 4. Wszystkie biblioteki powinny być budowane z brancha `master`, Android armv7a - z brancha `master-android`. 5. Aby zbudować aplikacje Desktop i CLI, należy utworzyć tag w branchu `master`, pliki APK powinny być dołączone do wydania. 6. Po publicznym wydaniu w App Store i Play Store, scal: - `master` do `stable` - `master` do `master-android` (i skompiluj/zaktualizuj kod) - `master-android` do `stable-android`. 7. Branch `master` repo simplexmq powinien zostać niezależnie scalony z branchem `stable` w wydaniach stabilnych. ## Różnice pomiędzy GHC 8.10.7 i GHC 9.6.3 1. Główna różnica związana jest z rozszerzeniem `DuplicateRecordFields`. W GHC 9.6.3 nie jest już możliwe określenie typu podczas korzystania z selektorów, zamiast tego używane jest rozszerzenie OverloadedRecordDot i składnia, które muszą zostać usunięte w GHC 8.10.7: ```haskell {-# LANGUAGE DuplicateRecordFields #-} -- Użyj tego w GHC 9.6.3, gdy jest to potrzebne {-# LANGUAGE OverloadedRecordDot #-} -- syntax GHC 9.6.3 let x = record.field -- syntax GHC 8.10.7 usunięty w GHC 9.6.3 let x = field (record :: Record) ``` Nadal możliwe jest określenie typu podczas korzystania ze składni aktualizacji rekordu, użyj tej reguły, aby wyłączyć ostrzeżenie kompilatora: ```haskell -- Użyj tego w GHC 9.6.3, gdy jest to potrzebne {-# OPTIONS_GHC -fno-warn-ambiguous-fields #-} let r' = (record :: Record) {field = value} ``` 2. Większość funkcji monad musi być teraz importowana z `Control.Monad`, a nie z konkretnych modułów monad (np. `Control.Monad.Except`). ```haskell -- Użyj tego w GHC 9.6.3, gdy jest to potrzebne import Control.Monad ``` [Ten PR](https://github.com/simplex-chat/simplex-chat/pull/2975/files) opisuje wszystkie różnice.