Prefix Changer für iPhone – iPod Touch – iPad

Nur zwei Tage, nachdem der Prefix Changer den Status „Waiting for Review“ erreicht hat, wurde die App freigegeben. Der Prefix Changer steht ab sofort im AppStore zum Download bereit.

Vorwahlen verwalten mit dem iPhone

Der zweite Teil meiner App-Collection für Reisende ist somit erfolgreich abgeschlossen. Der Prefix Changer ist eine App für iPhone, iPod Touch und das iPad, mit der man die Vorwahlen seiner Kontakte manipulieren kann.

Automatische Änderung der Ländervorwahl

Wenn man aus dem Ausland telefonieren möchte, dann muss man der eigentlichen Telefonnummer die Ländervorwahl voranstellen. Für Deutschland ist das die 0049. Oftmals aber hat man nur die Telefonnummer ohne Ländervorwahl in seinem Telefon gespeichert. Mit dem Prefix Changer kann man den Telefonnummern die Ländervorwahl voranstellen. Ebenfalls lassen sich bestehende Ländervorwahlen die mit einem + beginnen in 00 ändern und umgekehrt.

Manuelle Änderung des Präfixes

Der Grund, warum diese App entstanden ist, war die Tatsache, dass wir in Thailand eine Pre-Paid Karte gekauft haben. Wenn man mit dieser Pre-Paid Karte ins Ausland telefonieren will, muss man jeder Nummer eine Vorwahl voranstellen. Die Vorwahl entscheidet über den Preis und die Sprachqualität. Hilfreich ist die Funktion auch dann, wenn man beispielsweise Calling Cards oder günstige Vorwahlnummern verwendet.

Sichern, Wiederherstellen und Exportieren

Gerade wenn es um sensible Daten wie das eigene Telefonbuch geht, ist es wichtig die Daten wiederherstellen zu können. Aus diesem Grund lassen sich über die App alle Kontakte sichern und wiederherstellen. Als besonderes Feature besteht die Möglichkeit, alle Kontakte im standardisierten vCard Format via E-Mail zu exportieren. Somit lässt sich das Telefonbuch des iPhone auf alle Systeme übertragen. So kann man beispielsweise seine iPhone Kontakte an ein Windows System senden, und diese in Outlook importieren.

Prefix Changer und weitere Apps für iPhone / iPod Touch / iPad

Der Prefix Changer ist ab sofort im AppStore erhältlich. Weitere Apps von Peter Lakatos findet man hier.

Currency Exchange Converter für iPhone – iPod Touch – iPad

Während ich noch an der zweiten App für das iPhone arbeite, habe ich heute gleich mehrere Nachrichten von Apple erhalten. Ohne Einwände hat der Currency Exchange Converter das Review von Apple überstanden und steht ab sofort zum Download bereit.

Währungsrechner für das iPhone

Der erste Teil meiner App-Collection für Reisende ist somit erfolgreich abgeschlossen. Der Currency Exchange Converter ist ein Währungsrechner für iPhone, iPod Touch und das iPad.

Umrechnen von beliebigen Währungen

Manchmal fällt es mir schon schwer, den Namen der Landeswährung zu merken, geschweige denn den Wechselkurs. Darum habe ich mir vor Monaten bereits eine Light Version des Currency Exchange Converter programmiert. Vor allem in den ersten paar Tagen in einem neuen Land, ist es auch immer gut zu wissen, wie der Preis im Vergleich zum Land davor ist. Darum kann man mit dem Currency Exchange Converter beliebige Währungen ineinander umrechen.

Kurse werden einmal täglich durch die Europäische Zentralbank aktualisiert

Wie jeder weiss, schwanken die Wechselkurse täglich. Deshalb holt sich der Currency Exchange Converter die aktuellen Kurse einmal am Tag von der Europäischen Zentralbank. Wenn es im Currency Exchange Converter keinen Wechselkurs für eine bestimmte Währung gibt, liegt das alleine daran, dass von der Europäischen Zentralbank keine Kurse zur Verfügung gestellt werden.

Offline Umrechnen möglich

Sollte mal keine Verbindung zum Internet vorhanden sein, kann man den Currency Exchange Converter natürlich trotzdem benutzen. Zur Berechnung wird dann immer der letzte zur Verfügung stehende Kurs genommen. Im schlimmsten Fall ist das der Kurs vom Tag der Fertigstellung des Währungsrechners.

Currency Exchange Converter und weitere Apps für iPhone / iPod Touch / iPad

Der Currency Exchange Converter ist ab sofort im AppStore erhältlich. Weitere Apps für iPhone, iPod Touch und iPad von Peter Lakatos findet man hier.

Update von UITabBar auf iOS7

Beim Updaten meiner App Wusstest Du… ist mir aufgefallen, dass die Art und Weise, wie ich meine TabBar für diese App erzeugt habe, mit der aktuellen iOS Version 7 nicht mehr möglich ist. Wer in alten Xcode Projekten eine UITabBar zur Navigation verwendet hat, muss bei einer Umstellung auf iOS7 beachten, dass es jetzt nicht mehr möglich ist, direkt auf die UITabBar mittels Code zuzugreifen.

