Erfolgreiche Veröffentlichung einer iOS App mit App-Extensions

Merke: Eine App, die wunderbar lokal auf dem eigenen iPhone läuft, ist noch lange nicht auf iTunesConnect gestellt und im AppStore verfügbar.

Ja, wer kennt es nicht? Man hat eine richtig coole App programmiert mit mega tollen Features, super-tollem Design und Animationen, die Spaß machen.  Anschließend möchte man sie auf iTunesConnect stellen, damit Freunde, Kollegen und vor allem Kunden die App testen können.

Und dann kommt Apple:

  • falsches Zertifikakt 
  • Provisioning Profile fehlt
  • Bundle Identifier passt nicht
  • AppIcons fehlen

Jeder Entwickler wurde bestimmt schon mit mindestens einer der Meldungen konfrontiert und war genervt.

Stellt man sich vor, diese Meldungen kommen mehrfach und nicht nur einmal, ist man wahrscheinlich doppelt und dreifach genevt.

So geschehen bei einer App, in der App-Extensions verwendet wurden . . .

 

Damit Andere diesen Fehler nicht machen, gibt es im Folgenden eine Antwort auf die Frage:

 

Was muss ich alles beachten, wenn ich meine iOS-App, die Extensions hat, auf iTunesConnect stellen will?

 

 

 

 

Kurzbeschreibung der (Beispiel-) App:

Ausgangspunkt ist eine Fitness-App, die über Sprachsteuerung (Siri) gesteuert werden kann, obwohl die App geschlossen ist. Sagt man zum Beispiel "Hey Siri, starte mein Training Berglauf", reagiert Siri und führt eine Funktion in der App aus, ohne diese zu öffnen. Für diesen Fall werden Extensions benötigt.

 

Verwendet man Extensions, macht man eigentlich mehrere Apps

Anleitung für eine erfolgreiche Veröffentlichung

TL;DR

Verwendet man Extensions, macht man eigentlich mehrere Apps. Um die Verbindung der Apps untereinander zu "signalisieren", müssen Team und Signing Certificate identisch sein. Außerdem basieren die Bundle Identifier der Extensions auf dem BI der Haupt-App. Will man Daten zwischen Haupt-App und Extensions austauschen, kommt man an App Groups nicht vorbei.

Hält man sich an die genannten Punkte, sollte die Erstellung des Releases und der Upload auf iTunesConnect fehlerfrei funktionieren.

 

1. Naming Bundle Identifier

Um Funktionen einer nicht geöffneten App mit "Hey Siri" zu verwenden, muss man zuerst zwei Extensions erstellen.

  1. 1. Intents Extension
  2. 2. Intents UI Extension

Beide Extensions brauchen einen Bundle-Identifier, der auf dem Identifier der Haupt-App basiert:

  • Haupt-App: de.firmenname.appname
  • ExtensionA: de.firmenname.appname.siriintent
  • ExtensionB: de.firmenname.appname.siriintentUI

Hält man sich nicht an das Naming, kommt beim Upload auf iTunesConnect die folgende Fehlermeldung:

"Bad bundle identifier. The bundle identifier 'xxxx.xxxx.xxxx' of the application extension AppName.app/PlugIns/AppNameIntent.appex should start with the application's bundle identifier 'xx.xxxxxxxxxx.xxxxxxx' and not contain more than one period '.' after the application's bundle ID. An unknown error occurred."

 

2. Signing Certificate

Für die Haupt-App und die Extensions müssen die identischen Signing Certificate benutzt werden. Das gilt auch für die Teameinstellungen (Development Team). Lässt man Code Signing Style auf automatic und stellt bei Code Signing Identity iOS Developer ein, sollte alles passen. Ist man manuell unterwegs, muss überall der entsprechende Account ausgewählt sein.

Identischen Signing Certificates für Haupt-App und die Extensions

3. (Distribution) Provisioning Profile

Für beide Extensions muss ein Distribution Provisioning Profile erstellt werden. Das geht natürlich nur, wenn man unter "https://developer.apple.com/account/ios/identifier/bundle" für beide Extensions eine App ID angelegt hat (Bundle Identifier beachten).

Eine Wildcard App ID zu erstellen macht an dieser Stelle nicht wirklich Sinn, da man hier den Service App Groups nicht verwenden kann.

Distribution Provisioning Profile für beide Extensions

4. App Groups

App Groups werden benötigt, um Daten zwischen Haupt-App und Extensions auszutauschen. Die gilt z.B. für die gemeinsamen Verwendung von UserDefaults. Erstellen muss man die App Group zuerst unter "https://developer.apple.com/account/ios/identifier/applicationGroup". Anschließend muss man die entsprechende App Group beim Anlegen der App ID aktivieren. Zum Schluss dann nur noch in den entsprechenden Targets unter Capabilities die App Groups anschalten und den richtigen Haken setzen.

 

Ein potenzieller Fehler kann beim Anlegen der App ID passieren, weil die App Group hier eventuell noch nicht auswählbar ist. Falls bei der Zusammenfassung Configurable stehen sollte, muss man zuerst Register klicken und anschließend die neu angelegte App editieren.

App Groups werden benötigt, um Daten zwischen Haupt-App und Extensions auszutauschen

5. Sonstiges

Bei Intents wird eine Property List für AppIntentVocabulary benötigt. Der Upload geht zwar, allerdings bekommt man anschließend  eine Mail von Apple:


Dear Developer,

We identified one or more issues with a recent delivery for your app, "AppName". Your delivery was successful, but you may wish to correct the following issues in your next delivery:

Invalid Siri Support - No example phrase was provided for INStartWorkoutIntent in the "en" language. Please refer to "https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit/global_vocabulary_reference/intent_phrases"

Invalid Siri Support - No example phrase was provided for INEndWorkoutIntent in the "en" language. Please refer to "https://developer.apple.com/documentation/sirikit/registering_custom_vocabulary_with_sirikit/global_vocabulary_reference/intent_phrases"

After you’ve corrected the issues, you can use Xcode or Application Loader to upload a new binary to iTunes Connect.

Best regards,

The App Store Team

Bei Intents wird eine Property List für AppIntentVocabulary benötigt

Fazit

Die beste App bringt nichts, wenn man sie nicht veröffentlichen kann.

Hält man sich allerdings an die Punkte oben, steht der Veröffentlichung einer App mit Extensions nichts mehr im Wege.

Viel Erfolg!

Im Herzen Süddeutsch. Im Handeln Weltoffen.

Kontakt aufnehmen