Siri + Intents

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Siri + Intents

    Hallo zusammen,

    hat schon jemand Siri-Unterstützung in seine App (Oh wie ich dieses Wort hasse :( ) gebaut? Ich bin gerade dabei und bei mir wird die entsprechende Methode im App-Delegate nie aufgegerufen. Also, wie folgt:

    1. App-Extension implementiert, die den entsprechenden Intent-Handler implementiert. Funktioniert, der Handler wird korrekt aufgerufen.

    2. Im Intent-Handler kann man ja eine NSUserActivity erzeugen, muss aber nicht. Die Doku sagt, dass dann iOS eine Default-NSUserActivity erzeugt.

    3. Öffne ich dann die eigentliche Anwendung, so wird die Methode

    Quellcode

    1. - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
    des App-Delegates nie aufgerufen.

    Meines Verständnisses nach sollte diese Methode entsprechend aufgerufen werden, wenn eine NSUSerActivity vorliegt. Habe ich was falsch verstanden?
  • So, da denkt man, man ist in einem innovativen Forum und alle haben schon längst die Siri-Integration in ihren tollen Apps angepackt, aber nix is ;)

    Falls mal jemand darüber stolpert: Die Lösung ist der Rückgabewert des IntentResponse. Gibt man hier "OK" zurück, wird die UserActivity vom System verworfen.
  • Naja, da habe ich mich nach der WWDC direkt drauf gestürzt, um dann festzustellen, dass die Anwendungsfälle von Apple haargenau nicht mit meinen zusammenpassen. Ich bräuchte sowas wie „Suche in APP nach ANFRAGE“ (z.B. „Suche in Macoun nach Siri“), und so etwas gibt es leider nicht. Wahrscheinlich könnten sehr viele Anwendungen von so einer Anfrageart profitieren.
    „Meine Komplikation hatte eine Komplikation.“
  • Genau meine Enttäuschung: So Anfragen wie "Wann beginnt die nächste Schulstunde?" oder "Welches Fach habe ich als nächstes?" gehen ja wohl nicht ... weil die (Stundenplan-) App in keine der genannten Kategorien passt. Und die Notwenigkeit, den - in meinem Fall englischen - App-Namen sagen zu müssen, ist dann das K.O.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Solche speziellen Anfragen sind natürlich auch schwer umzusetzen. Das Apple da gewisse Vorgaben macht, kann ich verstehen. Ich verstehe allerdings nicht, warum Apple hier keine generelleren Anfragen bereitstellt. „Suche in Stundenplan nach nächstes Fach“ wäre ja für deine App vielleicht auch noch in Ordnung.
    „Meine Komplikation hatte eine Komplikation.“
  • So, nächstes Problem. Ich habe jetzt einen Version mit App-Extension bei iTunes-Connect hochgeladen. Da bekomme ich diesen Fehler:

    1 package(s) were not uploaded because they had problems:
    /var/folders/d6/qkcn_rz16qdd7bhtwp2tllxh0000gn/T/62171220-1DC4-4620-8160-D15D51B95C5D/324565004.itmsp - Error Messages:
    ERROR ITMS-90164: "Invalid Code Signing Entitlements. The entitlements in your app bundle signature do not match the ones that are contained in the provisioning profile. According to the provisioning profile, the bundle contains a key value that is not allowed: '6W9YPPJTQY.de.mycompany.myapp' for the key 'application-identifier' in 'Payload/MyApp.app/PlugIns/myappsiri.appex/myappsiri'"
    ERROR ITMS-90046: "Invalid Code Signing Entitlements. Your application bundle's signature contains code signing entitlements that are not supported on iOS. Specifically, value '6W9YPPJTQY.de.mycompany.myapp' for key 'application-identifier' in 'Payload/MyApp.app/PlugIns/myappsiri.appex/myappsiri' is not supported. This value should be a string starting with your TEAMID, followed by a dot '.', followed by the bundle identifier."

    Es ist aber so, das m.E. die Meldung nicht korrekt ist:

    • Es gibt ein provisioning-profile mit der App-ID "de.mycompany.myapp". Damit ist die Anwendung an sich signiert. Das ist natürlich auch der bundle-identifier
    • Die App-Extension hat den bundle-identifier "de.mycompany.myapp.myappsiri" Damit ist ein extra provisioning-profile erstellt.
    Also alles, so wie es in der Apple-Doku steht. Außerdem habe ich mal in dem erzeugten xcarchive bzw- IPA geguckt. Dort haben sowohl die App als auch die Extension die richtigen bundle-identifier und die verwendeten Profile ebenso. Also nix, was zur obigen Meldung passt. Ich bin mit meinem Latein am Ende.

    Hat jemand einen Tipp?
  • Sehr eigenartig. Ich habe das einfach mit dem entsprechenden Xcode-Template erzeugt.

    Wärst Du so nett und mir den Inhalt des "embedded.mobileprovision" einer bereits eingereichten App im AppStore-Build zukommen zu lassen? Also nur den textuellen Teil der plist (Die steht fast am Anfang wenn Du die Datei mal mit einem Editor öffnest). Die tatsächlichen App-IDs kannst Du ja entsprechend anonymisieren. Und zwar sowohl von der App an sich als auch von der eingebetteten Extension?

    Mir geht's darum meine Sachen mal mit einer funktionierenden App zu vergleichen. Vor allem in Hinblick auf App-ID der App und der Extension und dem genauen Aufbau

    ciao

    gandhi
  • Das Format ist ziemlich gemischt (Text & Binär). Der Entitlements-Teil sieht beispielsweise so aus:

    Quellcode

    1. <key>Entitlements</key>
    2. <dict>
    3. <key>keychain-access-groups</key>
    4. <array>
    5. <string>TEAMID.*</string>
    6. </array>
    7. <key>get-task-allow</key>
    8. <true/>
    9. <key>application-identifier</key>
    10. <string>TEAMID.com.mycompany.APP.EXTENSION</string>
    11. <key>com.apple.security.application-groups</key>
    12. <array>
    13. <string>group.com.mycompany.APP</string>
    14. </array>
    15. <key>com.apple.developer.team-identifier</key>
    16. <string>TEAMID</string>
    17. </dict>
    Alles anzeigen
    „Meine Komplikation hatte eine Komplikation.“