{ "id": "168499", "key": "TIMOB-24850", "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": "11258", "description": "Holding Pen for Triaged Issues", "name": "Backlog", "archived": false, "released": false } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2018-01-20T18:45:45.000+0000", "created": "2017-06-19T19:41:42.000+0000", "priority": { "name": "High", "id": "2" }, "labels": [], "versions": [ { "id": "19572", "description": "Important fixes for 6.1.0", "name": "Release 6.1.1", "archived": false, "released": true, "releaseDate": "2017-06-16" } ], "issuelinks": [ { "id": "55843", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "169619", "key": "TIMOB-25188", "fields": { "summary": "iOS: Preserve permissions when packaging module platform folder", "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": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } } ], "assignee": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2018-08-06T17:49:09.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" } ], "description": "h5. description\r\nWhen adding an iOS library to Titanium project using Hyperloop, I am getting the following compile-time error:\r\n{code}\r\n 2017-06-12T13:31:57.190Z | ERROR | An uncaught exception was thrown!\r\nENOENT: no such file or directory, open '/test/hyperloop-test2/build/hyperloop/ios/js/MapController/MapController.js'\r\n2017-06-12T13:31:57.190Z | ERROR | ENOENT: no such file or directory, open '/test/hyperloop-test2/build/hyperloop/ios/js/MapController/MapController.js'\r\n{code}\r\n\r\nHyperloop is generating the following files:\r\n\r\n/hyperloop/ios/js/mapbundle/mapbundle.js\r\n/hyperloop/ios/js/mapbundle/mapbundleparser.js\r\n/hyperloop/ios/js/mapbundle/mapconroller.js\r\n\r\nThere is only one library that is imported (along with headers): libMapSDK.a\r\nCode is using: \r\n{code}var MapController = require('MapBundle/MapController'); {code}\r\n\r\nSomething is triggering it to look for 'MapController/MapController.js'\r\n\r\nWhen the build fails, there is a file: /hyperloop/ios/js/mapcontroller/mapconroller.m\r\n\r\nh5. copy of project\r\n[code sample|https://axwaysoftware-my.sharepoint.com/personal/vvazquezmontero_axway_com/_layouts/15/guestaccess.aspx?guestaccesstoken=te41EupDaFiBN30%2b242yoNELLLvYniZn2yDwrTzInZo%3d&docid=2_125060abcaf404087bcef581c58453093&rev=1]", "attachment": [], "flagged": false, "summary": "Hyperloop: iOS - Error building project containing Aisle411 library", "creator": { "name": "vvazquezmontero", "key": "vvazquezmontero", "displayName": "Victor Vazquez Montero", "active": true, "timeZone": "America/Los_Angeles" }, "subtasks": [], "reporter": { "name": "vvazquezmontero", "key": "vvazquezmontero", "displayName": "Victor Vazquez Montero", "active": true, "timeZone": "America/Los_Angeles" }, "environment": "OS: Mac OS X 10.12.5\r\nNode.js: 6.10.3\r\nnpm: 3.10.10\r\nAppc CLI: 6.2.2.\r\nTitanium CLI: 5.0.114\r\nTitanium SDK: 6.1.0.GA\r\nHyperloop: 2.1.1", "closedSprints": [ { "id": 990, "state": "closed", "name": "2018 Sprint 02 SDK", "startDate": "2018-01-14T22:48:43.544Z", "endDate": "2018-01-28T22:48:00.000Z", "completeDate": "2018-01-29T16:22:42.911Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "422292", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "[~hansknoechel] -- Is there anything obvious that you can see that I am doing wrong with this hyperloop module?", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-06-19T20:38:12.000+0000", "updated": "2017-06-19T20:38:12.000+0000" }, { "id": "422296", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~brentonhouse] What's the framework? Can you send me over some files?", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-06-19T20:44:50.000+0000", "updated": "2017-06-19T20:44:50.000+0000" }, { "id": "422299", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "It is the aisle411 iOS SDK. I attached it to the support ticket that I created last week -but I can attach it here as well.- Wasn't sure if the code sample link contained it. There is a separate ticket for the aisle411 Android SDK.\r\n\r\nDoesn't look like I can add attachments to the ticket. I can put it in dropbox and share the link. Thanks!!", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-06-19T20:47:47.000+0000", "updated": "2017-06-19T20:51:39.000+0000" }, { "id": "422336", "author": { "name": "vvazquezmontero", "key": "vvazquezmontero", "displayName": "Victor Vazquez Montero", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Hey [~hansknoechel], \r\nI have a zip stored on one drive at the link provided in the ticket\r\n", "updateAuthor": { "name": "vvazquezmontero", "key": "vvazquezmontero", "displayName": "Victor Vazquez Montero", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-06-20T00:01:27.000+0000", "updated": "2017-06-20T00:01:27.000+0000" }, { "id": "424041", "author": { "name": "amukherjee", "key": "amukherjee", "displayName": "Abir Mukherjee", "active": true, "timeZone": "America/Los_Angeles" }, "body": "[~jperez], [~emerriman] I am to reproduce this error. I used the sample project, and get the exact same compile-time error when I build to Simulator.", "updateAuthor": { "name": "amukherjee", "key": "amukherjee", "displayName": "Abir Mukherjee", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2017-07-12T23:32:56.000+0000", "updated": "2017-07-12T23:33:27.000+0000" }, { "id": "424050", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there, here are the issues with the project: There is a static library that links to header files received from other sub-directories. Hyperloop will assume those as the framework-name right now, resulting in the above require-statements that fail. Also the \".bundle\" is placed in one of the sub-directories, but is not marked as a resource. It should just be copied to {{app/assets/iphone}} and will be picked up properly after that. The general issue here is that the discussed library (Aisle411) does not support a proper framework-structure (neither a .framework, nor a CocoaPods dependency), making the general usage - same for native and Titanium - pretty complicated. We discussed this internally in the Hyperloop team and actually considered to wrap everything to a proper framework that can be used, but for right now, the following should resolve the issues:\r\n1. Copy {{native/aisle411/res/MapSDKResources.bundle}} to {{app/assets/iphone/MapSDKResources.bundle}}\r\n2. Put all header files in one global \"MapBundle\" directory (see example [here|https://abload.de/img/bildschirmfoto2017-0742kik.png]), so it get's picked up correctly\r\n\r\nSide-note #1: You might think now \"Hyperloop could be smart enough to pick up those sub-directories for header files automatically\" and I am agreeing :-) It is already in review for 2.2.0 as part of the dynamic-framework support (see TIMOB-23570), so this won't cause any confusions in the future anymore. \r\n\r\nSide-note #2: If possible, the vendor of the library should be contacted to expose a properly packaged framework that can be used in modern architectures. I think it will not only help our customers but also any other developers using their solution as well. \r\n\r\nLet me know if there are any follow-up questions to be discussed, thanks everyone!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-07-13T01:21:15.000+0000", "updated": "2017-07-13T01:26:16.000+0000" }, { "id": "424117", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "[~hknoechel] -- I moved everything around but now I am getting this compile-time error:\r\n\r\n\r\n{noformat}\r\n[ERROR] ** BUILD FAILED **\r\n[ERROR] The following build commands failed:\r\n[ERROR] CompileC build/Intermediates/hyperloop-test2.build/Debug-iphonesimulator/hyperloop-test2.build/Objects-normal/x86_64/mapbundle.o /Users/brenton/Documents/test/hyperloop-test2/build/hyperloop/ios/js/mapbundle/mapbundle.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler\r\n{noformat}\r\n", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-07-13T21:51:49.000+0000", "updated": "2017-07-13T21:51:49.000+0000" }, { "id": "424184", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there, I just resolved this issue. Here is how:\r\n* The library-name used in the appc.js was invalid, it should be {{MapSDK}}\r\n* Flattening the header-files (as discussed earlier) resolved the problem with the headers\r\n* The static library is no framework, so it should not be placed inside the {{header}} / {{source}} related directories\r\n* Instead, the static library is placed into {{platform/iphone}} and get's picked up the classic module builds do\r\n\r\nDoing that, I just received a successful build and was able to require the following snippet:\r\n{code:js}\r\nvar MapController = require('MapSDK/MapController');\r\n{code}\r\n\r\nI also just attached my demo-project [here|https://www.dropbox.com/s/2c5wbd43v5csia1/test_mapsdk.zip?dl=1] and am actively discussing this with [~brentonhouse] on Slack, so this should be unblocked now. Please note: This was no Hyperloop issue and there is no Hyperloop-related fix necessary. A big issue was the way the library was received, so it's really not an issue from the customer as well. If possible, the customer should push the library-vendors to properly distribute their framework, so other developers can adopt it more easily. Nevertheless, we should improve our docs on the static-library usage and this ticket confirms this. We will schedule a rewrite of all Hyperloop docs for August, including advanced docs for framework-usage (static and dynamic), static-libraries, Cocoapods, more general syntax-comparison between native <-> Hyperloop and all related fields for Hyperloop Android as well.\r\n\r\nPlease let me know if there are additional steps to be helped with!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-07-15T03:00:34.000+0000", "updated": "2017-07-15T03:02:24.000+0000" }, { "id": "426833", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Quick (public) update for the people following here: I am in direct contact with Brenton to deal with the issue. It seems that it's not directly a Hyperloop issue but an issue with the architectures the \"Aisle411\" library is providing. After it was wrapped into a framework, it is missing the 64-bit simulator-architecture ({{x86_64}}), it only has {{armv7, arm64}}. For comparison: The Facebook SDK has {{i386 armv7 x86_64 arm64}} which basically includes 32/64 Bit Simulator as well - which is fundamental when you want to test your applications on the Simulator.\r\n\r\nThe other issue is that the other library ({{AisleNetworking}}) was built as a Swift framework, which needs dynamic library support. Happily, we support that since a while and it seems to work. Unfortunately, it will still crash when trying to use it in non-swift projects, so they are having issues there as well. It even does not work on a native Swift project I've made (Objc as well), because it was compiled with Swift 3.0.2, but all modern Xcode versions (8.1+) use Swift 3.1 and later. \r\n\r\nLong story short: We provided some guidance on what is required to make it work in (any kind of) app and are currently awaiting feedback. Please feel free to contact me for further questions if this relates to you! ", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-17T08:46:19.000+0000", "updated": "2017-08-17T08:46:26.000+0000" }, { "id": "426900", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Update: We received a response about the library issues and it looks like the latest library will work. The native module now builds as well and my sample app runs without the initial startup crash. The repository is currently closed-source on my Github account, Brenton has access to it so he can test the module. We may open source the module (without the SDK's in it), so others can benefit from it as well. \r\n\r\nAnd one side-note: By supporting their library, I was also able to support Swift frameworks in native modules, which was a huge gap for a long time. The required build-hook can be put in any module project that uses Swift frameworks, I will try to put some more information about it together soon.\r\n\r\nThe next step is that Shockoe tests the module and provide feedback about the usage. I think we are at a good point!\r\n\r\n*EDIT*: There will also be no SDK update required to use all this. So once this issue is resolved, the fix-version will remain empty. Just in case anyone wonders.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-18T15:33:27.000+0000", "updated": "2017-08-18T15:36:54.000+0000" }, { "id": "426901", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "Thank you so much [~hknoechel]!! You are awesome (as usual)!!", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-08-18T15:37:47.000+0000", "updated": "2017-08-18T15:37:47.000+0000" }, { "id": "426972", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "- Aisle411 says that they have built the SDK to work with simulators but when we build for iOS simulator, it crashes as soon as it tries to start the app. \r\n- As [~hknoechel] already discovered with his objective-c test, we are not getting any successful callback returned for requestCachedRasterMap. Aisle411 told us to try changing the venueId to 1100951, but we are still not seeing anything in callback for that venueId.\r\n \r\nNotes from aisle411 below:\r\n\r\nThe SDK links also contain the sample applications and header/java docs. For iOS the networking SDK was compiled using swift 3.1 and requires XCode 8.3.x. This means for the iOS app there are 2 frameworks and one bundle you'll need to import. The networking SDK isn't required but was created so you didn't have to write the networking code that interacts with our APIs.\r\n\r\nThe sample apps were created so you could follow how we would create the Aisle411 portion of the Publix application. You'll also want to make sure to import the libstdc++.6.0.9.tbd and libz.tbd frameworks into your project, as the Map SDK requires those libraries.\r\n\r\n\r\n----\r\n\r\n\r\nHere is link to video they sent showing build on simulator: https://drive.google.com/file/d/0B3uHTmZ4t7tZRzltX0t1dHByR00/view\r\n\r\nHere's the updated iOS SDK with bitcode support\r\nhttps://drive.google.com/open?id=0B3uHTmZ4t7tZMmZNa3RaQUtkb0k\r\n\r\nHere's the updated iOS SDK with bitcode support and x86_64 support.\r\nhttps://drive.google.com/open?id=0B3uHTmZ4t7tZbEw2SUZranhycTA\r\n\r\nHere's the latest iOS documentation\r\nhttps://drive.google.com/open?id=0B3uHTmZ4t7tZSjFkZV9wZFVhQXc\r\n\r\nHere's the Android SDK\r\nhttps://drive.google.com/open?id=0B3uHTmZ4t7tZSGFjaTJGaVZSaEk\r\n\r\nHere's the latest Android documentation\r\nhttps://drive.google.com/open?id=0B3uHTmZ4t7tZOGRvNlRNM0ZBSkU\r\n\r\n", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-08-21T15:58:06.000+0000", "updated": "2017-08-21T16:12:12.000+0000" }, { "id": "426973", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Thanks Brenton!\r\n\r\nThe reason why the callbacks were not received is because of the {{com.aisle411.venuekit.plist}} file that needs to be in your project and holds your keys (btw: it's a security hole, because it is copied 1:1 to your app, they should move away from that). Unfortunately that was not documented as well, so it took me a while to realize the context to the file. The simulator architecture looks fine now and we are working on fixing the sim-crash now. It's still because of the Swift-based {{AisleNetworking}} library. They said that it's a utility library to wrap the HTTP-calls - I think we would have a much easier life if we could just use Ti.Network.HTTPClient to do the request. If they can provide the docs for the API, that might also be helpful until the sim-crash is addressed as well (targeting tomorrow morning PST). ", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-21T16:59:46.000+0000", "updated": "2017-08-21T16:59:46.000+0000" }, { "id": "427032", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "I was able to use the module, plist, and instructions from Hans to get info back in callback from venue and bring up the map controller. I am going to update to latest module this morning and try with a reference venueId that we have. I will also try out some of the other features that Hans has implemented in the module.\r\n\r\nPer Hans suggestion, we are putting the com.aisle411.venuekit.plist in the directory: app/assets/ios", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-08-22T13:41:50.000+0000", "updated": "2017-08-22T13:52:15.000+0000" }, { "id": "427039", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "Simulator working with workaround from Hans:\r\n\r\n{code:java}\r\ncd modules/iphone/ti.aisle411/1.0.0/platform/AisleNetworking.framework/\r\nchmod +x AisleNetworking\r\n{code}\r\n", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2017-08-22T15:39:15.000+0000", "updated": "2017-08-22T15:39:15.000+0000" }, { "id": "427049", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Update from me: All issues regarding the current implementation resolved, including building the app for the Simulator, displaying the map and toggle the required properties. Brenton is currently implementing more features from the modules, which I aligned on the sample-app we received. \r\n\r\nAlso, [~jvennemann] will push a Titanium SDK-fix that makes the workaround obsolete. It never occurred before, since we simply didn't support Swift in native modules. \r\n\r\nWe can still do a meeting, but I wouldn't know about what topics at this point :-).", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-22T19:52:41.000+0000", "updated": "2017-08-22T19:52:41.000+0000" }, { "id": "427190", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Update: Everything from the native sample app is implemented now, including shopping-list- and search-modes, overlays and their pins. We will now wait for the exact use-cases and implement an own sample-app based on those and start the Android-development.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-24T17:13:34.000+0000", "updated": "2017-08-24T17:13:34.000+0000" }, { "id": "427247", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Update: The iOS sample-app has been completed today and is now pushed to the Shockoe Bitbucket. The Android version (Hyperloop based) is also pushed, so Shockoe can implement all required Android functionalities with Hyperloop.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-08-25T11:33:13.000+0000", "updated": "2017-08-25T11:33:13.000+0000" }, { "id": "433420", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "This is not an issue anymore, see the previous comments and recent Hyperloop versions for reference.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2018-01-20T18:45:45.000+0000", "updated": "2018-01-20T18:45:45.000+0000" }, { "id": "440042", "author": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "body": "Cleaning up older fixed issues. If this issue should not have been closed as fixed, please reopen.", "updateAuthor": { "name": "emerriman", "key": "emerriman", "displayName": "Eric Merriman ", "active": true, "timeZone": "America/Los_Angeles" }, "created": "2018-08-06T17:49:09.000+0000", "updated": "2018-08-06T17:49:09.000+0000" } ], "maxResults": 34, "total": 34, "startAt": 0 } } }