{ "id": "176124", "key": "TIMOB-28394", "fields": { "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "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": "21050", "name": "Release 10.0.0", "archived": false, "released": true, "releaseDate": "2021-05-17" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2021-04-07T17:11:22.000+0000", "created": "2021-03-15T12:41:54.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "ios", "promises", "regression", "window" ], "versions": [ { "id": "21201", "description": "", "name": "Release 10.1.0", "archived": false, "released": true, "releaseDate": "2021-09-28" }, { "id": "21050", "name": "Release 10.0.0", "archived": false, "released": true, "releaseDate": "2021-05-17" } ], "issuelinks": [], "assignee": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2021-04-07T17:11:44.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": "Since upgrading to SDK 10, it seems like the \"openWindow\" / \"tab.open(window\") transitions are broken. It seems like something is intercepting it on the wrong thread, causing the UI glitch. This does not happen with SDK 9.x (we swapped our production version to build with SDK 10 and it starts happening), so this is a pretty critical regression.\r\n\r\nTest-Case:\r\n{code:js}\r\nconst window = Ti.UI.createWindow({\r\n\tbackgroundColor: '#fff',\r\n\ttitle: 'Window 1'\r\n});\r\nconst btn = Ti.UI.createButton({\r\n\ttitle: 'Trigger'\r\n});\r\nbtn.addEventListener('click', () => {\r\n\topenWindow();\r\n});\r\nwindow.add(btn);\r\nconst tabGroup = Ti.UI.createTabGroup({\r\n\ttabs: [\r\n\t\tTi.UI.createTab({\r\n\t\t\ttitle: 'Tab 1',\r\n\t\t\twindow\r\n\t\t})\r\n\t]\r\n});\r\ntabGroup.open();\r\n\r\nfunction openWindow() {\r\n\tconst window2 = Ti.UI.createWindow({\r\n\t\tbackgroundColor: 'blue'\r\n\t});\r\n\tconst container = Ti.UI.createScrollView({\r\n\t\tlayout: 'vertical'\r\n\t});\r\n\twindow2.addEventListener('open', function onOpen() {\r\n\t\twindow2.removeEventListener('open', onOpen);\r\n\t\tload(container);\r\n\t});\r\n\twindow2.add(container);\r\n\ttabGroup.activeTab.open(window2);\r\n}\r\n\r\nfunction load(container) {\r\n\tfor (let i = 0; i < 20; i++) {\r\n\t\tcontainer.add(Ti.UI.createImageView({\r\n\t\t\ttop: 10,\r\n\t\t\twidth: 100,\r\n\t\t\theight: 100,\r\n\t\t\timage: Ti.UI.createView({\r\n\t\t\t\theight: 100,\r\n\t\t\t\twidth: 100,\r\n\t\t\t\tbackgroundColor: 'red',\r\n\t\t\t}).toImage()\r\n\t\t}));\r\n\t}\r\n\tvar url = 'https://www.appcelerator.com';\r\n\tvar client = Ti.Network.createHTTPClient({\r\n\t\tonload: () => {},\r\n\t\tonerror: () => {},\r\n\t\ttimeout: 5000\r\n\t});\r\n\tclient.open('GET', url);\r\n\tclient.send();\r\n}\r\n{code}\r\n\r\nExpected result: Red squares are drawn\r\nActual result: No squares are drawn + (sometimes) the thread is blocked ", "attachment": [ { "id": "67863", "filename": "bug.mov", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-06T07:55:42.000+0000", "size": 868135, "mimeType": "video/quicktime" }, { "id": "67864", "filename": "fix.mov", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-06T07:55:44.000+0000", "size": 1245414, "mimeType": "video/quicktime" }, { "id": "67845", "filename": "NavWindowTest.js", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-16T03:40:57.000+0000", "size": 809, "mimeType": "application/x-javascript" } ], "flagged": false, "summary": "iOS: openWindow transition broken / frame dropping (10.x regression) ", "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": 1221, "state": "closed", "name": "2021 Sprint 7", "startDate": "2021-03-29T19:18:00.000Z", "endDate": "2021-04-09T19:18:00.000Z", "completeDate": "2021-04-12T21:26:15.427Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "458422", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~hknoechel] Can you provide a test case (small) to reproduce this?", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-15T23:32:47.000+0000", "updated": "2021-03-15T23:32:47.000+0000" }, { "id": "458423", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "So, I noticed a NavigationWindow open/close animation issue in the iOS Simulator, but it happens in Titanium 9.3.0. Not sure if its the same as what [~hknoechel] is seeing though.\r\n\r\nSteps to reproduce:\r\n# Build and run [^NavWindowTest.js] for the iOS Simulator.\r\n# After app launches, wait at least 6 seconds.\r\n# Click on the \"Open Child Window\" button.\r\n# Notice that the orange child window opens without any animation.\r\n# Wait at least 6 seconds.\r\n# Click on the \"Close Child Window\" button.\r\n# Notice the child window closes without any animation.\r\n# Click on the \"Open Child Window\" button within 6 seconds.\r\n# Notice the child window opens with a slide animation.\r\n# Click on the \"Close Child Window\" button within 6 seconds.\r\n# Notice the child window closes with a slide animation.\r\n\r\nFor some reason, waiting 6 seconds or more causes open/close slide animation to not work. But I'm seeing this issue in Titanium 9.3.0 as well. I'm not sure if this is a Titanium issue or an iOS simulator issue, but that's my finding.\r\n", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-16T03:46:08.000+0000", "updated": "2021-03-16T03:46:08.000+0000" }, { "id": "458425", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "@Vijay: You can test it with our app (I just re-added you to the repo), by using the latest 10.x branch.\r\n\r\n*EDIT*: I added Chris W. as well", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-16T08:51:31.000+0000", "updated": "2021-03-16T08:53:05.000+0000" }, { "id": "458440", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Any activity here? This is a huge SDK 10 blocker", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-17T21:23:53.000+0000", "updated": "2021-03-17T21:23:53.000+0000" }, { "id": "458442", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~hknoechel] I have started lookin in this-\r\n While building your app, I am facing couple of issue.\r\n1. Issue related extensions. (I resolved by disabling extensions)\r\n2. Issue related with absence of Header folder inside xcframeworks (Resolved it by adding Header folder inside modules xcframework)\r\n3. I am facing another issue related FBLPromises framework. Error says it is not found. I couldn't found this framework in project.\r\n\r\nIs it possible for you to create a small test case to reproduce it and a small video to understand the issue?\r\n\r\nI tried the test case shared by [~jquick]. It is working fine on device iPhone 11 (iOS 14.4) and simulator iPhone 12 Pro Max (iOS 14.4).", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-18T00:16:47.000+0000", "updated": "2021-03-18T00:16:59.000+0000" }, { "id": "458450", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hi Vijay! The FBLPromises error is usually an error caused by other issues on your end, e.g. missing libraries or incremental build issues. I was not able to create a test case for this so far, because it does not seem to happen with every window, indicating that it caused by interrupting the UI thread while drawing a more complex layout. I will try to create a test case, but the source of the bug is really the promise creation, because it works great if I revert [this commit|https://github.com/appcelerator/titanium_mobile/commit/5fa6258f9ec45eefc6a83b95c61b625d62386fd9] (likely [this line|https://github.com/appcelerator/titanium_mobile/commit/5fa6258f9ec45eefc6a83b95c61b625d62386fd9#diff-30207cc237420adbde6370f0966b5ace65298e900041ae900d71769d050ab57dR237]). Again, Chris would be best to look into this as he implemented this change.\r\n\r\nBtw, the CI is broken since 03/09, so latest 10_0_X from build.appcelerator.com is highly outdated", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-18T08:04:43.000+0000", "updated": "2021-03-18T08:06:38.000+0000" }, { "id": "458451", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "See the following test case and set a breakpoint [here|https://github.com/appcelerator/titanium_mobile/blob/master/iphone/TitaniumKit/TitaniumKit/Sources/Kroll/KrollPromise.m#L20] and [here|https://github.com/appcelerator/titanium_mobile/blob/master/iphone/TitaniumKit/TitaniumKit/Sources/API/TiWindowProxy.m#L229].\r\n\r\nDuring my tests, the Promise creation is performed multiple times and the \"open:\" selector rejects the promise when closing the window with {{Window is already opened or opening}}. There must be something wrong with the Promise creation. \r\n\r\n{code:js}\r\nconst window = Ti.UI.createWindow({\r\n backgroundColor: '#fff',\r\n title: 'Window 1'\r\n});\r\n\r\nconst btn = Ti.UI.createButton({\r\n title: 'Trigger'\r\n});\r\n\r\nbtn.addEventListener('click', () => {\r\n openWindow();\r\n});\r\n\r\nwindow.add(btn);\r\n\r\nconst tabGroup = Ti.UI.createTabGroup({\r\n tabs: [\r\n Ti.UI.createTab({\r\n title: 'Tab 1',\r\n window\r\n })\r\n ]\r\n});\r\n\r\ntabGroup.open();\r\n\r\nfunction openWindow() {\r\n const window2 = Ti.UI.createWindow({\r\n backgroundColor: 'blue'\r\n });\r\n const container = Ti.UI.createScrollView({\r\n layout: 'vertical'\r\n });\r\n\r\n window2.addEventListener('open', function onOpen() {\r\n window2.removeEventListener('open', onOpen);\r\n load(container);\r\n });\r\n window2.add(container);\r\n\r\n tabGroup.activeTab.open(window2);\r\n}\r\n\r\nfunction load(container) {\r\n for (let i = 0; i < 100; i++) {\r\n container.add(Ti.UI.createView({\r\n top: 10,\r\n height: 200,\r\n backgroundColor: 'red',\r\n width: '90%'\r\n }));\r\n }\r\n\r\n var url = 'https://www.appcelerator.com';\r\n var client = Ti.Network.createHTTPClient({\r\n onload: function(e) {\r\n for (let i = 0; i < 1000; i++) {\r\n container.add(Ti.UI.createView({\r\n top: 10,\r\n height: 200,\r\n backgroundColor: 'yellow',\r\n width: '90%'\r\n }));\r\n }\r\n },\r\n onerror: function(e) {},\r\n timeout: 5000\r\n });\r\n\r\n client.open('GET', url);\r\n client.send();\r\n}\r\n{code}", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-18T12:57:33.000+0000", "updated": "2021-03-18T13:01:04.000+0000" }, { "id": "458458", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~hknoechel] I am not able to reproduce with the given test case also. Probably a video will be helpful.\r\n\r\n[~cwilliams] Can you please take a look if you can find anything as you have implemented this?", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-19T22:41:49.000+0000", "updated": "2021-03-19T22:41:49.000+0000" }, { "id": "458465", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "I reviewed all changes again and cannot find a fix so far. Reverting the mentioned commit helps, but I have no idea why. We will fork the SDK and rollback all Promise changes to be able to use SDK 10 again for now.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-23T15:29:00.000+0000", "updated": "2021-03-23T15:29:00.000+0000" }, { "id": "458495", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Any update here? This still prevents us from using the latest SDK 10 build.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-03-30T09:14:06.000+0000", "updated": "2021-03-30T09:14:06.000+0000" }, { "id": "458499", "author": { "name": "max87", "key": "max87", "displayName": "Marian Kucharcik", "active": true, "timeZone": "Europe/Prague" }, "body": "Hello guys,\r\nI have this problem too, as you can see on this video(taken on iP11Pro@14.4.1), app built with SDK10.\r\n[video|https://1drv.ms/v/s!AqYLRbx94HRJpA6pD_JiY6fcbw_i]\r\n\r\nIt’s listview and when I click on listitem, tab1 opens new window(creates controller and opens it)\r\nEverything is ok with 9.3.2GA\r\nThanks", "updateAuthor": { "name": "max87", "key": "max87", "displayName": "Marian Kucharcik", "active": true, "timeZone": "Europe/Prague" }, "created": "2021-03-30T16:53:26.000+0000", "updated": "2021-03-30T16:53:26.000+0000" }, { "id": "458504", "author": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~max87] Can you provide a reproducible test case? It will help us to debug it.", "updateAuthor": { "name": "vijaysingh", "key": "vijaysingh", "displayName": "Vijay Singh", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-03-30T20:12:13.000+0000", "updated": "2021-03-30T20:12:13.000+0000" }, { "id": "458512", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~hknoechel], [~max87], I can't reproduce this issue either... but I'm only able to test with the iOS Simulator. I tested with iOS 12.4 and iOS 14.2.\r\n\r\nThe one concern I have in our Titanium 10.0.0 code is that we call JavaScriptCore's {{evaluateScript()}} and define 2 functions every time we create a {{Promise}} on iOS 12. (We don't do this on iOS 13 and higher.)\r\nhttps://github.com/appcelerator/titanium_mobile/blob/master/iphone/TitaniumKit/TitaniumKit/Sources/Kroll/KrollPromise.m#L35-L49\r\n\r\nThe issue with this is that Apple's docs state that whatever is defined in {{evaluateScript()}} will be added to the global context. JavaScript does allow you to define the same function name multiple times in the same script and the last one always wins. So, I'm curious if this will slowly bloat our JavaScript context on iOS 12.\r\nhttps://developer.apple.com/documentation/javascriptcore/jscontext/1451350-evaluatescript?language=objc\r\n\r\nBut this may be off-topic. I'm guessing see this laggy behavior on iOS 14?", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-04-01T05:45:49.000+0000", "updated": "2021-04-01T05:45:49.000+0000" }, { "id": "458515", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Yep, its tested on iOS 14. And it can definitely be reproduced with our app. Also, related to the incorrect Promise rejection, the test case I provided can be used.\n\nShould I do a pull request to request the open/close Promises for now?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-01T18:59:27.000+0000", "updated": "2021-04-01T18:59:27.000+0000" }, { "id": "458516", "author": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Like I said, I can't reproduce it. [~hknoechel], I've even tried running your test code under Xcode and I'm not seeing the \"Window already opened\" warning or anything suspicious in the log. Does the issue only happen on a real device for you? I ask because I've only tested under the iOS Simulator.\r\n\r\nThe only other thing I can think of is that, this may not be so much a bug as really the timing has changed. APIs that have been transitioned to use promises (such as HTTPClient) will start their operation 1 frame later than before. For example, when you open a window, the \"open\" event on iOS is fired before the open-animation starts so that you can position your views before the window is shown. The \"open\" event will still happen at the same time as before, but other async operations that you may kick off in your open listener may start 1 frame later... and if you perform a long blocking operation during the open animation then that may cause the stutter effect you're talking about. It could be that your old code used to perform the async operation initiated by the open listener near immediately and before the open animation started. Honestly, I think that's the only thing I can think regarding what might cause a laggy open animation which means it has nothing to do with the Window.open() promise but more with async operations which proceed it.\r\n\r\nI personally don't object to removing promise support from {{Window.open()}} like APIs, but this was something [~cwilliams] was pushing for. We'd be be removing code for an issue we can't reproduce on our end. (I'm not 100% convinced that this is the actual issue. It clearly hasn't been isolated.)", "updateAuthor": { "name": "jquick", "key": "jquick", "displayName": "Joshua Quick", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2021-04-01T20:43:01.000+0000", "updated": "2021-04-01T20:43:01.000+0000" }, { "id": "458522", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Okay, guys, I found it. After digging through old commits for a whole evening and checking > 4 month of different head-hashes, this is the result:\r\n{code}\r\nmaster / 10_0_X <—— not working!!\r\n0446f8e86a37d385718dcdbfeb3f9cf3a02e7178 - 29.01 <—— not working!!\r\nb22f6b79268885d85e5df6b715fb1eb16b659d95 - 15.01. <—— not working!!\r\n12e8d24001d8468d89ab2ef4d2a2e6e52f7f756f - 13.01. <—— not working!!\r\na6082fd827f92e8132d933a8f288ecb867c3a035 - 04.01. <—— not working!!\r\naa9c9b4e45ccde2f5f79ea105da26dce5c5f4d7e - 15.12. <—— not working!!\r\nc7e65a507a060f49ad4db10888ad9d1c2c7bd745 - 15.12 <—— not working!!\r\n\r\n|\r\n| < — Regression!! https://github.com/appcelerator/titanium_mobile/commit/c7e65a507a060f49ad4db10888ad9d1c2c7bd745\r\n|\r\n\r\ndf14d0aa3663ba66b2499522bc909795db2c69db - 15.12. <—— working!!\r\n2cc7ded1d4c9fa3eebf0a5a0be46c19b9bd8256d - 09.12. <—— working!!\r\nde43774adebbe6de3bc830b4f276946b7e64ca93 09.12. <—— working!!\r\n0e41ce77c276ff42b49d9bd980de2fd2e4381815 - 08.12. <—— working!!\r\n{code}\r\n\r\nAs seen in my little commit \"hunting log\", the bad commit was [this one|https://github.com/appcelerator/titanium_mobile/commit/c7e65a507a060f49ad4db10888ad9d1c2c7bd745] - not related to promises at all! The reason it caused the transition issues was that all affected views (somehow) used the {{toImage()}} function to render annotation images, which can probably also be put into a quick reproducible case for everyone now.\r\n\r\nI would suggest to just revert the commit for now, as it doesn't harm any code right now. If Chris / Vijay come up with an actual fix using the new API's (which this commit was meant for), I'd be happy to test that as well. We made it :-)\r\n\r\n*EDIT*: TIMOB-28394 can also be resolved as Duplicate of this one. Same cause, same fix!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-04T22:15:02.000+0000", "updated": "2021-04-04T22:17:17.000+0000" }, { "id": "458523", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "I added a fully-reproducible test case (focussing rather on the squares than the transitions which are harder to reproduce, but it fixes both).\r\n\r\nPR (to revert the change for now): https://github.com/appcelerator/titanium_mobile/pull/12687", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-05T09:10:42.000+0000", "updated": "2021-04-05T09:10:42.000+0000" }, { "id": "458526", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "https://github.com/appcelerator/titanium_mobile/pull/12687", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2021-04-05T18:14:51.000+0000", "updated": "2021-04-05T18:14:51.000+0000" }, { "id": "458529", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Attached a video of the reproducible test case (*bug.mov*: Current state, *fix.mov*: The fix by reverting the old commit)", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2021-04-06T07:56:18.000+0000", "updated": "2021-04-06T07:56:18.000+0000" }, { "id": "458541", "author": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "body": "merged to master, backport merged to 10_0_X for 10.0.0 target.", "updateAuthor": { "name": "cwilliams", "key": "cwilliams", "displayName": "Christopher Williams", "active": true, "timeZone": "America/New_York" }, "created": "2021-04-07T17:11:44.000+0000", "updated": "2021-04-07T17:11:44.000+0000" } ], "maxResults": 20, "total": 20, "startAt": 0 } } }