{ "id": "161279", "key": "TIMOB-23570", "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": "18429", "description": "", "name": "Hyperloop 2.2.0", "archived": false, "released": true, "releaseDate": "2017-10-16" } ], "resolution": { "id": "1", "description": "A fix for this issue is checked into the tree and tested.", "name": "Fixed" }, "resolutiondate": "2017-09-18T15:14:32.000+0000", "created": "2016-06-22T15:35:36.000+0000", "epic": { "id": 163902, "key": "TIMOB-24020", "name": "Hyperloop Run Script Build Phases", "summary": "Hyperloop: iOS - Support Run Script Build Phases", "color": { "key": "color_3" }, "done": false }, "priority": { "name": "High", "id": "2" }, "labels": [ "hyperloop", "notable", "swift" ], "versions": [], "issuelinks": [ { "id": "53178", "type": { "id": "10000", "name": "Blocks", "inward": "is blocked by", "outward": "blocks" }, "inwardIssue": { "id": "164108", "key": "TIMOB-24057", "fields": { "summary": "Hyperloop: iOS - Adapt native CocoaPods build behavior", "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": "4", "description": "An improvement or enhancement to an existing feature or task.", "name": "Improvement", "subtask": false } } } }, { "id": "54762", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "164402", "key": "TIMOB-24109", "fields": { "summary": "Not able to use Kinvey SDK as third party pod/framework", "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": "Medium", "id": "3" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "54498", "type": { "id": "10002", "name": "Duplicate", "inward": "is duplicated by", "outward": "duplicates" }, "inwardIssue": { "id": "165804", "key": "TIMOB-24376", "fields": { "summary": "Hyperloop: iOS - third party libraries are not getting added to build", "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": "None", "id": "6" }, "issuetype": { "id": "1", "description": "A problem which impairs or prevents the functions of the product.", "name": "Bug", "subtask": false } } } }, { "id": "55967", "type": { "id": "10011", "name": "Includes", "inward": "is included by", "outward": "includes" }, "outwardIssue": { "id": "162402", "key": "TIMOB-23853", "fields": { "summary": "Hyperloop: iOS - Support embedded binaries", "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 } } } }, { "id": "54908", "type": { "id": "10003", "name": "Relates", "inward": "relates to", "outward": "relates to" }, "outwardIssue": { "id": "162402", "key": "TIMOB-23853", "fields": { "summary": "Hyperloop: iOS - Support embedded binaries", "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": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "updated": "2017-10-19T22:43:37.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": "When use_frameworks! is included in Podfile, linking fails due to the framework being looked for in the wrong location. Even if the framework is placed in the expected location, the app will crash upon execution. Details provided below.\r\n\r\nI discovered this issue while trying to use a swift Cocoapod, but it is easily reproduced using the Hyperloop_Sample app as well. I will describe steps to reproduce for both cases.\r\n\r\n1. For Hyperloop_Sample, simply add `use_frameworks!` to the beginning of Podfile and change the platform to 8.0 (frameworks only supported in iOS 8+). Change the min-ios-ver to 8.0 in tiapp.xml as well. As expected, instead of creating static libraries, frameworks for each pod are created instead. These can be seen inside of `build/Release-iphonesimulator`. The first issue comes during linking. The framework is expected to be at `build/iphone/build/Products/Debug-iphonesimulator` as seen in the attached build log (see Sample.log), search for GLCalendarView to see the expected location of the framework on line 4466. I then tried manually copying the 3 frameworks from `build/Release-iphonesimulator` to `build/iphone/build/Products/Debug-iphonesimulator` which allows the app to be built, but when it runs on the simulator, immediately crashes, see the attached crash log (Sample.crash). I'm not real sure what the problem is, just that the error is \"Library not loaded\" for reason \"image not found\".\r\n\r\n2. Next, I created a new project, enabled hyperloop, then tried to use a swift cocoapod. Swift pods require use of `use_frameworks!`, so without this issue being resolved, we will be unable to use any swift pods. I've attached my Podfile (see Podfile). I tried building without referencing the pod in the Podfile, just to test, and while the app builds, it crashes as well, see (swift.crash).", "attachment": [ { "id": "59618", "filename": "Podfile", "author": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "created": "2016-06-22T15:28:24.000+0000", "size": 91, "mimeType": "text/html" }, { "id": "59619", "filename": "Sample.crash", "author": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "created": "2016-06-22T15:23:58.000+0000", "size": 4085, "mimeType": "application/octet-stream" }, { "id": "59620", "filename": "Sample.log", "author": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "created": "2016-06-22T15:11:52.000+0000", "size": 2476353, "mimeType": "text/plain" }, { "id": "59617", "filename": "swift.crash", "author": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "created": "2016-06-22T15:34:15.000+0000", "size": 48981, "mimeType": "application/octet-stream" } ], "flagged": false, "summary": "Hyperloop: iOS - Support use_frameworks flag in Cocoapods", "creator": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "subtasks": [], "reporter": { "name": "rpiwetz", "key": "rpiwetz", "displayName": "Ron Piwetz", "active": true, "timeZone": "America/Chicago" }, "environment": "Hyperloop 1.2.0\r\nAppc CLI 5.3.1-2\r\nSDK 5.4.0.v20160617074028\r\nPod CLI 0.39.0", "closedSprints": [ { "id": 920, "state": "closed", "name": "2017 Sprint 14 SDK", "startDate": "2017-07-02T16:29:41.455Z", "endDate": "2017-07-16T16:29:00.000Z", "completeDate": "2017-07-17T14:39:47.328Z", "originBoardId": 114 } ], "comment": { "comments": [ { "id": "388968", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Hey there! Please follow TIMOB-23530 for further discussions, we already a PR in place for the GA.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-23T21:43:03.000+0000", "updated": "2016-06-23T21:43:03.000+0000" }, { "id": "389265", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "[~hansknoechel] are we sure that the new ticket covers the scenario in this ticket?", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2016-06-28T15:21:35.000+0000", "updated": "2016-06-28T15:21:35.000+0000" }, { "id": "389266", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "body": "Nope it doesn't, I just realized that today. Sorry for closing! And thank you [~rpiwetz] for noticing. We might want to open this one again and handle the issue here. Thanks again!", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-06-28T15:27:57.000+0000", "updated": "2016-06-28T15:28:25.000+0000" }, { "id": "391154", "author": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "body": "[~bimmel] May want to mention this somewhere as a known issue so that people know the current hyperloop module is not able to use swiftpods.", "updateAuthor": { "name": "cng", "key": "cng", "displayName": "Chee Kiat Ng", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2016-07-21T01:52:47.000+0000", "updated": "2016-07-21T01:52:47.000+0000" }, { "id": "398674", "author": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "body": "[~hansknoechel] How does the timeframe for Hyperloop 2.0 align w/ the timeline for Appcelerator 6.0?", "updateAuthor": { "name": "brentonhouse", "key": "brentonhouse", "displayName": "Brenton House", "active": true, "timeZone": "America/Chicago" }, "created": "2016-10-12T13:22:25.000+0000", "updated": "2016-10-12T13:22:25.000+0000" }, { "id": "398735", "author": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-10-12T18:34:43.000+0000", "updated": "2016-10-12T18:35:22.000+0000" }, { "id": "402200", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "A short status update about the current progress on this ticket: I was successfully able to prepare the Hyperloop build pipeline for Swift Pods by integrating a script from CocoaPods which embeds the Frameworks into the Xcode project and copies them over to their required destination. Currently there are two blockers for this ticket: \r\n* TIMOB-24163: If the framework requires Swift only classes/structs, the metabase generation fails. For example Alamofire requires the Swift-only struct URL\r\n* TIMOB-24180: Swift files that have references to each other can not be processed because the Swift metabase parser currently parses them file by file.\r\n\r\nBoth issues can be resolved by using [SourceKit|https://github.com/apple/swift/tree/master/tools/SourceKit] but require a complete rewrite of the Swift metabase parser.", "updateAuthor": { "name": "hknoechel", "key": "hansknoechel", "displayName": "Hans Knöchel", "active": true, "timeZone": "Europe/Berlin" }, "created": "2016-11-29T16:36:39.000+0000", "updated": "2016-12-02T15:56:29.000+0000" }, { "id": "408687", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~hansknoechel], to speed this up i would suggest to split the support for dynamic framework in two parts. In a first step we only support frameworks which expose an Objective-C interface. I have a PoC for that running and it requires no changes to the Swift metabase parser. After that we can focus on bringing support for pure Swift frameworks with the metabase parser rewrite. Thoughts?", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-03-03T01:17:27.000+0000", "updated": "2017-03-03T01:17:27.000+0000" }, { "id": "417836", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "PR: https://github.com/appcelerator/hyperloop.next/pull/159\r\n\r\nThis is the first iteration for support of dynamic frameworks with the {{use_framework!}} flag in CocoaPods. It is currently limited to frameworks that expose an Objective-C interface header, so not all Swift Pods are supported yet. To achieve that we first need to rewrite the Swift Metabase parser and evaluate a few other technical challenges. I'll create a few additional tickets dedicated to that soon and link them to this one.", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-04-21T14:36:47.000+0000", "updated": "2017-04-21T14:36:47.000+0000" }, { "id": "427940", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~hknoechel], updated the PR with the latest changes which means it now also resolves TIMOB-23853.\r\n\r\nBreakdown of important changes:\r\n- Allows usage of {{use_frameworks!}} flag in CocoaPods\r\n- Support of Swift frameworks if they provide an Objective-C interface header\r\n- Hyperloop now automatically picks up all frameworks from modules and the project's {{platform/ios}} folder. No manual configuration needed anymore for frameworks in {{appc.js}}.\r\n\r\n", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-09-15T14:03:55.000+0000", "updated": "2017-09-15T14:04:57.000+0000" }, { "id": "429309", "author": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "body": "[~ewieber], follow these steps to verify. They use they hyperloop-examples project.\r\n\r\n# Add the {{use_frameworks!}} flag to the Podfile as well as {{pod 'AWSS3'}}\r\n# Add the following code to {{app/controllers/index.js}}\r\n{code}\r\nvar AWSS3TransferManagerDownloadRequest = require('AWSS3/AWSS3TransferManagerDownloadRequest');\r\nvar downloadRequest = new AWSS3TransferManagerDownloadRequest();\r\ndownloadRequest.bucket = 'myBucket';\r\n{code}\r\n\r\n*Expected behavior*\r\nThe app should launch successfully. The above code is executed upon opening and makes sure the AWSS3 APIs are available, which come from a dynamic frameworks. The other third-party examples in the app should still work as expected.", "updateAuthor": { "name": "jvennemann", "key": "jvennemann", "displayName": "Jan Vennemann", "active": true, "timeZone": "Europe/Berlin" }, "created": "2017-10-19T22:25:44.000+0000", "updated": "2017-10-19T22:25:44.000+0000" }, { "id": "429311", "author": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "body": "Verified. The use_frameworks! flag can be used in podfile without issue. Tested using the flag with dynamic frameworks and ensuring that their inclusion did not break other third-party frameworks in the project.", "updateAuthor": { "name": "ewieber", "key": "ewieber", "displayName": "Eric Wieber", "active": false, "timeZone": "America/Los_Angeles" }, "created": "2017-10-19T22:43:37.000+0000", "updated": "2017-10-19T22:43:37.000+0000" } ], "maxResults": 15, "total": 15, "startAt": 0 } } }