{ "id": "169128", "key": "TIMOB-25032", "fields": { "issuetype": { "id": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "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": "20033", "name": "Release 9.0.0", "archived": false, "released": true, "releaseDate": "2020-03-18" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2020-02-14T22:24:49.000+0000", "created": "2017-07-27T14:13:17.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [ "asset-catalog", "breaking-change", "cb-tooling", "engReviewed", "ios" ], "versions": [ { "id": "19572", "description": "Important fixes for 6.1.0", "name": "Release 6.1.1", "archived": false, "released": true, "releaseDate": "2017-06-16" }, { "id": "20884", "name": "Release 8.2.1", "archived": false, "released": true, "releaseDate": "2019-10-25" } ], "issuelinks": [ { "id": "57677", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "150049", "key": "TIMOB-19298", "fields": { "summary": "Develop a Titanium Asset Management System", "status": { "description": "The issue is open and ready for the assignee to start work on it.", "name": "Open", "id": "1", "statusCategory": { "id": 2, "key": "new", "colorName": "blue-gray", "name": "To Do" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } }, { "id": "57687", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "148692", "key": "TIMOB-18998", "fields": { "summary": "iOS9: App thinning: Create XCAssets (imagesets) w/ the cli and access resources within those catalogs at runtime", "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" } }, "priority": { "name": "High", "id": "2" }, "issuetype": { "id": "2", "description": "A new feature of the product, which has yet to be developed.", "name": "New Feature", "subtask": false } } } } ], "assignee": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2020-02-14T22:24:49.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": "As discussed during engineering week, we should step away from generating custom asset-image hashes and instead use the real name. Here are some reasons I had:\r\n* Custom hashes make it extremly uggly to deal with custom storyboards that include images / icons. This is very common, since storyboards should show an empty UI state, that can have tab-icons in it. I've made one for a customer last year and it took me double the time dealing with hashes than implementing a full split-view storyboard\r\n* Custom hashes cannot be used in Hyperloop. There could be utility-methods for it, but that attacks performance again when working with a larger number of images to process\r\n* Custom hashes cannot be used in native module. Same struggle than above. For the [Ti.AlternateIcon|https://github.com/ccavazos/titanium-alternate-icons] module, I needed to basically copy and paste half of our TiFilesystem API's into the module to generate the hashes.\r\n* The *only* contra-point is that a developer might have an image in different directories that has the same name. Besides the fact that no one should ever do that anyway, I don't think anyone actually does. At least I didn't do in 50+ Titanium apps.\r\n\r\nSo what do we need to change?\r\n* Remove the hash-generator from our iOS build\r\n* Loop through the images to detect possible filename-duplicates. Throw error if any matches.\r\n* Remove the hash-bridge in our Titanium core\r\n* Add a note in the release-notes, so people having custom hashes right now can migrate\r\n\r\nThat's it!", "attachment": [ { "id": "67235", "filename": "app.zip", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-16T20:55:35.000+0000", "size": 5015055, "mimeType": "application/zip" }, { "id": "67173", "filename": "TestAssetsCatalog.zip", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2019-12-11T00:05:42.000+0000", "size": 48066, "mimeType": "application/zip" } ], "flagged": false, "summary": "iOS: Resolve asset-catalog hashes back to real names, fail build when detecting duplicates", "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, "comment": { "comments": [ { "id": "448871", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Why have the watch status been removed from this? We need to prioritize this in order to support dark mode in iOS 13 properly. cc [~amukherjee] [~shaig]", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-06-05T19:36:10.000+0000", "updated": "2019-06-05T19:36:41.000+0000" }, { "id": "448873", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2019-06-05T20:00:38.000+0000", "updated": "2019-06-05T20:00:38.000+0000" }, { "id": "448877", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "As discussed with Chris on Slack, I strongly disagree with him. On the native side (both iOS and Android) it will fail as well if you use same filenames, even when in different directories. Simply because modern asset managers do not use paths anymore but store them in a flat hierarchy. Hashing them was a *bad* idea in the first place and got worse every time it was touched. Issues with web views, launch screen images and now dark mode are making this an unmaintainable mess for the future and should be reverted. And again, I am speaking from a developer perspective where I have to suffer with this in really really large projects. Moving forward, the asset catalog plays a more and more important role in the iOS ecosystem (tvOS support, on-demand resources, iOS 13 binary optimization), so any non-conformant naming convention makes this harder in Titanium.\r\n\r\nAnd no, a cross-platform asset management system is not requested by anyone, so I wouldn't suggest to spend time on that, since it only breaks more overhead to the getting started with Titanium.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2019-06-05T22:32:09.000+0000", "updated": "2019-06-05T22:32:09.000+0000" }, { "id": "453141", "author": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "body": "[~vijaysingh] The only thing that comes to mind is the storyboards. If someone has a custom storyboard launch screen and wants to use a specific image, today they would need to build the app, then open the generated Xcode project to view the asset catalog and see what the hashed name is, then refer to the hashed image in the storyboard.\r\n\r\nIf you remove the hashing, then their images won't be hashed and they won't be resolved. If the simply update their storyboards, then they're good to go.\r\n\r\nThis is technically a breaking change, but we could add code that continues to hash images referenced from a storyboard -or- add code that fixes the images in the storyboard as it's copied to the build dir. The latter seems a little less horrible.", "updateAuthor": { "name": "cbarber", "key": "cbarber", "displayName": "Chris Barber", "active": true, "timeZone": "America/Chicago" }, "created": "2019-12-11T06:07:56.000+0000", "updated": "2019-12-11T06:07:56.000+0000" }, { "id": "453727", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PR - https://github.com/appcelerator/titanium_mobile/pull/11437\r\n\r\nNote - For testing, create alloy app. Replace app folder with attached folder. Run the app, click on label. It should add three image view on window.", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-01-16T20:49:21.000+0000", "updated": "2020-01-16T20:57:22.000+0000" }, { "id": "454027", "author": { "name": "ssaddique", "key": "ssaddique", "displayName": "Sohail Saddique", "active": true, "timeZone": "Europe/London" }, "body": "FR Passed. PR Merged.", "updateAuthor": { "name": "ssaddique", "key": "ssaddique", "displayName": "Sohail Saddique", "active": true, "timeZone": "Europe/London" }, "created": "2020-02-04T16:38:01.000+0000", "updated": "2020-02-04T16:38:01.000+0000" }, { "id": "454295", "author": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Verified based on the test instructions.\r\nVerified on:\r\nMac OS: 10.15.1\r\nSDK: 9.0.0.v20200214090043\r\nAppc 8.0.0-master.6\r\nJDK: 11.0.4\r\nNode: 10.16.3\r\nStudio: 6.0.0.201911251516\r\nXcode: 11.2\r\nDevice: iPhone XR(v13.2.2)", "updateAuthor": { "name": "ssekhri", "key": "ssekhri", "displayName": "Satyam Sekhri", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2020-02-14T22:24:49.000+0000", "updated": "2020-02-14T22:24:49.000+0000" } ], "maxResults": 11, "total": 11, "startAt": 0 } } }