Während man bisher bei der dynamischen Codierung einer UITabBar einzelne Tabs hinzugefügt hat und man diese Tabs dann einer View zugewiesen hat, muss man jetzt für jeden Tab einen neuen UIViewController hinzufügen. Das bedeutet, dass man bei einer Umstellung einige Änderungen vornehmen muss. Wo man früher noch die gesamte Darstellung und Anordnung selbst kontrollieren konnte, wird einem diese jetzt vorgegeben. Wenn man den Interface Builder benutzt, muss man die View, in der man eine TabBar angezeigt hat, durch einen UITabBarController ersetzen. Man kann diesem Controller jetzt entweder im Interface Builder so viele UIViewController hinzufügen wie man möchte, oder diese dynamisch codieren. Allerdings sollte man darauf achten, dass bei der Initialisierung des UITabBarControllers alle zugewiesenen UIViewController gleichzeitig in den Speicher geladen werden.

Da die Darstellung durch das iOS vorgegeben wird, bedeutet das für die Standarddarstellung bei einem iPhone, dass es in der UITabBar maximal fünf Tabs geben kann. Bei einem iPad hingegen, sind es acht Tabs. Möchte man mehr UIViewController hinzufügen, dann wird der fünfte (beim iPad, achte) Tab automatisch ersetzt und an dieser Stelle erscheint ein „Mehr…” Button. Bei einem Klick auf den „Mehr…” Button öffnet sich automatisch ein UITableViewController, in dem die restlichen Tabs aufgelistet sind. Dieser „Mehr…“ Button hat einen eigenen Viewcontroller, den MoreViewController. Auf dieser Seite wird sehr gut beschrieben, wie man den MoreViewController an das Design seiner App anpassen kann.

Unterschied Wusstest Du... alte und neue Version

Unterschiede einer UITabBar zwischen den verschiedenen iOS Versionen an Hand der iOS App “Wusstest Du…”

Bei der Umstellung muss man zwar einige Zeit investieren, damit man die alte App wieder zum Laufen bringt, aber das Ganze bringt auch Vorteile für den Entwickler. Ist das Design einmal angepasst, muss man sich, wenn man mehr als fünf (beim iPad, acht) Tabs in einer UITabBar hat, nicht mehr um die Logik dahinter kümmern. Der Benutzer findet eine für ihn vertraute Navigation vor, und sogar die Anordnung der Tabs kann ohne Hinzufügen von zusätzlichem Code verändert werden. Der eigene Code wird dadurch schlanker und übersichtlicher.

Update von alten Xcode Projekten auf iOS7

Wer kennt das nicht, man hat vor geraumer Zeit eine App entwickelt und diese in den AppStore geladen. In der Zwischenzeit hat sich sowohl die Softwareversion der Hardware als auch die Entwicklungsumgebung verändert. Die aktuelle iOS Version ist 7.1 und die aktuelle Xcode Version 5.1.

Ich möchte in diesem Artikel hauptsächlich auf die Änderungen des Provisioning Profiling eingehen. Meiner Meinung nach haben diese Änderungen den Umgang mit Provisioning Profiles für den Entwickler einfacher gemacht. Im Vergleich zu früher übernimmt Xcode jetzt fast das gesamte Provisioning Profiling, aber eben nur fast. Also was hat sich verändert? Auch heute muss man noch auf iTunes Connect gehen und eine neue Version der App hinzufügen. Man fügt die Versionsnummer hinzu und erläutert alle Veränderungen in den jeweiligen Sprachen. Anschließend erhält die App den Status “Prepare for Upload“. Wenn man keine Veränderungen an den bestehenden Einstellungen vornehmen möchte, kann man sofort auf “Ready to Upload Binary“ klicken. Die App erhält jetzt den Status “Waiting For Upload“.

iTunes Connect -> Waiting for Upload

iTunes Connect -> Waiting for Upload

Wenn man jetzt seine Provisioning Profiles noch nicht aktualisiert hat, stößt man spätestens beim Validieren der App auf diverse Fehlermeldungen. Diese lassen sich leicht beheben, wenn man folgende Schritte beachtet. Wichtig: Die bisherigen App IDs bleiben bestehen, man sollte aber unbedingt die Application Services überprüfen. Ein Punkt an dem ich viele Stunden hängen geblieben bin, war die iCloud. Ich habe diese komplett eingerichtet und diese hat sowohl im Simulator als auch auf dem Device einwandfrei funktioniert. Allerdings beim Bereitstellen der App kamen Fehlermeldungen der Art “Invalid Code Signing Entitlements – The signature for your app bundle contains entitlement values that are not supported. For the … Specifically, value …” for key “com.apple.developer.ubiquity-container-identifiers“.

Der Trick, diesen Fehler zu beheben liegt darin, dass der Application Service der iCloud zwar aktiviert sein muss, wenn man eine App für iOS7 bereitstellen möchte, man aber keinen iCloud Container aktivieren darf. Diese Einstellung ist nur für iOS8, leider befindet sich dafür nirgendwo ein Hinweis.

