Jak szybko przepisać aplikację Jetpack Compose na iOS?

0

Stworzyłem aplikację dla Androida z użyciem Jetpack Compose i muszę ją przepisać w ten sposób, aby działała na iPhone.

Możliwości jest kilka:

  1. Compose Multiplatform z eksperymentalnym wsparciem dla iOS
  2. Flutter
  3. React Native
  4. PWA
  5. WebView
  6. Stworzenie natywnej aplikacji dla iOS

Kilka słów o aplikacji:

  1. Obecnie aplikacja ma tylko kilka ekranów, ale w przyszłości może mieć więcej.
  2. Aplikacja przechowuje dane na urządzeniu - login/hasło (DataStore) i dane (Room).
  3. Nie używam bezpośrednio API Androida oprócz zamiany mowy na tekst i pozwoleń.
  4. Mocno wykorzystuję funkcje Kotlina, m.in. coroutines.

Wydaje mi się, że najszybciej nauczę się Darta, Fluttera i przepiszę apkę. Dodatkowy plus, że jest więcej gotowych komponentów. Ale Darta nie znam wcale i czy przejście z Kotlina (zwłaszcza coroutines i Flow) i Javy jest łatwe?

W które technologie iść, aby szybko się ich nauczyć i żeby szybko udostępnić aplikację dla iOS?

Drugie pytanie, czy potrzebna jest licencja od Apple, żeby klient mógł w ogóle zainstalować sobie aplikację do testów?

0

Może B4X

1
Shiba Inu napisał(a):

. Ale Darta nie znam wcale i czy przejście z Kotlina (zwłaszcza coroutines i Flow) i Javy jest łatwe?

Przejście na Darta jest łatwe. Z tym że odpowiednika coroutines nie potrzebujesz, bo aplikacja jest jednowątkowa (gdybyś jednak naprawdę potrzebował odpalić coś w innym wątku, to jest mechanizm isolates, ale raczej nie będziesz potrzebował )

Shiba Inu napisał(a):

Drugie pytanie, czy potrzebna jest licencja od Apple, żeby klient mógł w ogóle zainstalować sobie aplikację do testów?

Tak, jest potrzebna. Chyba że klient przyjdzie do ciebie z iPhone, podłączy go przez kabel a ty mu wrzucisz aplikację w wersji Debug.

P.S. jak już zobaczysz jak to działa, to radzę zacząć stąd: https://bloclibrary.dev/#/

0

Pod spodem działa Chromium, czy cała apka działa natywnie?

Podejmę próbę przepisania tego na Compose Multiplatform. Na Androidzie nie ma dodatkowego narzutu, a pod iOS to nie wiem, czy jest odpalany JVM, czy kod w Kotlinie jest kompilowany do natywnego kodu. Na pewno animacje chodzą wolniej, bo jest warstwa pośrednicząca między Compose a Skia. Jeśli nieobsługiwany jest Accompanist, to klapa, bo używam kilku komponentów: Permissions, FlowLayout, Pager, Pager Indicator. Pewnie ostateczne i tak skończy się na Flutterze, bo to stabilne środowisko z dużym wsparciem, dużą ilością kopmonentów i może od razu przepisywać na Fluttera.

1

Nie ma tam żadnego Chromium, działa natywnie, ale na poziomie niższym, niż api Android/iOS. Za renderowanie gui odpowiada niskopoziomowy silnik Skia, napisany bodajże w C/C++
https://en.m.wikipedia.org/wiki/Skia_Graphics_Engine

0

Znalazłem 2 narzędzia do projektowania interfejsu Flutter:

https://flutterflow.io - UI, animacje, akcje, zapytania do API, przepływy, własne funkcje generowane przez AI
https://flutterviz.com - bardziej czytelna, ale tylko projektowanie UI

