{ "id": "151076", "key": "TIMOB-19489", "fields": { "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "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": "14826", "description": "Release 5.1.0-remaining iOS9 features, Android M features", "name": "Release 5.1.0", "archived": false, "released": true, "releaseDate": "2015-11-20" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2015-10-02T21:12:40.000+0000", "created": "2015-09-10T01:48:37.000+0000", "priority": { "name": "Medium", "id": "3" }, "labels": [ "3DTouch", "iOS9" ], "versions": [], "issuelinks": [], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2015-10-28T11:24:43.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": "Apple just presented the new 3D-Touch feature of the iPhone6S. User can press a view and will review an instant feedback providing a context-like menu to select different actions, called {{UIApplicationShortcutItem}}. After clicking on one of the actions, the user will guided to the app where several actions can be performed depending on the action. There are the properties {{type}}, {{localizedTitle}}, {{localizedSubtitle}}, {{icon}} and {{userInfo}}. There is also a {{UIApplicationShortcutIcon}} to configure the icon or associate it with existing (contact) images to personalize the experience.\r\n\r\nWe differentiate *static* vs. *dynamic* shortcut items:\r\n- *Static*: Are set in the Info.plist before launching the app.\r\n- *Dynamic*: Are set in the app to offer a dynamic behavior at runtime.\r\n\r\nAs is currently see it, we can support static action very easy by letting the user write them in the section of our tiapp.xml. Dynamic shortcut items will need an own proxy to receive existing actions and configure own actions.\r\n\r\n*Related documents*:\r\n- https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplicationShortcutItem_class/\r\n- https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIApplicationShortcutIcon_Class/index.html#//apple_ref/occ/cl/UIApplicationShortcutIcon\r\n- https://developer.apple.com/library/prerelease/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW36", "attachment": [ { "id": "56728", "filename": "Screen Shot 2015-09-15 at 19.53.36.png", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-09-16T02:57:13.000+0000", "size": 554103, "mimeType": "image/png" } ], "flagged": false, "summary": "iOS9: 3D-Touch: Support UIApplicationShortcutItem (\"Quick Actions\")", "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": 494, "state": "closed", "name": "2015 Sprint 20 SDK", "startDate": "2015-09-26T00:29:19.845Z", "endDate": "2015-10-10T00:29:00.000Z", "completeDate": "2015-10-12T05:33:30.964Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "364616", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "This would be an awesome thing to make apps more user-friendly", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-09-22T12:53:58.000+0000", "updated": "2015-09-22T12:53:58.000+0000" }, { "id": "364880", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~cbowley] Works great! Altough we can test using the device starting tomorrow. But great to have.\r\n", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-09-24T15:38:34.000+0000", "updated": "2015-09-24T15:38:34.000+0000" }, { "id": "365053", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR (by [~ben.bahrenburg@gmail.com], work in progress): https://github.com/appcelerator/titanium_mobile/pull/7236", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-09-28T00:40:30.000+0000", "updated": "2015-09-28T00:40:30.000+0000" }, { "id": "365699", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR approved, thank you [~ben.bahrenburg@gmail.com]!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-02T21:13:05.000+0000", "updated": "2015-10-02T21:13:05.000+0000" }, { "id": "366234", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "How can I translate static shortcut items?", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-08T10:20:35.000+0000", "updated": "2015-10-08T10:20:35.000+0000" }, { "id": "366791", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "You can simply use a translation key e.g. \"my_title\" and translate it in the i18n/en/app.xml and i18n/de/app.xml. We will provide an example in the shortcuts docs. I remember [~fokkezb] created a ticket for that.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-14T16:33:37.000+0000", "updated": "2015-10-14T16:33:37.000+0000" }, { "id": "366812", "author": { "name": "htbryant", "key": "htbryant", "displayName": "Harry Bryant", "active": true, "timeZone": "Europe/London" }, "body": "Verified as working correctly, Using the example code provided, tested the {{UIApplicationShortcutItem}} feature for 3D touch, adding & removing \"Contact Us\" shortcut, as well as the static / dynamic app shortcut count reading the appropriate values. \r\n\r\nTested on both iPhone 6S & iPhone 6S + devices.\r\n\r\nClosing Ticket.\r\n\r\nOSX El Capitan 10.11\r\nStudio: 4.3.1.201509302304\r\nTi SDK: 5.2.0.v20151009071418 & 5.1.0.v20151008153630 \r\nAppc NPM: 4.2.1-1\r\nAppc CLI: 5.1.0-38\r\n\r\n", "updateAuthor": { "name": "htbryant", "key": "htbryant", "displayName": "Harry Bryant", "active": true, "timeZone": "Europe/London" }, "created": "2015-10-14T19:02:36.000+0000", "updated": "2015-10-14T19:03:00.000+0000" }, { "id": "366904", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~benutzername] [~hansknoechel] that's TIDOC-2341", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-15T08:49:47.000+0000", "updated": "2015-10-15T08:49:47.000+0000" }, { "id": "366908", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "Great news! \r\nAnd the translations work well.\r\n\r\nBut I still can't use 5.1.x causing TC-5718", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-15T08:57:10.000+0000", "updated": "2015-10-15T08:57:10.000+0000" }, { "id": "367767", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "How do I use an own icon file in dynamic shortcut icons?", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-26T09:14:21.000+0000", "updated": "2015-10-26T09:14:21.000+0000" }, { "id": "367770", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~benutzername] for now we're disabling main thread (TIMOB-19760) so TC-5718 is no issue anymore.\r\n\r\nJust set the path to the icon image to the icon property ({{image/myIcon.png}}) which should be a 35p b/w image (so-called template icon). I will release a sample app with it this week.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-26T09:22:53.000+0000", "updated": "2015-10-26T09:22:53.000+0000" }, { "id": "367773", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thanks [~fokkezb]\r\nI just was a little bit confused, because Apple splits it in iconType and iconFile.\r\nBut if you say so, I'll do it that way.", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-26T09:28:32.000+0000", "updated": "2015-10-26T09:28:32.000+0000" }, { "id": "367774", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Mmm, yes. I guess it's always a balance between staying close the original APIs and making it more JS-ish and staying close to our cross-platform APIs.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-26T09:30:55.000+0000", "updated": "2015-10-26T09:30:55.000+0000" }, { "id": "367776", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "That's ok. It's even better to let the code in background decide, to take an integer or a string, than the let the user make mistakes ;)", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-26T09:33:53.000+0000", "updated": "2015-10-26T09:33:53.000+0000" }, { "id": "367976", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~fokkezb] Own images worked in 5.2.0.v20151021171225 and stopped working in 5.2.0.v20151026172037", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-27T11:09:04.000+0000", "updated": "2015-10-27T11:09:04.000+0000" }, { "id": "367980", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~hansknoechel] could this be because we decided to rip out image asset catalogs last minute? (which I heard we did in Flow, not sure why)", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-27T11:40:54.000+0000", "updated": "2015-10-27T11:40:54.000+0000" }, { "id": "367990", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~fokkezb] [~benutzername] We removed the asset catalog in the 5.1.0 by default, because they was discovered an issue where files could not be accessed any more (TIMOB-19757). You can turn it on by using {{true}}. That will also be documented in 5.1.0 and most probably fixed in 5.2.0.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-27T16:03:35.000+0000", "updated": "2015-10-27T16:03:35.000+0000" }, { "id": "367991", "author": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "body": "Ah, good to know. Thanks", "updateAuthor": { "name": "benutzername", "key": "benutzername", "displayName": "Sebastian Klaus", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-27T16:05:22.000+0000", "updated": "2015-10-27T16:05:22.000+0000" }, { "id": "367993", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "[~hans123] to prevent surprises, cant we name the code work with both?", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-27T16:07:23.000+0000", "updated": "2015-10-27T16:07:23.000+0000" }, { "id": "367995", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Nope, the API only accepts an image name inside the asset catalog.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-10-27T16:12:48.000+0000", "updated": "2015-10-27T16:12:48.000+0000" }, { "id": "368112", "author": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "body": "Updated sample and blog post.", "updateAuthor": { "name": "fokkezb", "key": "fokke", "displayName": "Fokke Zandbergen", "active": true, "timeZone": "Europe/Amsterdam" }, "created": "2015-10-28T11:24:43.000+0000", "updated": "2015-10-28T11:24:43.000+0000" } ], "maxResults": 22, "total": 22, "startAt": 0 } } }