{ "id": "141563", "key": "TIMOB-18208", "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": "16593", "description": "Release 4.0.0", "name": "Release 4.0.0", "archived": false, "released": true, "releaseDate": "2015-05-21" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2015-02-18T18:03:38.000+0000", "created": "2014-12-14T15:31:49.000+0000", "priority": { "name": "Critical", "id": "1" }, "labels": [ "appstore" ], "versions": [], "issuelinks": [], "assignee": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "updated": "2015-03-26T20:08:58.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": "The Titanium framework uses a custom version of JavaScriptCore. If an app links to Apple's JavaScriptCore.framework that was introduce in iOS 7, Apple's App Store validator fails because it detects calls to WTFReportBacktrace and WTFReportFatalError which both are referenced inside libTiCore.a.\r\n\r\nAttached various disassembly that shows the calls.\r\n\r\nApple most likely created a special rule so existing Titanium projects are not automatically rejected, but disables that rule if newer frameworks such as JavaScriptCore are used. Now we have an experimental version of our PSPDFKit plugin that works in the App Store, but we really need JSCore to have all of our features - we don't want to provide our customers with a crippled version just because of a naming clash in the Titanium framework.\r\n\r\nThe proper solution here would be to rename/prefix the internal Webkit-methods.", "attachment": [ { "id": "53948", "filename": "com.example.test-iphone-1.0.0.zip", "author": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-02T21:45:37.000+0000", "size": 213872, "mimeType": "application/zip" }, { "id": "53949", "filename": "Screen Shot 2015-01-26 at 1.45.35 PM.png", "author": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-02T21:49:08.000+0000", "size": 73138, "mimeType": "image/png" }, { "id": "53199", "filename": "unnamed.png", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-14T15:31:49.000+0000", "size": 57773, "mimeType": "image/png" }, { "id": "53200", "filename": "unnamed-3.png", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-14T15:31:49.000+0000", "size": 304670, "mimeType": "image/png" }, { "id": "53201", "filename": "unnamed-4.png", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-14T15:31:49.000+0000", "size": 774649, "mimeType": "image/png" }, { "id": "53202", "filename": "unnamed-5.png", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-14T15:31:49.000+0000", "size": 203553, "mimeType": "image/png" }, { "id": "53203", "filename": "unnamed-6.png", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-14T15:31:49.000+0000", "size": 717986, "mimeType": "image/png" } ], "flagged": false, "summary": "Writing a plugin that links to JavaScriptCore.framework produces a naming clash", "creator": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "subtasks": [], "reporter": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "environment": "Titanium Studio, build: 3.4.1.201410281727\r\nSDK 3.4.1GA\r\nXcode 6.1.1", "closedSprints": [ { "id": 291, "state": "closed", "name": "2015 Sprint 01 SDK", "startDate": "2015-01-03T01:00:00.000Z", "endDate": "2015-01-17T01:00:00.000Z", "completeDate": "2015-01-19T17:24:40.828Z", "originBoardId": 114 }, { "id": 345, "state": "closed", "name": "2015 Sprint 04 SDK", "startDate": "2015-02-14T01:00:53.297Z", "endDate": "2015-03-01T01:00:00.000Z", "completeDate": "2015-02-28T15:39:43.652Z", "originBoardId": 114 }, { "id": 330, "state": "closed", "name": "2015 Sprint 03 SDK", "startDate": "2015-01-31T01:00:05.245Z", "endDate": "2015-02-14T01:00:00.000Z", "completeDate": "2015-02-16T21:01:51.914Z", "originBoardId": 114 }, { "id": 272, "state": "closed", "name": "2014 Sprint 25 SDK", "startDate": "2014-12-08T22:49:31.264Z", "endDate": "2014-12-22T01:00:00.000Z", "completeDate": "2015-01-05T18:18:28.523Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "336486", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~steipete] You had mentioned you \"surgically remov[ed] all parts that interact with Apples JavaScriptCore framework.\" Could you elaborate a bit on how you did that? Also, to confirm, you _can't_ use the version of JSCore that we ship--you need to use Apple's version? ", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-12-16T00:52:44.000+0000", "updated": "2014-12-16T00:52:58.000+0000" }, { "id": "336537", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thanks for looking into this.\r\n\r\nFor the current workaround I added `#if !defined(PSPDF_SKIP_JSCORE) || !PSPDF_SKIP_JSCORE` around all headers/implementations that access code interacting with JavaScriptCore, built a custom binary and then linked that binary to our Titanium Plugin (https://github.com/PSPDFKit/PSPDFKit-Titanium)\r\n\r\nWe have a closed source framework and an open source Titanium Plugin that uses this closed source binary. Using the Titanium JavaScriptCore would be really hard, we would need to change the structure and built a separate binary that links to Appcelerator's JSCore (and giving up the open source plugin). That wouldn't be a feasible solution. \r\n\r\nAlso, your version most likely differs from Apple's version, creating a whole new set of Titanium-specific bugs or different behaviors.", "updateAuthor": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-16T07:46:15.000+0000", "updated": "2014-12-16T07:46:15.000+0000" }, { "id": "336573", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hi Peter, we are using in 3.5.0 the tagged version 538.11.1 directly from the WebKit repo (the 3.4.1 version is an earlier version). Either way, there should not be any Titanium-specific bugs.\r\n\r\nHowever, I do see how you would be reluctant to build a Titanium-specific version because it would alter your build process. Are you using the Objective C or C-based API to JSCore?", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2014-12-16T15:27:38.000+0000", "updated": "2014-12-16T15:27:38.000+0000" }, { "id": "336578", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "body": "We're using the Objective-C based API. Our main focus is on the PSPDFKit binary, which has no reference to Titanium. People take that closed source binary and use it to build our Titanium wrapper.\r\n\r\nUsing your JSCore version would mean adding conditionals; a new set of tests; adding two more sets of binaries (since we already have a version with OpenSSL and one without; so now we'd have 4 different combinations). That's not feasible; if we have to choose we'd probably phase out Titanium support then (but I'd rather see this fixed in your platform - we won't be the last who will have a huge code base using all kind of frameworks including JavaScriptCore + a tiny wrapper to make it usable in Titanium.)\r\n\r\nWhat would be the downsides if you renaming the two symbols in question?", "updateAuthor": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2014-12-16T16:24:41.000+0000", "updated": "2014-12-16T16:24:41.000+0000" }, { "id": "340479", "author": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "body": "I noticed you started working on this - what direction are you going with fixing this?\r\nAs we're working on our 4.2 release this would be good to know (including a time frame for the fix)", "updateAuthor": { "name": "steipete", "key": "steipete", "displayName": "Peter Steinberger", "active": true, "timeZone": "Europe/Berlin" }, "created": "2015-01-23T21:53:31.000+0000", "updated": "2015-01-23T21:53:31.000+0000" }, { "id": "340850", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "For the first version we are planning on doing additional name mangling. It may be that for the very first release we have a drop-in replacement for our for TiCore that affected customers can use.\r\n\r\nLonger-term we plan on allowing for the usage of the built-in JSCore which would eliminate that.", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-01-27T22:05:42.000+0000", "updated": "2015-01-27T22:05:42.000+0000" }, { "id": "341718", "author": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "body": "PRs\r\nTiJSCore: https://github.com/appcelerator/tijscore/pull/28\r\ntidebugger: https://github.com/appcelerator/titanium_debugger/pull/30\r\ntitanium_mobile (updating debugger lib)(master): https://github.com/appcelerator/titanium_mobile/pull/6613\r\nNeed to update the built TiJSCore lib once these are merged ", "updateAuthor": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-02T21:34:57.000+0000", "updated": "2015-02-02T22:01:50.000+0000" }, { "id": "341722", "author": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "body": "h4. Updating Your SDK\r\nTiSDK 3.5.0.GA can be updated to include this fix by downloading and updating the [libTiCore.a|https://dl.dropboxusercontent.com/u/7540194/TitaniumLibs/libTiCore.a] and [libti_ios_debugger.a|https://dl.dropboxusercontent.com/u/7540194/TitaniumLibs/libti_ios_debugger.a] libraries.\r\nOnce downloaded, place these libraries in the *iphone* folder of your titanium sdk (overwriting the old libraries).\r\n\r\nh5. Testing instructions \r\nThese steps are to be done after updating the titanium mobile sdk via the instructions above.\r\n1. download and install the attached module \"com.example.test-iphone-1.0.0.zip\"\r\n2. Create an app and include the module that you just installed in the tiapp.xml\r\n3. Package the app for production\r\n4. In the Xcode Organizer validate the app\r\n5. The validation should pass\r\n\r\nWhen the same process is followed before the update, the following error was displayed when validating the app.\r\n!Screen Shot 2015-01-26 at 1.45.35 PM.png!", "updateAuthor": { "name": "jalter", "key": "jalter", "displayName": "Jon Alter", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-02T21:49:27.000+0000", "updated": "2015-02-02T23:03:16.000+0000" }, { "id": "341740", "author": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~steipete] Would you be able to try updating your SDK as [~jalter] mentions and see if that addresses the issue?", "updateAuthor": { "name": "ingo", "key": "ingo", "displayName": "Ingo Muschenetz", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2015-02-02T23:14:02.000+0000", "updated": "2015-02-02T23:14:02.000+0000" }, { "id": "343366", "author": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "body": "New PR agains titanium_mobile master https://github.com/appcelerator/titanium_mobile/pull/6642", "updateAuthor": { "name": "penrique", "key": "penrique", "displayName": "Pedro Enrique", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2015-02-13T20:28:29.000+0000", "updated": "2015-02-13T20:28:29.000+0000" }, { "id": "347464", "author": { "name": "eharris", "key": "eharris", "displayName": "Ewan Harris", "active": true, "timeZone": "Europe/Dublin" }, "body": "Verified fix using:\r\n\r\nMac OSX 10.10.2\r\nTitanium SDK build: 4.0.0.v20150325201813\r\nTitanium CLI, build: 4.0.0-alpha\r\nAlloy: 1.6.0-alpha\r\nXcode 6.2\r\n\r\n\r\nCreated a new app added the module and then packaged in Xcode, no errors were given when packaging.\r\n\r\nClosing ticket.", "updateAuthor": { "name": "eharris", "key": "eharris", "displayName": "Ewan Harris", "active": true, "timeZone": "Europe/Dublin" }, "created": "2015-03-26T20:08:36.000+0000", "updated": "2015-03-26T20:08:36.000+0000" } ], "maxResults": 16, "total": 16, "startAt": 0 } } }