{ "id": "155203", "key": "TIMOB-20484", "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": "17706", "name": "Release 5.4.0", "archived": false, "released": true, "releaseDate": "2016-08-11" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2016-08-04T09:46:22.000+0000", "created": "2016-02-29T13:07:35.000+0000", "epic": { "id": 154964, "key": "TIMOB-20416", "name": "Support Hyperloop modules", "summary": "Support Hyperloop modules in Titanium Mobile", "color": { "key": "color_8" }, "done": false }, "priority": { "name": "Critical", "id": "1" }, "labels": [ "hyperloop", "qe-5.4.0" ], "versions": [], "issuelinks": [ { "id": "52329", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "162412", "key": "TIMOB-23729", "fields": { "summary": "Hyperloop: iOS: Local-embedded frameworks not working with TICORE", "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": "Critical", "id": "1" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } } ], "assignee": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "updated": "2016-08-04T09:46:33.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": "13715", "name": "Hyperloop", "description": "Hyperloop project" }, { "id": "10206", "name": "iOS", "description": "iOS Platform" } ], "description": "Local-embedded frameworks in the /src/ folder are not working - like {{.m}} and {{.swift}} files. We should find a way to recognize local-embedded frameworks correctly.\r\n\r\nProject to reproduce: https://github.com/hansemannn/hyperloop-robot\r\nFramework talking about: https://github.com/orbotix/Sphero-iOS-SDK/tree/master/frameworks/RobotKit.framework\r\n\r\nThe metabase seems to be generated, but the required (proof of concept) method does not work:\r\n{code:javascript}\r\nvar RKRobotDiscoveryAgent = require(\"RobotKit/RKRobotDiscoveryAgent\"); // works\r\nRKRobotDiscoveryAgent.sharedAgent().isDiscovering(); // does not work - class not found\r\n{code}\r\n\r\nThe generated metabase for the framework is attached.\r\n\r\n*{color:red}EDIT{color}*: The problem happens with every other local-embedded framework as well. Using the attached \"Serenity.framework\" and the following demo code doesn't work as well. This very critical for the GA release.\r\n\r\n{code:javascript}\r\nvar Widget = require(\"Serenity/Widget\");\r\nvar test = new Widget();\r\nTi.API.warn(test.image());\r\n{code}", "attachment": [ { "id": "59116", "filename": "robotkit.zip", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-01T09:29:22.000+0000", "size": 132947, "mimeType": "application/zip" }, { "id": "59446", "filename": "Serenity.zip", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-31T11:42:55.000+0000", "size": 93918, "mimeType": "application/zip" } ], "flagged": false, "summary": "Hyperloop: iOS: Local-embedded frameworks not working", "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": 641, "state": "closed", "name": "2016 Sprint 12 SDK", "startDate": "2016-06-04T00:30:28.612Z", "endDate": "2016-06-18T00:30:00.000Z", "completeDate": "2016-06-20T04:25:16.065Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "387104", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "The attached Serenity.framework is empty. Is it supposed to be like that? [~hansknoechel]", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-05-30T06:41:19.000+0000", "updated": "2016-05-30T06:41:19.000+0000" }, { "id": "387166", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Updated the Serenity framework + bundle (should not be required, but would be good to see if it works).", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-05-31T11:41:38.000+0000", "updated": "2016-05-31T11:41:38.000+0000" }, { "id": "387259", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PR here: https://github.com/appcelerator/hyperloop.next/pull/34\r\n\r\nh4. Steps to test\r\n1. *appc new --classic*\r\n2. install the packaged hyperloop module here: https://github.com/appcelerator/hyperloop.next/releases/tag/1.2.2\r\n3. in tiapp.xml include\r\n{code}\r\n \r\n hyperloop\r\n \r\n \r\n hyperloop\r\n \r\n{code}\r\n4. create a `src` folder and put Serenity.framework in\r\n5. create a `appc.js` file, and use this as content \r\n{code}\r\nmodule.exports = {\r\n\ttype: 'app',\r\n\tgroup: 'titanium',\r\n\tdependencies: {\r\n\t},\r\n\thyperloop: {\r\n\t\tios: {\r\n\t\t\txcodebuild: {\r\n\t\t\t\t/**\r\n\t\t\t\t * any flags available to be passed into the Xcode can be\r\n\t\t\t\t * included here to further customize the xcode build\r\n\t\t\t\t */\r\n\t\t\t\tflags: {\r\n\t\t\t\t\tFRAMEWORK_SEARCH_PATHS: '../../src'\r\n\t\t\t\t},\r\n\t\t\t\t/**\r\n\t\t\t\t * this sample doesn't use StoreKit but this demonstrates\r\n\t\t\t\t * how you can bring in frameworks explicitly. Hyperloop\r\n\t\t\t\t * will automatically determine the required frameworks\r\n\t\t\t\t * but in case you want to force a specific version, you can\r\n\t\t\t\t * include it here\r\n\t\t\t\t */\r\n\t\t\t\tframeworks: [\r\n\t\t\t\t\t'Serenity'\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t/**\r\n\t\t\t * optionally, you can bring in third-party or first-party libraries,\r\n\t\t\t * source code, resources etc. by including them here. The 'key' is the\r\n\t\t\t * name of the package that will be used in the require (if code).\r\n\t\t\t * the values can either be an Array or String value to the directory\r\n\t\t\t * where the files are located\r\n\t\t\t */\r\n\t\t\tthirdparty: {\r\n\t\t\t\t'Serenity': {\r\n\t\t\t\t\t// these can be an array or string\r\n\t\t\t\t\tsource: ['src'],\r\n\t\t\t\t\theader: 'src',\r\n\t\t\t\t\tresource: 'src'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n{code}\r\n6. in {{Resources/app.js}}, use this\r\n{code}\r\nvar Widget = require(\"Serenity/Widget\");\r\nTi.API.warn(Widget.image);\r\n{code}\r\n", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-06-01T08:11:14.000+0000", "updated": "2016-06-01T08:16:09.000+0000" }, { "id": "387737", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Some more thoughts here: Why don't we just say that frameworks can be placed in {{/src/frameworks}} and are detected automatically? So we don't need to map them manually in the appc.js and improve the workflow when trying out new frameworks. It has always been a mess when using framework in native modules, so now we have the chance to work on that process. Maybe it's another effort for 6.0.0, but we should consider it. The same with swift and obj-c files (stored in {{/src/swift}} and {{/src/objc}}). [~cng], [~bgrantges@appcelerator.com] thoughts?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-07T07:48:11.000+0000", "updated": "2016-06-07T07:48:11.000+0000" }, { "id": "387902", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "PR merged. The suggestions to improve the c-spec should be in a separate ticket :)", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-06-09T03:16:03.000+0000", "updated": "2016-06-09T03:16:03.000+0000" }, { "id": "389684", "author": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "body": "h4. Steps used to test\r\n\r\n1. *appc new --classic*\r\n2. install the packaged hyperloop module here: https://github.com/appcelerator/hyperloop.next/releases/tag/1.2.3\r\n3. in tiapp.xml include\r\n{code}\r\n\r\n\tfalse\r\n\ttrue\r\n\r\n\r\n\r\n\thyperloop\r\n\r\n\r\n\r\n\thyperloop\r\n\r\n{code}\r\n4. create a `src` folder and put TesseractOCR.framework in\r\n5. add {{Lenore3.png}} to Resources/iPhone\r\n6. add tessdata folder to Resources/iPhone\r\n7. create a `appc.js` file, and use this as content \r\n{code}\r\n/**\r\n * Hyperloop configuration\r\n */\r\n\r\n\r\nmodule.exports = {\r\n\ttype: 'app',\r\n\tgroup: 'titanium',\r\n\tdependencies: {\r\n\t},\r\n\thyperloop: {\r\n\t\tios: {\r\n\t\t\txcodebuild: {\r\n\t\t\t\t/**\r\n\t\t\t\t * any flags available to be passed into the Xcode can be\r\n\t\t\t\t * included here to further customize the xcode build\r\n\t\t\t\t */\r\n\t\t\t\tflags: {\r\n//\t\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS: 'foo=bar'\r\n\t\t\t\t\tFRAMEWORK_SEARCH_PATHS: '../../src'\r\n\t\t\t\t},\r\n\t\t\t\t/**\r\n\t\t\t\t * this sample doesn't use StoreKit but this demonstrates\r\n\t\t\t\t * how you can bring in frameworks explicitly. Hyperloop\r\n\t\t\t\t * will automatically determine the required frameworks\r\n\t\t\t\t * but in case you want to force a specific version, you can\r\n\t\t\t\t * include it here\r\n\t\t\t\t */\r\n\t\t\t\tframeworks: [\r\n\t\t\t\t\t'TesseractOCR'\r\n\t\t\t\t]\r\n\t\t\t},\r\n\t\t\t/**\r\n\t\t\t * optionally, you can bring in third-party or first-party libraries,\r\n\t\t\t * source code, resources etc. by including them here. The 'key' is the\r\n\t\t\t * name of the package that will be used in the require (if code).\r\n\t\t\t * the values can either be an Array or String value to the directory\r\n\t\t\t * where the files are located\r\n\t\t\t */\r\n\t\t\tthirdparty: {\r\n\t\t\t\t'TesseractOCR': {\r\n\t\t\t\t\t// these can be an array or string\r\n\t\t\t\t\tsource: ['src'],\r\n\t\t\t\t\theader: 'src',\r\n\t\t\t\t\tresource: 'src'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n{code}\r\n6. in {{Resources/app.js}}, use this\r\n{code}\r\nvar G8Tesseract = require('TesseractOCR/G8Tesseract');\r\nvar UIImage = require('UIKit/UIImage');\r\n\r\nvar win = Ti.UI.createWindow({\r\n\tbackgroundColor: 'white',\r\n\tlayout: 'vertical'\r\n});\r\n\r\nvar imageView = Ti.UI.createImageView({\r\n\timage: 'Lenore3.png'\r\n});\r\n\r\nwin.add(imageView);\r\n\r\nvar btn = Ti.UI.createButton({\r\n\ttitle: 'OCR THIS'\r\n});\r\n\r\nwin.add(btn);\r\n\r\nvar textArea = Ti.UI.createTextArea({\r\n\tborderWidth: 2,\r\n\tborderColor: 'blue',\r\n\twidth: Ti.UI.FILL,\r\n\theight: Ti.UI.FILL\r\n});\r\nwin.add(textArea);\r\n\r\nbtn.addEventListener('click', function(e) {\r\n\tvar tess = G8Tesseract.alloc().initWithLanguage('eng+ita');\r\n\tvar img = UIImage.imageNamed('Lenore3.png');\t\r\n\ttess.setImage(img);\r\n\ttess.recognize();\r\n\ttextArea.setValue(tess.recognizedText.toString());\r\n});\r\n\r\nwin.open();\r\n{code}\r\n", "updateAuthor": { "name": "jlongton", "key": "jlongton", "displayName": "Josh Longton", "active": true, "timeZone": "Europe/London" }, "created": "2016-06-30T23:36:10.000+0000", "updated": "2016-06-30T23:37:14.000+0000" } ], "maxResults": 8, "total": 8, "startAt": 0 } } }