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

Leave a Reply

Your email address will not be published. Required fields are marked *