-
Notifications
You must be signed in to change notification settings - Fork 5
Entwicklung
Für die Entwicklung der Anwendung werden verschiedene Komponenten benötigt:
- eine Node und NPM-Installation
-
Ionic & Cordova
$ npm install -g cordova @ionic/cli
- eine Android oder iOS & macOS Entwicklungsumgebung
Die Entwicklungsumgebung kann dann wie folgt aufgesetzt werden:
(1) Klonen des Projekts
$ git clone https://github.com/University-of-Potsdam-MM/Mobile.UP.git
$ cd Mobile.UP
(2) Einrichten der verwendeten Submodule
$ git submodule update --init --recursive
(3) Installieren der Abhängigkeiten
$ npm install
(4) Bauen mit NPM
$ npm run build
(5) Ausführen der Anwendung lokal mit Entwicklungsserver (vorher beachten: config.dist.json und config.json)
$ ionic serve
(6) Ausführen der Anwendung auf einem physisch vorhandenem Gerät
$ ionic capacitor run {android,ios}
Achtung: Damit die App richtig funktioniert muss config.json vorhanden sein.
(1) Schritte 1-4 von oben (2) Für Plattform (Android) updaten ```shell script $ ionic capacitor copy android ```- Projekt in Android Studio öffnen
$ ionic capacitor run android
- Emulator (installieren und) starten
- Mit grünem Pfeil App über Run Config auf Emulator starten. Alternative:
$ npx cap run android
Der Access Token (apikey) und Basic Auth String sind nicht im öffentlichen Repo enthalten. Damit das Projekt korrekt ausgeführt werden kann, müssen folgende Stellen (lokal) in src/assets/config.dist.json ersetzt und die Datei in config.json
umbenannt werden:
"accessToken": "[BASIC_AUTH_STRING]",
…
"apiToken": "[ACCESS_TOKEN]",
Dies kann entweder händisch oder mit Hilfe des fillCredentials.sh-Skripts geschehen:
./fillCredentials.sh "src/assets/config.dist.json" "ACCESS_TOKEN BASIC_AUTH_STRING"
Voraussetzung dafür ist, dass ACCESS_TOKEN
und BASIC_AUTH_STRING
als Umgebungsvariablen gesetzt sind.
config.json
um. Die config.dist.json
darf allerdings nicht aus dem Repo gelöscht werden. Entsprechende Änderungen sollten daher nicht in git commited werden.
Für das Hinzufügen einer Page sollte am besten das ionic-cli
verwendet werden:
$ cd src/app/pages
$ ionic g page MyNewPage
Die Page MyNewPage
wird dadurch im Verzeichnis src/app/pages/my-new-page
erstellt. Außerdem wird in der Datei src/app/app-routing.module.ts
ein neues Element für die erstellte Page hinzugefügt:
{
path: 'my-new-page',
loadChildren: () => import('./pages/my-new-page/my-new-page.module').then( m => m.MyNewPagePageModule)
}
Damit die neue Page in der Anwendung verwendet wird, muss diese noch in den Dateien src/assets/config.json
und src/assets/config.dist.json
unter "modules"
eingetragen werden. Ansonsten würde diese nicht in der HomePage
dargestellt werden und wäre daher auch nicht benutzbar. In der src/assets/config.json
/src/assets/config.dist.json
muss also noch folgender Eintrag erstellt werden:
{
"modules": {
"my-new-page": {
"componentName": "my-new-page",
"icon": "rocket",
"selected": false
},
}
}
Der componentName
muss dabei dem path
aus dem Eintrag in der Datei app-routing.module.ts
entsprechen.
Die Page ist nun in der Anwendung verfügbar.
Eine Page ist im Grunde eine Angular-Component und besteht daher aus:
- Component (
my-new-page.page.ts
): Hier befindet sich die Logik (Code) der Page an sich. - Template (
my-new-page.page.html
): Hier wird mittels HTML das Aussehen der Page definiert. - Style (
my-new-page.page.scss
): Hier werden Styles definiert, die nur für diese Page gelten. - Module (
my-new-page.module.ts
): Die Module-Datei fasst die Bestandteile der Page zu einem Modull zusammen und importiert außerdem Abhängigkeiten aus dem Hauptmodul der Anwendung.
Einige oft genutzte Funktionen wurden in eine AbstractPage
ausgelagert, um unnötige Wiederholungen zu vermeiden. Für die Verwendung dieser AbstractPage
muss eine beliebige Page bzw. Komponente lediglich diese AbstractPage
extenden. Dadurch kann direkt auf die Methoden und Attribute der
AbstractPage
zugegriffen werden:
@Component({
selector: 'app-my-new-page',
templateUrl: './my-new-page.page.html',
styleUrls: ['./my-new-page.page.scss'],
})
export class MyNewPage extends AbstractPage implements OnInit {
constructor() {
super({ requireNetwork: true });
}
ngOnInit() {
// der config-service kann durch die AbstractPage direkt verwendet werden
console.log(this.config.appVersion)
}
}
Die Anwendung kann auf mehrere Weisen produktiv deployed werden. In jedem Szenario kommt dafür das ionic-cli
zum Einsatz.
Für die Erstellung eines Browser-Releases folgendes ausführen:
$ ionic build --prod
Die Produktivversion befindet sich nun im Verzeichnis www
. Diese Dateien müssen über einen Webserver bereitgestellt werden.
Für die Erstellung eines Android-Releases folgendes ausführen:
$ ionic capacitor build android --prod
$ zipalign -v 4 platforms/android/app/build/outputs/apk/release/app-release-unsigned.apk MobileUP-unsigned.apk
# Für den folgenden Schritt muss eine Keystore-Datei $KEYSTORE vorhanden sowie deren Passwort $KEYSTORE_PASS bekannt sein
$ jarsigner -verbose \
-sigalg SHA1withRSA \
-digestalg SHA1 -keystore $KEYSTORE \
-storepass:env KEYSTORE_PASS \
MobileUP-unsigned.apk \
/my-release-key
$ zipalign -v 4 MobileUP-unsigned.apk MobileUP.apk
Die Datei MobileUP.apk
ist nun bereit für das Deployment via Google-PlayStore o.ä.
* Apple ID mit entsprechend ausreichenden Rechten (+ Xcode-Login)
* macOS Keychain: gültiges Apple Distribution Certificate
* macOS Keychain: gültiges anwendungsspezifisches Passwort (siehe unten)
* ExportOptions.plist im Projektordner
# Außerdem: die Versionsnummer der App muss höher sein als die aktuell im App Store verfügbare Version
# Außerdem: die Buildnummer der App muss höher sein als die des zuletzt hochgeladenen Builds
Ein anwendungsspezifisches Passwort kann unter appleid.apple.com
erstellt werden.
Das anwendungsspezifischen Passwortes wird dann in der macOS Keychain gespeichert:
$ xcrun altool --store-password-in-keychain-item "xcrun-upload-app" -u $YOUR-APPLE-ID-EMAIL -p $YOUR-APP-SPECIFIC-PASSWORD
$ rm -rf $PWD/platforms/ios_build
$ ionic capacitor build ios --prod
# Nach dem erstmaligen Bauen eines iOS-Builds muss Mobile.UP.xcworkspace in Xcode geöffnet werden
# Dort muss unter Signing & Capabilities das Development Team 'Uni Potsdam' ausgewählt werden
# Ich habe bisher keinen Weg gefunden, das über das CLI zu regeln
# Erzeugen des .xcarchive und der .ipa
$ xcodebuild -workspace $PWD/platforms/ios/Mobile.UP.xcworkspace \
-scheme Mobile.UP \
-sdk iphoneos \
-configuration AppStoreDistribution archive \
-archivePath $PWD/platforms/ios_build/archive/Mobile.UP.xcarchive
$ xcodebuild -exportArchive \
-archivePath $PWD/platforms/ios_build/archive/Mobile.UP.xcarchive \
-exportOptionsPlist exportOptions.plist \
-exportPath $PWD/platforms/ios_build/ipa \
-allowProvisioningUpdates
# Upload zu App Store Connect
$ xcrun altool --upload-app -f $PWD/platforms/ios_build/ipa/Mobile.UP.ipa \
-u $YOUR-APPLE-ID-EMAIL \
-p @keychain:xcrun-upload-app
Der letzte Befehl lädt den Build zu App Store Connect (appstoreconnect.apple.com)
hoch. Dort kann der Build dann unter Meine Apps > Mobile.UP > TestFlight
eingesehen und (nach einer kurzen Bearbeitungszeit) als Testbuild für TestFlight freigegeben werden.
Unter Meine Apps > Mobile.UP > App Store
kann ein neues Release für den App Store vorbereitet werden. Dort muss der Build dann ausgewählt werden.