Beiträge

Swift – Die eine Programmiersprache für „alles“ ?! – Teil2

Die Evolution von Swift – the next level

Teil1

Es ist gut ein Jahr vergangen (Dezember 2015) seit Swift als Open-Source Programmiersprache das Licht der Welt(-Öffentlichkeit) erblickt hat. So finde ich, dass es mal wieder an der Zeit ist zu schauen, welche Evolution und Resultate diese recht junge Programmiersprache mittlerweile nach meiner ersten Bewertung und Prognose vom April 2016 in der Open-Source Entwickler Community gefunden hat. Um eine Sache vorweg zu nehmen: Mit Swift werden bereits produktive (Web-)Portal-Projekte umgesetzt (wie beispielsweise die Webseite des dänischen Triathlon-Events Ironman; Github-Source). So hat sich Swift tatsächlich in so kurzer Zeit von einer reinen Apple-Plattform Sprache (iOS, macOS, tvOS, watchOS) zu einem Linux-freundlichen Backend/Webframework-tauglichen Gesamtsystem entwickelt. Die aktuelle Version Swift3 genießt zudem große Kompatibilität im Segment der „kleinen ARM-Architektur Computer“ wie beispielsweise dem Raspberry Pi3 und dem dafür verfügbaren Ubuntu 16.04 als Betriebssystem; ergo die Software der Internet-Of-Things (IoT) kann ab jetzt tatsächlich ebenfalls mit dieser hochmodernen und performanten Programmiersprache entwickelt werden.

Weiterlesen

Swift – Die eine Programmiersprache für „alles“ ?! – Teil1

tl;dr

  • Swift eignet sich bereits jetzt zur Entwicklung einer produktiven verteilten mobilen Anwendung (Client-App + Backend-Webservice)
  • Proof-of-Concept Beispiel: verteilte App mit Shared Code
  • Deployment des Webservices via Docker-Container
  • Große Vorteile für Developer, DevOps, CTOs, CIOs und die zentralen Stakeholder/Kunden
  • Update: links und libraries-Empfehlungen

Apples Swift und Open Source

Im Juli 2014 hat Apple der Öffentlichkeit die neue Programmiersprache Swift vorgestellt. Zunächst wurde auf den eigenen Plattformen die Software-Entwicklung mit dieser Sprache realisiert: von der kleinen Smartwatch appleWatch (watchOS), über die Set-Top-Box appleTV (tvOS), auf ihren mobilen Geräten iPhone/iPodTouch/iPad (iOS) bis hin zu ihren Desktop-Geräten MacPro/iMac/MacBookPro/… (OSX).

Vor etwa einem halben Jahr (Dezember 2015) ging Apple dazu über, Swift als Open-Source Projekt der Öffentlichkeit bereitzustellen. Apple war mit diesem Schritt derart entschlossen und überzeugt, dass sie die Vorteile von ihrer aktuellen Programmiersprache Swift -z.B. die Flexibilität und die Skalierbarkeit (von Command-Line-Tools über Software für ‚kleine‘ embedded IoT-Geräte bis hin zu Server-Systemen und Betriebssystemen), die maschinennahe performate Ausführung  der damit erstellten Software (kompilierter/nativer Binär-Code !), sowie die modernen Features und Sprachkonstrukte- der gesamten Developer/IT-Community bereitgestellt haben wollten. Das ausgesprochene Ziel Apples: Durch die verändernden Software/IT-Anforderungen heutiger Systeme und Anwendungen, die in die Jahre gekommene native Programmiersprache C (bzw. auch C++) als de-facto-Standard mittelfristig abzulösen. Ein sehr ehrgeiziges Ziel -wie man ruhig finden darf- das nur durch Offenlegung und die Beteiligung der großen Entwickler-Community überhaupt erst machbar sein kann.

Weiterlesen

AirDrop – Inhalte zwischen Apps teilen

Mit Apple’s AirDrop lassen sich beliebige Inhalte zwischen Apps unkompliziert teilen. Man tippt auf den Action Button  und wählt aus einer Liste von Kontakten aus, die sich mit ihrem Gerät in der Nähe befinden. Der Kontakt akzeptiert die Übertragung und wählt eine App, mit der der geteilte Inhalt geöffnet werden soll.

