> For the complete documentation index, see [llms.txt](https://m335.ict-bz.ch/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://m335.ict-bz.ch/tag-3/native-grundlagen.md).

# Native Grundlagen

Native Applikationen sind Applikationen die explizit für mobile Betriebssysteme entwickelt werden. In der Entwicklung bspw. sind aktuell die bekanntesten Betriebssysteme Android und iOS.

Gerade in der Android und iOS Entwicklung sind eigene Programmiersprachen und IDE vorhanden, welche man nutzen muss.

<table><thead><tr><th width="171.33333333333331">Betriebssystem</th><th>Programmiersprache</th><th>IDE</th></tr></thead><tbody><tr><td>Android</td><td>Kotlin<br>Entwickelt in Koorperation von Google und JetBrains. Kotlin löste Java in der Android-Programmierung ab.</td><td>Android Studio<br>Applikationen lassen sich auf Windows, Linux und Mac entwickeln und builden</td></tr><tr><td>iOS</td><td><p>Swift</p><p>Swift löste ca. 2014 Objective-C ab. Mit SwiftUI werden auf Apple-Plattformen UIs entwickelt (deklarativer Ansatz).</p></td><td>XCode<br>Applikationen lassen sich nur auf MacOS entwickeln und builden</td></tr></tbody></table>

Selbst wenn wir uns in diesem Kurs vor allem auf die hybride Entwicklung fokussieren, müssen die Applikationen in Android Studio oder XCode gebuildet werden. Dies wirst du im Kapitel Capactior noch vertiefen.

## Native Komponente

Folgend findest du eine Auflistung einiger Komponenten (nicht abschliessend):

* Camera
* File System
* Geolocation
* Accelerometer
* Notification
* Network
* Haptics
* ...

In einer Anwendung können solche Komponenten verwendet, um die Interaktivität zu fördern. Dadurch kann der User bspw. Bilder aufnehmen und diesen als Profilbild speichern. Das unterscheidet Apps von statischen Webseiten, welche keinerlei Interaktivitäten zulässt.

Um die Sicherheit deines Mobilgerätes zu gewährleisten, benötigen sowohl Android als auch iOS Berechtigungen. Diese Berechtigungen erlauben es dem System den Zugriff auf die nativen Komponenten zuzugreifen. Dies wirst du im Kapitel Capacitor noch vertiefen.

## Desktop und mobile Anwendungen

Es gibt einige Unterschiede zu beachten in der Entwicklung zwischen nativen und Desktopanwendungen.

<table><thead><tr><th width="156.33333333333331"></th><th width="277">Mobile Anwendung</th><th>Desktopanwendung</th></tr></thead><tbody><tr><td>Plattform</td><td>Mobile Betriebssyteme<br>wie Android und iOS</td><td>Desktop-Betriebsysteme<br>wie Windows, macOS und Linux</td></tr><tr><td>Entwicklungs-Tools</td><td>Swift / SwiftUI<br>Kotlin / Jetpack Compose</td><td>C#, .NET, C++<br>Java</td></tr><tr><td>UI</td><td>Optimiert für Touchgesten</td><td>Optimiert für Maus und Tastatur</td></tr><tr><td>Ressourcen und<br>Leistung</td><td>Sind in der Regel für begrenzte CPU-Leistung und Speicher optimiert</td><td>Zugriff auf mehr Ressourcen und können daher komplexere Aufgaben ausführen</td></tr><tr><td>Verteilung</td><td>Native Anwendung werden über einen solchen Store verteilt</td><td>Können über eine Webseite heruntergeladen oder auch über spezielle Vertreibungssoftwares</td></tr><tr><td>Funktionalität</td><td>Zugriff auf die oben genannten nativen Komponente</td><td>Zugriff auf ein breiteres Spektrum an System-APIs und Hardware Ressourcen</td></tr><tr><td>Sicherheit</td><td>Laufen in eigenen eingeschränkten Sandbox-Umgebung</td><td>Mehr Freiheiten vorhanden aber kann so auch ein Sicherheitsrisiko sein</td></tr></tbody></table>

Ressourcen und Leistung: Bei mobilen Applikationen steht jeweils nur eine Applikation im Vordergrund, das heisst alle anderen Apps werden automatisch pausiert. Dadurch wird der Leistungsverbrauch optimiert und reduziert. Dies muss ein Entwickler in der Entwicklung stets beachten.

### Sicherheit

Beim Sandboxing handelt es sich um eine Isolation, wodurch jede Applikation und Prozess nur auf den freigegebenen Ressourcen Zugriff erhält. Dadurch lässt sich der Schutz vor anderen Apps erhöhen. Falls du dich ins Sandboxing vertiefen möchtest, lies dich doch selbstständig in das Sandboxing von [Android](https://source.android.com/docs/security/app-sandbox?hl=de) und [iOS](https://support.apple.com/de-ch/guide/security/sec15bfe098e/web) ein.
