🐍 + iOS = 💕 – Pythonista is awesome

Die Programmiersprache, in der ich am liebsten Arbeite ist Python. Eigentlich hatte ich mal angefangen Ruby zu lernen, aber dieses Unterfangen habe ich wegen zwei Programmen gekippt. Das eine ist Sublime Text 31. Das zweite ist Pythonista.

Pythonista

Pythonista ist eine IDE für Python auf iOS. Das heißt grundsätzlich erstmal, dass sich in Pythonista Python Scripts schreiben, aber auch ausführen lassen. Aber wie es sich für eine gute IDE gehört, hört es dabei nicht auf. Ole Moritz hat viele wirklich großartige Features eingebaut, die Python auf iOS richtig einfach machen.

Python 2, 3 und Module

Seit der Version 3.0 kommt Pythonista mit der Möglichkeit Scripts einfach und gezielt mit Python3 oder mit Python (2) zu entwickeln. Mein Default Interpreter ist Python 3.5, aber sollte ich mal Python 2 brauchen, lässt sich über einen long press auf das Play-Symbol einfach Python 2 als Interpreter auswählen.

Das Run-Menu von Pythonista mit Zugriff auf Unittests und andere Interpreter

Pythonista kommt dabei mit der Python Standard Library, eigenen Modulen für die Entwicklung auf iOS und folgenden Third Party Modulen:

bs4 — BeautifulSoup 4

Bottle: Python Web Framework

Dropbox for Python

evernote

faker

feedparser — Universal Feed Parser

Markdown

markdown2 — A fast and complete implementation of Markdown in Python

paramiko

Python Imaging Library

qrcode — Pure python QR Code generator

Requests – HTTP for Humans

xmltodict

Die Pythonista-eigenen Module sind es aber, die Pythonista so wirklich nützlich machen, weil sie die Kommunikation mit iOS ermöglichen. Ich will im Folgenden ein paar beleuchten.

ui

Für eine wirklich gute Bedienung der eigenen Programm braucht es auf iOS ein besseres User Interface als das CLI. Dafür wird das ui Modul mitgeliefert, welches es sehr einfach ermöglicht graphische User Interfaces zu bauen, die sich so verhalten, wie ich es von iOS GUIs erwarte. Um den Einstieg zu erleichtern gibt es außerdem einen graphischen Editor in dem, ähnlich zu Interface Builder, sich Interfaces zusammen schieben lassen – nur halt per Touch. Über das ui Modul lässt sich dann die ui.View in das Script laden und mit der Programmlogik verknüpfen.

Damit schafft Pythonista, was ich mir für macOS wünschen würde. Native GUI mit Python.

appex

Mit der 3.0 kam außerdem die Pythonista Extension für das iOS Share Sheet und das Modul appex (App Extension) dazu. Damit wird es endlich möglich Daten von einer App in Richtung Pythonista weiter zu geben ohne den Umweg über das Clipboard, mit all seinen Limitierungen, zu gehen. Das Modul bringt Methoden für die üblichsten Daten mit: Photos, Text, URLs, File Paths, VCards und selbstverständlich die „rohen“ Daten.

speech

Für dieses Modul ist die Online-Dokumentation leider nicht ganz aktuell. Denn auf iOS 10 ist speech nicht mehr nur text-to-speech, sondern auch speech-to-text.

The speech module provides speech synthesis and recogntion functionality on iOS.

Und hier ist es für mich echt spannend geworden. Bisher benutze ich die App Just Press Record, mit der per Apple Watch App schnell kurze Audioaufnahmen gemacht werden können. Die App kann direkt den gesprochenen Text transkribieren. Aber leider schmeißt sie den Text nicht einfach in eine separate Text-Datei. Über das Share Share Sheet lässt sich die Aufnahme oder das Transkript wiederum mit Pythonista teilen. Nun lässt sich die Spracherkennung in Pythonista machen und/oder der erkannte Text von Pythonista weiterverarbeiten. Text in Datei Speichern, neue Aufgabe im Projekt-Management-Tool mit REST-full API anlegen, Text automatisch Twittern und vieles mehr, kein Problem.

All the checks

Style Police is coming

Hinter dem Schraubenschlüssel Symbol versteckt sich der „Style Check“. Damit wird der eigene Code darauf geprüft ob er dem PEP8 Style Guide entspricht. In den Einstellungen lassen sich teile des Guides deaktivieren.

Besonders gut ist der Style Check für mich um leere Zeilen mit Leerzeichen zu entdecken, die für das Einrücken automatisch eingefügt werden.

Flaky

Im gleichen Menu lässt sich auch der Code mit pyflakes auf Syntaxfehler etc. kontrollieren, ohne das Programm laufen zu lassen.

Das Tool-Menu mit dem Style-Checker und Analyser

Tests

Mit dem long press auf das „Play“ Symbol lassen sich nicht nur Python2 und 3 als Interpreter auswählen, sondern auch Tests anstoßen.

Ja, vollkommen richtig: Pythonista kommt mit Unittest-Support. Ihr könnt also test-driven entwickeln. Tatsächlich ist es dabei sogar möglich in Tests zu überprüfen, ob die Views on screen sind, welche Subviews sie haben etc. Ziemlich cool wie ich finde.

But there’s more

Today View Widget

Neben den App Extensions bringt Pythonista 3 ab iOS 10 ein Widget für die Today View im iOS Notification Center mit. Damit werden kleine Helfer sehr schnell und einfach zugänglich.

Eines der Pythonista Beispielwidgets, was den aktuellen Inhalt der Zwischenablage anzeigt.

Editorial

Eine zweite App von Ole Moritz ist Editorial, ein mit Python erweiterbarer Text-Editor. Ich selbst benutze die Erweiterungen nicht wirklich, aber damit tun sich viele coole Möglichkeiten auf.

Kommandozeile in der Konsole

Pythonista bringt zwar eine interaktive Konsole mit, aber eine richtige Kommandozeile ist das leider nicht. So ist es, sicherlich den Regeln der Plattform geschuldet, nicht wirklich einfach z.B. third party Module mit git nach zu installieren etc.. Dafür gibt es aber Lösungen wie z.B. stash. Damit bekommt die Konsolen View eine neue Subview in der eine mehr oder weniger vollständige Shell läuft. Mit all den Vorteilen die so eine Shell mit sich bringt.

Ein Blick auf die StaSH Shell in Pythonista

Fazit

Pythonista 3 ist momentan für 10,99 € im AppStore zu haben. Für Leute mit iOS Geräten, die Python (auch auf AnfängerInnenniveau) können und außerdem Lust und Ideen haben auf iOS zu programmieren ist Pythonista eine großartige Wahl. Eine vollständig native App wird weiterhin Vorteile gegenüber „Pythonista-Apps“ haben, aber Pythonista bietet einen leichten Zugang zum Programmieren und zeigt was Xcode für iOS mindestens können müsste (sollte es je für iOS kommen).