{ "id": "161061", "key": "TIMOB-23511", "fields": { "issuetype": { "id": "7", "description": "gh.issue.story.desc", "name": "Story", "subtask": false }, "project": { "id": "10153", "key": "TIMOB", "name": "Titanium SDK/CLI", "projectCategory": { "id": "10100", "description": "Titanium and related SDKs used in application development", "name": "Client" } }, "fixVersions": [ { "id": "18154", "name": "Release 6.0.1", "archived": false, "released": true, "releaseDate": "2016-12-21" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-12-01T07:44:08.000+0000", "created": "2016-06-13T23:01:55.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "ios10", "qe-6.0.1" ], "versions": [], "issuelinks": [], "assignee": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2016-12-21T19:59:12.000+0000", "status": { "description": "The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.", "name": "Closed", "id": "6", "statusCategory": { "id": 3, "key": "done", "colorName": "green", "name": "Done" } }, "components": [ { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "iOS 10 finally exposed SiriKit, the public framework to interact with Siri. It allows the developer to send requests to Siri in order to fetch information from the following services:\r\n\r\n- Audio or video calling\r\n- Messaging\r\n- Payments\r\n- Searching photos\r\n- Workouts\r\n- Ride booking\r\n\r\nDocs: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/index.html\r\n\r\nWe should expose it as {{ti.siri}} with Hyperloop to access the {{Intents}} and {{IntentsUI}} framework. The big problem to solve here is, that Siri needs to be implemented inside a new target, which currently is only supported by creating a native target manually.", "attachment": [ { "id": "60813", "filename": "IMG_0177.PNG", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:56:36.000+0000", "size": 1719310, "mimeType": "image/png" }, { "id": "60812", "filename": "IMG_0178.PNG", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:56:42.000+0000", "size": 355690, "mimeType": "image/png" }, { "id": "60811", "filename": "IMG_0179.png", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:56:41.000+0000", "size": 642785, "mimeType": "image/png" }, { "id": "60810", "filename": "IMG_0180.png", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:56:40.000+0000", "size": 704298, "mimeType": "image/png" }, { "id": "60809", "filename": "sirikit-sample-app.zip", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:59:53.000+0000", "size": 2580207, "mimeType": "application/zip" } ], "flagged": false, "summary": "iOS10: Support SiriKit", "creator": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "environment": null, "closedSprints": [ { "id": 758, "state": "closed", "name": "2016 Sprint 24 SDK", "startDate": "2016-11-19T01:32:06.991Z", "endDate": "2016-12-03T01:32:00.000Z", "completeDate": "2016-12-05T01:53:38.311Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "390598", "author": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "body": "That would be awesome!\r\nWhat is a target @hans?\r\nThanks", "updateAuthor": { "name": "chmiiller", "key": "chmiiller", "displayName": "Carlos Henrique Zinato", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2016-07-13T12:48:31.000+0000", "updated": "2016-07-13T12:48:31.000+0000" }, { "id": "390599", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~chmiiller] A target is configured as part of an Xcode project. Currently, we have one target that represents the (universal) iOS application. Having support for watchOS apps, we can link native targets (aka extensions) to the Titanium application. So in order to support this, we need both some CLI adjustments as well as the receiver in the Titanium application. That's why I did not set a \"Release Version\" yet.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-07-13T12:54:14.000+0000", "updated": "2016-07-13T12:54:14.000+0000" }, { "id": "402271", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey guys,\r\n\r\nI was able to create a (basic) proof of concept to use Siri to send Messages via the {{INSendMessageIntent}} (it's one of the above intents). Following the steps in TIMOB-17335, I did the following:\r\n\r\n1. Create a native Titanium App with {{appc new}}\r\n2. The name of the example is {{TestApp}}, the in tiapp.xml will be something like {{com.appc.testapp}} \r\n3. Open Xcode and create new project File->New Project->Other->Empty\r\n4. Name it {{TestApp}}\r\n4. Use {{File->New->Target->Application Extension->Intents Extension}} to create the target. By default, Xcode will add some demo code to handle Message Intents, but you can use whatever you want there.\r\n5. Name it {{TestApp}} and change Organization Identifier to {{com.appc.testapp}} so that the {{Bundle Identifier}} is {{com.appc.testapp.testapp}} - You can also suffix it to something like {{siriextension}}, but this is more simple for now\r\n6. If you wish, you can activate scheme when prompted, it doesn't matter. \r\n7. Create folder {{extensions}} in Titanium Project (root) folder and copy the Xcode extension project into it.\r\n8. In tiapp.xml, include these properties in section:\r\n{code:xml}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n{code}\r\n10. Create or edit your App-ID to include the \"Siri\" capabilities, just like you would do with \"Access Groups\" or \"Push Notifications\" in the iOS dev-center\r\n11. Create one app without a wildcard and one with a wildcard (e.g. {{com.appc.testapp.*}} and {{com.appc.testapp}}). The first one is linked in the provisioning profiles section of the target ({{}}), the latter one is used to build the main target / your app.\r\n12. Add the following to the ios-plist-section of your tiapp.xml ({{}} -> {{}} -> {{}}):\r\n{code:xml}\r\nNSSiriUsageDescription\r\nCan we use Siri to do great stuff?\r\n{code}\r\n13. Create a file called {{TestApp.entitlements}} in your Titanium project root (Note: if you also use push-entitlements, copy those keys over there as well, since it will override the CLI-generated one) and paste the following into it:\r\n{code:xml}\r\n\r\n\r\n\r\n\r\n com.apple.developer.siri\r\n \r\n\r\n\r\n{code}\r\n14. You made it!! Use {{appc run -p ios -T device}} or Appcelerator Studio to run your app on the device - SiriKit does not work on the Simulator\r\n\r\nYou can test the changes by talking to Siri: \r\n{quote}Send a Message with TestApp{quote} \r\nIt will know that your app uses the {{Intent Extension}} for handling messages and will ask you for Siri permissions by displaying the message you specified in your plist. You can also specify multiple intents of course, just create another target and link it the same way as above. \r\n\r\nAnd finally, use Hyperloop or a native module to handle the Intent's responses. Since there dozens of classes and delegates to implement here, you should look for the ones your Intent uses and it will be notified by your extension.\r\n\r\nWe may also release a Hyperloop sample app for this, covering a specific Intent use-case, but that's how you can already start using SiriKit today! I also attached some images from my test-app will the app itself as well.\r\n\r\nCode strong!\r\n\r\n*EDIT*: Also made a new guide \"[Creating iOS Extensions: Siri Intents|https://wiki.appcelerator.org/display/guides2/Creating+iOS+Extensions%3A+Siri+Intents]\" with screenshots and more details. Thanks guys!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-30T17:53:09.000+0000", "updated": "2016-12-01T07:43:04.000+0000" }, { "id": "402284", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "Awesome [~hansknoechel]!!!", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2016-11-30T20:37:10.000+0000", "updated": "2016-11-30T20:37:10.000+0000" }, { "id": "403762", "author": { "name": "htbryant", "key": "htbryant", "displayName": "Harry Bryant", "active": true, "timeZone": "Europe/London" }, "body": "Validated, successfully created a titanium app with support for SiriKit, following the guide provided above.\r\n\r\nTested On:\r\niPhone 6 Plus 10.1.2 Device\r\nMac OS Sierra (10.12.2)\r\nTi SDK: 6.0.1.v20161219165108\r\nAppc Studio: 4.8.0.201611121409\r\nAppc NPM: 4.2.8\r\nApp CLI: 6.0.0\r\nXcode 8.2.1\r\nNode v4.4.7\r\n\r\n*Closing ticket.*\r\n\r\n\r\n", "updateAuthor": { "name": "htbryant", "key": "htbryant", "displayName": "Harry Bryant", "active": true, "timeZone": "Europe/London" }, "created": "2016-12-21T19:58:45.000+0000", "updated": "2016-12-21T19:58:45.000+0000" } ], "maxResults": 6, "total": 6, "startAt": 0 } } }