All checks were successful
Deploy to Production / deploy (push) Successful in 3s
157 lines
5.9 KiB
Markdown
157 lines
5.9 KiB
Markdown
# Publikacja Aplikacji Mobilnej (Android & iOS)
|
|
|
|
Aplikacja została skonfigurowana z użyciem **Capacitor**, co pozwala na wydanie jej jako natywnej aplikacji na Androida i iOS.
|
|
|
|
## Wymagania wstępne
|
|
|
|
1. **Node.js** (już masz).
|
|
2. **Android Studio** (dla Androida).
|
|
3. **Xcode** (dla iOS - tylko macOS).
|
|
4. Konta deweloperskie:
|
|
* **Google Play Console** (jednorazowa opłata $25).
|
|
* **Apple Developer Program** (roczna opłata $99).
|
|
|
|
## Struktura projektu
|
|
|
|
* `android/` - natywny projekt Androida.
|
|
* `ios/` - natywny projekt iOS.
|
|
* `dist/` - zbudowana aplikacja webowa (to, co widzi użytkownik).
|
|
* `assets/` - ikony i ekrany startowe (użyj `npx capacitor-assets generate` po zmianie plików tutaj).
|
|
|
|
## Codzienny workflow (aktualizacja kodu)
|
|
|
|
Za każdym razem, gdy zmienisz kod JS/Vue:
|
|
|
|
1. Zbuduj aplikację webową:
|
|
```bash
|
|
npm run build
|
|
```
|
|
2. Zsynchronizuj zmiany z projektami natywnymi:
|
|
```bash
|
|
npx cap sync
|
|
```
|
|
|
|
---
|
|
|
|
## Generowanie Certyfikatów (dla Ionic Appflow / CI/CD)
|
|
|
|
Jeśli używasz **Ionic Appflow** do budowania aplikacji w chmurze, musisz wygenerować i wgrać odpowiednie certyfikaty podpisywania.
|
|
|
|
### Android (Google Play)
|
|
|
|
Potrzebujesz pliku **Keystore (.jks lub .keystore)**.
|
|
|
|
1. **Opcja A (Terminal - jeśli masz Javę/JDK):**
|
|
Uruchom w terminalu:
|
|
```bash
|
|
keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
|
|
```
|
|
* Zostaniesz poproszony o hasło do magazynu kluczy (zapamiętaj je!).
|
|
* Podaj dane (Imię, Organizacja itp.).
|
|
* Na koniec potwierdź (`yes`).
|
|
|
|
2. **Opcja B (Android Studio):**
|
|
* Otwórz projekt Androida w Android Studio (`npx cap open android`).
|
|
* Menu: **Build** -> **Generate Signed Bundle / APK**.
|
|
* Wybierz **Android App Bundle** -> Next.
|
|
* Pod polem "Key store path" kliknij **Create new...**.
|
|
* Wypełnij formularz (ścieżka, hasła, alias).
|
|
* Zakończ kreatora.
|
|
|
|
3. **W Appflow:**
|
|
* Wgraj wygenerowany plik `.jks`.
|
|
* Podaj:
|
|
* **Keystore Password**: hasło, które ustawiłeś.
|
|
* **Key Alias**: nazwa aliasu (np. `my-key-alias` lub to co wpisałeś).
|
|
* **Key Password**: hasło do klucza (zazwyczaj to samo co do keystore).
|
|
|
|
### iOS (App Store)
|
|
|
|
Potrzebujesz certyfikatu **.p12** oraz profilu **.mobileprovision**.
|
|
Wymagany jest dostęp do komputera Mac i konta Apple Developer.
|
|
|
|
1. **Certyfikat Dystrybucyjny (.p12):**
|
|
* Otwórz aplikację **Dostęp do pęku kluczy (Keychain Access)** na Macu.
|
|
* Menu: **Asystent certyfikatów** -> **Poproś urząd certyfikacji o certyfikat**.
|
|
* Wpisz swój email, wybierz "Zapisz na dysku" i kontynuuj -> Zapisz plik `.certSigningRequest` (CSR).
|
|
* Zaloguj się na [developer.apple.com](https://developer.apple.com).
|
|
* Idź do **Certificates, Identifiers & Profiles** -> **Certificates**.
|
|
* Kliknij **+**, wybierz **iOS Distribution (App Store and Ad Hoc)**.
|
|
* Wgraj swój plik CSR.
|
|
* Pobierz wygenerowany certyfikat `.cer`.
|
|
* Kliknij dwukrotnie w pobrany plik `.cer`, aby dodać go do Pęku kluczy.
|
|
* W Pęku kluczy znajdź ten certyfikat (np. "iPhone Distribution: Twoja Nazwa"), rozwiń go strzałką, aby widzieć "Klucz prywatny".
|
|
* Zaznacz **oba** (certyfikat i klucz prywatny), kliknij prawym -> **Eksportuj 2 rzeczy**.
|
|
* Zapisz jako plik `.p12` i ustaw hasło eksportu (zapamiętaj je!).
|
|
|
|
2. **Profil Aprowizacji (.mobileprovision):**
|
|
* Na [developer.apple.com](https://developer.apple.com) idź do **Profiles**.
|
|
* Kliknij **+**, wybierz **App Store** (pod Distribution).
|
|
* Wybierz App ID swojej aplikacji (musi pasować do Bundle ID w projekcie).
|
|
* Wybierz certyfikat, który przed chwilą stworzyłeś.
|
|
* Nazwij profil (np. "Nonograms App Store") i pobierz plik `.mobileprovision`.
|
|
|
|
3. **W Appflow:**
|
|
* Wgraj plik `.p12`.
|
|
* Wgraj plik `.mobileprovision`.
|
|
* Podaj hasło do pliku `.p12`.
|
|
|
|
---
|
|
|
|
## Android (Lokalnie)
|
|
|
|
### 1. Uruchomienie projektu
|
|
Otwórz projekt w Android Studio:
|
|
```bash
|
|
npx cap open android
|
|
```
|
|
|
|
### 2. Konfiguracja i Podpisywanie
|
|
W Android Studio:
|
|
1. Poczekaj na "Gradle Sync".
|
|
2. Zmień `applicationId` w `build.gradle` (Module: app) jeśli chcesz inną niż `pl.nonograms.app`.
|
|
3. Menu: **Build** -> **Generate Signed Bundle / APK**.
|
|
4. Wybierz **Android App Bundle**.
|
|
5. Stwórz nowy klucz (Keystore) i zapamiętaj hasła (bezpiecznie!).
|
|
6. Wygeneruj plik `.aab`.
|
|
|
|
### 3. Publikacja
|
|
1. Zaloguj się do [Google Play Console](https://play.google.com/console).
|
|
2. Utwórz nową aplikację.
|
|
3. Uzupełnij informacje (opis, screenshoty, polityka prywatności).
|
|
4. W sekcji "Production" prześlij wygenerowany plik `.aab`.
|
|
|
|
---
|
|
|
|
## iOS (Lokalnie)
|
|
|
|
### 1. Uruchomienie projektu
|
|
Otwórz projekt w Xcode:
|
|
```bash
|
|
npx cap open ios
|
|
```
|
|
|
|
### 2. Konfiguracja
|
|
W Xcode:
|
|
1. Kliknij "App" w drzewie plików po lewej.
|
|
2. W zakładce **Signing & Capabilities**:
|
|
* Wybierz swój "Team" (Twoje konto Apple ID).
|
|
* Upewnij się, że "Bundle Identifier" jest unikalny.
|
|
3. W zakładce **General**:
|
|
* Ustaw numer wersji (Version) i kompilacji (Build).
|
|
|
|
### 3. Publikacja
|
|
1. Wybierz urządzenie docelowe jako "Any iOS Device (arm64)".
|
|
2. Menu: **Product** -> **Archive**.
|
|
3. Po zakończeniu otworzy się "Organizer". Kliknij **Distribute App**.
|
|
4. Wybierz **App Store Connect** -> **Upload**.
|
|
5. Po przesłaniu, zaloguj się do [App Store Connect](https://appstoreconnect.apple.com), uzupełnij metadane i wyślij do recenzji.
|
|
|
|
---
|
|
|
|
## Ważne uwagi
|
|
|
|
* **Bezpieczny obszar (Notch):** Aplikacja ma ustawione `viewport-fit=cover`, ale upewnij się, że UI nie chowa się pod notchem (w CSS używaj `env(safe-area-inset-top)`).
|
|
* **Wstecz (Android):** Capacitor obsługuje przycisk wstecz sprzętowo, ale warto to przetestować.
|
|
* **Permissions:** Jeśli w przyszłości dodasz pluginy (np. kamerę), musisz dodać uprawnienia w `AndroidManifest.xml` i `Info.plist`.
|