Folgende Geräte sind die Mindestvoraussetung um AirDrop nutzen zu können:

  • iPhone 5 oder neuer
  • iPad (4. Generation) oder neuer
  • iPad mini
  • iPod touch (5. Generation oder neuer)

WLAN und Bluetooth müssen aktiviert sein.

(https://support.apple.com/de-de/HT204144)

 

Wie konfiguriert man die eigene App für AirDrop?

Beim Teilen von Inhalten über AirDrop werden Dateien verschickt.

Die App definiert Document Types und UTIs (Uniform Type Identifiers) für das Bereitstellen (Export) und für das Entgegennehmen (Import) von Inhalten. Das kann in Xcode für ein Build Target in der Info Sektion eingestellt werden:

Bildschirmfoto 2015-10-28 um 17.48.22

Bildschirmfoto 2015-10-28 um 17.46.52

Bildschirmfoto 2015-10-28 um 17.47.26

Bildschirmfoto 2015-10-28 um 17.47.41

Wenn die App spezielle Inhalte bereitstellt, deren Format nur die App selbst oder eine spezielle andere App kennt, dann sollte man einen eigenen eindeutigen Inhaltstyp definieren. Typischerweise wird für den Identifier das reverse DNS Format benutzt: „com.copmanyName.appName.documentType“. Für den public.mime-type empfiehlt sich „application/appName“ oder „application/dokumentName“. Die Dateiendung ist frei wählbar und kann auch aus deutlich mehr als 3 Zeichen bestehen.

In diesem Beispiel wird der Export und Import von Vokabel-Paketen für eine Vokabeltrainer-App definiert.

Für bereits existierende bzw. bekannte Arten von Inhalten wie zum Beispiel Bilder oder Videos sollte man auf die System-Declared Uniform Type Identifiers zurückgreifen: https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html

(Es kommt oft vor dass Xcode immer wieder abstürtzt, wenn man in der Info Sektion einen bestimmten Eintrag bearbeitet. In diesem Fall kann man im Project Navigator die Info.plist per Rechtsklick als „Source Code“ öffnen und die Einträge in XML bearbeiten.)

 

Als nächstes muss man in der App einen Button festlegen (zum Beispiel den Action Button  ), der den UIActivityViewController öffnet, um die Inhalte bereitzustellen:

Bildschirmfoto 2015-10-29 um 17.54.38

Dieser Code benutzt das ab iOS 8 neu eingeführte UIPopoverPresentationController System, das auf iPhone und iPad einheitlich funktioniert.

Hier wird ein ein Objekt der Klasse Package aus dem Beispielprojekt geteilt. Es wird vorher als Datei abgespeichert und repräsentiert ein Vokabel-Paket.

Wenn der Benutzer auf den Button tappt, erscheint das Activity Popup:

IMG_0097

Für das Activity-Item, das an den UIActivityViewController übergeben wird, sollte man eine eigene Klasse (hier: VokPackageActivityItemProvider) anlegen:

Bildschirmfoto 2015-10-29 um 18.01.02

Sobald der Benutzer einen AirDrop Kontakt ausgewählt hat, wird in einem Background-Thread die item() Methode aufgerufen. In diesem Beispiel wird einfach nur die URL zu der bereits existierenden Datei zurückgegeben. Man kann auch die Datei innerhalb der item() Methode generieren und dann ein NSURL Objekt mit dem Pfad auf die Datei zurückgeben.

Nachdem die Datei versendet wurde, fragt das Gerät des ausgewählten Kontaktes in welcher App die Datei geöffnet werden soll:

IMG_0099

Um den bereitgestellten Inhalt mit einer App entgegenzunehmen, wird im application delegate der URL handler definiert:

Bildschirmfoto 2015-10-29 um 18.40.36

Zunächst wird geprüft, ob die Datei die passende Dateiendung hat (hier: .vok). Die Datei befindet sich erst mal im Inbox Ordner mit eingeschränkten Zugriffsrechten. Man sollte die Datei gleich in den passenden Systemordner verschieben (Documents, Library, …).

In diesem Beispiel wird die Datei in Documents verschoben und steht ab diesem Zeitpunkt der App als Vokabelpaket bereit:

IMG_0100

Vokabeltrainer-Beispielprojekt Download:

Vok.zip

 

Von Objective-C zu Swift: JSON

Was ändert sich, wenn man Objective-C Code in Swift umschreibt?

In meinem letzten Artikel Von Objective-C zu Swift: Table Views, habe ich den umgeschriebenen Code eines Table View Menüsystems verglichen.

In diesem Artikel nehme ich das Einlesen von JSON Daten als Beispiel und verwende folgende Daten: Weiterlesen

Von Objective-C zu Swift: Table Views

Swift, die neue Programmiersprache von Apple ist da und steht mit Xcode 6 als Beta zum Ausprobieren bereit.
Wir haben einige typische Lösungen aus der Objective-C Welt in Swift umgeschrieben, um zu sehen was passiert.

In diesem Artikel zeige ich beispielhaft den umgeschriebenden Objective-C Code eines Menüsystems in Form einer TableView: Weiterlesen

ANCS (Apple Notification Center Service)

Vereinfachte Anbindung von Smartwatches und anderen Bluetooth Gadgets an iOS und Android.

Das Apple Betriebssystem iOS bringt in der aktuellen Version 7 den Apple Notification Center Service (ANCS) mit sich. Dieser Service ermöglicht Bluetooth LE Geräten den Zugriff auf Benachrichtigungen die vom System erzeugt wurden.
Weiterlesen

CoreData’s not SQL – requests by example

CoreData’s not SQL – dieser Slogan begegnet dem iOS-Entwickler, der in die CoreData-Welt einsteigt, an vielen Stellen – vor allem wenn es um die Selektion von Objekten/Entitäten geht. Zurück bleibt oft die Frage: Und was ist nun CoreData? Oder wie selektiere ich die Objekt, die mich interessieren?

Weiterlesen

Continuous Integration für iOS mit Jenkins – Ein Erfahrungsbericht

Seit gut 3 Jahren verwenden wir Jenkins als Plattform für eine Continuous Integration Umgebung für iOS-Projekte.

Zu den Hauptaufgaben des Systems gehören die ständige Überprüfung der Baubarkeit von Projekten nachdem Quellcode in ein Source-Control-Management (SCM) System eingecheckt wurde und die Verteilung der Build-Produkte an eine interne Over-the-Air (OTA) Distribution Plattform sowie direkt an unsere Kunden.
Darüber hinaus unterstützen wir verschiedene Build-Job Konfigurationen zur automatischen Quellcode-Dokumentation und Code-Analyse:

  • Ausführung von OCUnit-Tests und Messen der Testabdeckung,
  • Statische Code-Analyse,
  • Erstellung von Code-Metriken,
  • Copy-Paste-Detection,
  • Appledoc und Headerdoc.

Weiterlesen

Apple Volume Purchasing Program bald in Deutschland

Dank der iOS 6 Einführung ist es vermutlich endlich soweit, dass Apple den Kauf von Apps für die Mitarbeiter seiner Firmenkunden ermöglicht.

Lange haben Firmen darauf gewartet, jetzt wird es endlich Realität. Wovon andere Plattformen noch meilenweit entfernt sind, hat Apple damit in vielen Ländern umgesetzt.

Wozu genau soll das gut sein? Weiterlesen

iOS/MacOS: moderne Objective-C Syntax für besser leserlichen Code

Den Themenschwerpunkten
„einfach zu lesender Objective-C Code“ und „neue Features des llvm Clang Compilers „ reiht sich auch dieser Artikel ein und geht dabei kurz auf die Neuerungen der aktuellen Clang-Compiler Versionen 3.1 (Xcode 4.3) und 4.0 (Xcode 4.4) im Hinblick auf die Erweiterungen der Programmiersprache Objective-C ein. Auch das demnächst offiziell verfügbare Xcode 4.5 bringt einige nennenswerte Source-Code relevante Neuerungen mit sich.

In dem folgenden „zusammenhangslosen“ Code-Schnipsel habe ich versucht ausschließlich auf die Neuerungen einzugehen ohne eine sinnhafte Code-Sematik zu präsentieren. Weiterlesen