Ciekawe, czy niedługo takie narzędzia zastąpią programistów. Przeszkodą jest konieczność nauczenia się obsługi narzędzia i posiadania podstawowej wiedzy technicznej. Im więcej rzeczy da się wyklikać, tym większy próg wejścia, ale już niedługo AI pozwoli osobom nietechnicznym tworzyć proste aplikacje w 1 dzień.

Flutter jest bardziej dojrzały, ma więcej komponentów i możliwości. Oprócz tego jest masa szablonów. Jednak w Compose pisze się przyjemniej. Chcesz dodać komponent, to tworzysz funkcję z adnotacją Composable. Ale samo zarządzanie stanem, animacje, nawigacja, wymaga pisania więcej kodu, większy próg dla początkujących, np. rememberSaveable by mutableStateOf(null). Compose dopiero raczkuje i brakuje wielu komponentów.

Skąd u mnie ta niechęć do Fluttera - chyba dlatego, że dopiero wszedłem w Compose i wywracam wszystko do góry nogami.

Pewnie byłoby inaczej, gdybym od razu uczył się Fluttera.

Nie wiem, jak się w tym wszystkim połapać, by szybko przejść na Fluttera bez spędzania kolejnego tygodnia nad tutorialami.

0

To bardziej przyzwyczajenia prawdopodobnie. Tak btw, to faktycznie w porę się obejrzałeś, najpierw napisałeś całą aplikację a potem zauważyłeś, że jednak musisz ją pisać od początku. Trzeba było myśleć wcześniej.

W tej sytuacji możesz przejść tylko na ReactNative albo na Fluttera, bo nauczenie Swiift zajęłoby jeszcze więcej czasu. Co do tych narzędzi, nie wiem ale nie widziałem żeby ktoś takich rzeczy używał. Poza tym, podobno też generują nadmiarowy kod, to coś jak kiedyś projektowanie strony html w Wordzie. To jest właśnie trochę tak, jak z frontendem webowym - niby są jakieś edytory wysiwyg do html/css ale prawie nikt tego nie używa i nie potrzebuje.

0

Raczej przyzwyczajenie i nagła zmiana technologii. Dzisiaj wróciłem do tematu i dużo rzeczy we Flutterze jest wbudowane, co w Compose trzeba by pisać więcej linii kodu. Ale niektórych rzeczy brakuje zwłaszcza w kontenerach typu Column i Row.

Zadałem ChatGPT pytanie What is equivalent of Arrangement.spacedBy(16.dp) in Flutter?

Jednak odpowiedź jest błędna, bo MainAxisAlignment.spaceBetween nie rozmieści elementów co 16 dp.

Ale w drugiej części dobrze podpowiedział, że pomiędzy kontrolkami trzeba wstawić SizedBox().

0

Wydaje mi się, że w złą stronę idę. Istnieje już aplikacja webowa w Angularze. Na chwilę obecną aplikacja mobilna ma oferować tylko część funkcjonalności, ale z czasem klient zechce coraz więcej. Więc po co kilka razy pisać to samo? W branży to raczej standard, że dział mobilny tworzy osobno apkę mobilną, dział front apkę webową, itd. Ale w sytuacji, gdzie jeden dział ogarnia wszystko, to trzeba oszczędzać czas.

Znalazłem jeszcze takie rozwiązanie:

https://capacitorjs.com

Ci sami twórcy, co stworzyli Ionica. Opakowujemy stronę w WebView, ale aplikacja jest trzymana w pamięci telefonu.

Ale w wielu kwestiach nie da się pogodzić UI mobilnego i desktopowego. Często oczekiwany jest zupełnie inny sposób interakcji.

0

Dziwnie się za to zabierasz. Najpierw zrobiłeś aplikację w technologii tylko na Androida, potem zauważyłeś że potrzebujesz też na iPhone, by na końcu dojść do wniosku że w ogóle nie potrzebujesz aplikacji bo wystarczy ci strona www/PWA

1 użytkowników online, w tym zalogowanych: 0, gości: 1