Tracking von iOS Apps mit Application Insights

Thomas Polaschek
Donnerstag, 14. Mai 2020

Application Insights ist sehr nützlich, wenn man die Performance und die Stabilität einer Applikation überwachen möchte. Das funktioniert sowohl auf der Serverseite, als auch für jenen Teil einer Applikation, der am Client, also zum Beispiel in einem Webbrowser, läuft. Dafür liefert Application Insights auch bereits einiges an Standard Metriken und man merkt sehr schnell, das .NET Anwendungen hier recht gut durchleuchtet werden, auch ohne dass man besonders viel konfigurieren oder zusätzlichen Code in die jeweiligen Applikationen einzufügen braucht.

Nun wollen wir das Ganze aber für unsere iOS App nutzen. Hier muss man nun schon etwas mehr tun, um der App beizubringen, die betreffenden Daten an das Azure Monitoring zu senden.

Bevor wir uns jedoch um die App kümmern, muss diese im App-Center angelegt werden.

App-Center Konfiguration

Zu allererst ist es nötig, mittels „Add new app“ eine neue App im App-Center zu erstellen. Sobald das erledigt ist und die App entsprechende Daten sendet, kann man diese unter „Analytics“ betrachten.  Das ist jedoch vorerst nur die halbe Miete, denn jetzt müssen die Daten noch mit Application Insights verknüpft werden, damit wir sie dort ebenfalls sehen können. Das funktioniert mit Hilfe eines Exports, welchen man im Settings-Bereich der betreffenden App im App-Center anlegen kann. Sobald der Export eingerichtet ist, werden die aufgezeichneten Daten auch in Application Insights angezeigt.

Somit haben wir einmal alles für den Empfang der Daten vorbereitet. Jetzt müssen wir nur noch der App beibringen, auch welche zu senden.

Die App vorbereiten

Das Erste was man hier tun muss, damit die eigene App Daten an Application Insights senden kann, ist das Einbinden der App-Center SDK Module. Am unkompliziertesten läuft das mittels Cocoa Pods. Dazu erzeugt man ein Pod File mit folgendem Inhalt bzw. fügt einem bestehenden Pod File folgende Zeilen hinzu:

pod 'AppCenter/Analytics'
pod 'AppCenter/Crashes'
pod 'AppCenter/Distribute'

Als nächstes wird noch in das AppDelegate File, genau genommen in die dortige didFinishLaunchingWithOptions Methode, folgender Code eingefügt:

MSAppCenter.start("{Your App Secret}", withServices: [MSAnalytics.self, MSCrashes.self])

Das App Secret findet man unter “Getting Started” im App-Center.

Events senden

Unsere App ist nun für die Verwendung von Application Insights vorbereitet, sendet aber bisher noch keine Daten, von Sessions, Useranzahl sowie der verwendeten iOS Version einmal abgesehen. Was wir jetzt noch tun müssen ist, entsprechende Events dort abzusenden, wo wir Informationen zum Status der App benötigen. Dazu fügt man an der jeweiligen Stelle folgende Codezeile ein:

MSAnalytics.trackEvent("Custom Event Text") Weiters ist es auch noch möglich, hier diverse Properties in Form von Key-Value Pairs mitzugeben: MSAnalytics.trackEvent("Custom Event Text", withProperties: ["Property 1" : "Value 1", "Property 2" : "Value 2"])  

Crash Detection

Entsprechend dieser Anleitung von Microsoft sollte es auch möglich sein, Crashes, also Exceptions die zum Abbruch der App führen, aufzuzeichnen. Wenn sich also die App aufgrund einer Exception beendet, dann werden beim nächsten Start der App entsprechende Informationen an das App-Center gesendet und diese dann dort und in weiterer Folge auch in Application Insigths, angezeigt. Das hat in meinen Tests mit dem Emulator bisher allerdings nicht so recht geklappt. Weder ein Starten der App ohne Debugger noch das Uploaden der zur App gehörigen Symbols haben hier zum Erfolg geführt.

Es gibt jedoch hierfür auch noch einen Workaround, wie man Details zu einer Exception, welche zur Laufzeit aufgetreten ist, dennoch mittels Application Insights sichtbar machen kann. Hierzu gibt es die Möglichkeit, einen globalen Exception Handler zu definieren, in welchem man dann mittels Events wiederum die Details der aufgetretenen Exception an das App-Center senden kann. Dieser Handler funktioniert jedoch nicht für jede Exception, weshalb hier die sicherste Lösung eine Behandlung von Exceptions an den jeweiligen kritischen Stellen darstellt und von dort aus dann eine zentrale Methode zum Absenden der Exception Details an das App-Center aufzurufen.

Nützliche Links


Fazit

Application Insights eignet sich durchaus gut, um die Stabilität einer iOS App zu überwachen. Zwar kann hier nicht das ganze Potential ausgeschöpft werden, wie man es von .NET Anwendungen her kennt, bei denen eine Menge an Metriken bereits out-of-the-box zur Verfügung steht, aber durch geschickten Einsatz von Custom Events ist auch bei iOS eine sinnvolle und nützliche Überwachung der Stabilität einer App möglich.

Weitere Blogbeiträge

zum Thema Development

Updates for innovators: Abonnieren Sie unseren Blog