Apple Developer -> Identifiers -> App IDs -> iCloud Einstellungen

Apple Developer -> Identifiers -> App IDs -> iCloud Einstellungen

Developer -> App IDs -> iCloud Einstellungen

Developer -> App IDs -> iCloud Einstellungen

Nun heisst es, die bisher mit Hand erstellten Zertifikate aufzuräumen und alles was Zertifikate und das Installieren von Provisioning Profiles anbelangt, in die Hände von Xcode zu legen. Ich möchte noch einmal darauf hinweisen, dass das folgende Vorgehen für die Distribution von Apps für den AppStore gilt. Die Apple-IDs im folgenden beziehen sich immer auf die ID, mit der man die gerade zu bearbeitende App in den Status “Waiting For Upload“ gesetzt hat.

Alle Zertifikate auf Apple Developer unter Certificates -> Production löschen.

Developer -> Certificates -> Production

Developer -> Certificates -> Production

Alle Provisioning Profiles auf Apple Developer unter Provisioning Profiles -> Distribution löschen.

Developer -> Provisioning Profiles -> Distribution

Developer -> Provisioning Profiles -> Distribution

Xcode beenden und die Schlüsselbundverwaltung öffnen. Hier muss man jetzt alle Schlüssel sowie Zertifikate löschen, die irgendetwas mit Xcode und der Distribution Apple-ID zu tun haben.

Schlüsselbundverwaltung

Schlüsselbundverwaltung

Xcode starten und unter Xcode -> Preferences -> Accounts auf die Apple-ID gehen und auf “View Details…“ klicken. Im oberen Teil des Fensters unter „Signing Identities“ sollte jetzt nur ein Eintrag mit “iOS Development” sein. Im unteren Teil des Fensters sollten jetzt nur die App IDs stehen.

Xcode -> Preferences -> Accounts

Xcode -> Preferences -> Accounts

Xcode -> Accounts -> Signing Identities

Xcode -> Accounts -> Signing Identities

Nun klickt man auf den „Aktualisieren“ Button ganz unten links im Eck. Xcode wird jetzt feststellen, dass es keine “Signing Identities” für die “iOS Distribution“ gibt und Xcode möchte diese automatisch erstellen. Man bestätigt mit OK und besitzt sofort ein signiertes Zertifikat für die Produktion. Man kann jetzt auf der Apple Developer Webseite unter dem Menupunkt Certificates -> Production das von Xcode erstellte Zertifikat sehen. Wichtig: Das Zertifikat darf hier jetzt nur einmal zu sehen sein und es muss das sein, welches gerade eben von Xcode erstellt worden ist.

Developer -> Certificates -> Production

Developer -> Certificates -> Production

Jetzt muss man unter Provisioning Profile -> Distribution das Bereitstellungsprofil für die Distribution der App erstellen. Dafür klickt man oben links auf das „+“-Zeichen und wählt Distribution->App Store aus. Anschließend wählt man eine bereits bestehende App ID aus. Im nächsten Schritt selektiert man das Zertifikat, welches durch Xcode erstellt wurde. Das Profil muss nicht heruntergeladen werden. Dies passiert automatisch im nächsten Schritt.

Man muss nun wieder in Xcode unter Xcode -> Preferences -> Accounts auf die Apple-ID gehen und auf “View Details…“ klicken. Dort muss man wieder auf den „Aktualisieren“ Button klicken. Unter „Provisioning Profiles“ sollte jetzt das gerade eben erstellte Profil erscheinen.

Xcode -> Accounts

Xcode -> Accounts

Abschließend muss man das von Xcode heruntergeladene Profil noch sowohl in den Projekt- als auch in den Target-Einstellungen unter Build Settings -> Code Signing -> Provisioning Profile -> Release -> Any iOS SDK einfügen.

Einstellungen -> Project -> Release

Einstellungen -> Project -> Release

Xcode -> Targets -> Provisioning Profile -> Release

Xcode -> Targets -> Provisioning Profile -> Release

Wenn man Application Services nutzt, sollte man jetzt noch darauf achten, dass diese ebenfalls richtig von Xcode verwaltet werden. Dazu geht man auf die Target Einstellungen und klickt auf Capabilities. Änderungen in den Service Einstellungen kann man jetzt ebenfalls in Xcode vornehmen und Fehler werden jetzt automatisch von Xcode behoben. Jetzt kann man die App endlich archivieren, validieren und bereitstellen.

Xcode -> Product -> Archive

Xcode -> Product -> Archive

Xcode -> Archive -> Submit to the iOS App Store

Xcode -> Archive -> Submit to the iOS App Store

Xcode -> Archive -> Provisioning Profile auswählen

Xcode -> Archive -> Provisioning Profile auswählen

App wurde von Xcode erfolgreich an iTunes Connect geschickt

App wurde von Xcode erfolgreich an iTunes Connect geschickt