Appcelerator Hyperloop - 使用第三方swift库

时间:2017-06-29 05:06:34

标签: appcelerator appcelerator-titanium appcelerator-hyperloop hyperloop appc-hyperloop

我尝试使用Hyperloop来使用第三方开源库。我想使用的库是Sweet Alert iOS

图书馆有swift file。我把这个文件放在我项目主文件夹里面的一个src目录里(它是否必须在src文件夹里?我可以在我的项目中使用其他文件夹吗?子目录怎么样?)。

根据Titanium文档:

  

在src目录中找到的任何* .swift文件都将自动编译

在我的应用中,当我做这样的事情时:

var UIView = require('UIKit/UIView');
Ti.API.info('UIView => ' + UIView);

有效。但是如果我尝试要求swift文件中的任何类,我会收到一个错误,它找不到架构x86_64模块。

var sweetAlert = require('SweetAlert');
var cancelAnimatedView = require('CancelAnimatedView');

在查看SweetAlert源代码时,我也注意到SweetAlert类是open而其他类只是常规类:

open class SweetAlert

我不是一个快速的开发者,所以我不知道这意味着什么。

我在这里缺少什么?

修改

一些进展......所以我发现我需要一个appc.js文件来定义src框架工作和MyFramework的名称。我所做的require应该匹配swift文件的文件名。现在当我编译时,我看到一些关于swift编译的更有趣的输出,但是收到错误:

[INFO]  Generating metabase for swift MyFramework /Users/ophir/Documents/Appcelerator_Studio_Workspace/HyperloopTest1/src/SweetAlert.swift

2017-06-29T14:43:44.061Z | ERROR  | An uncaught exception was thrown!
Cannot read property '1' of null

2017-06-29T14:43:44.064Z | ERROR  | Cannot read property '1' of null 

编辑2

我已经清除了swift文件中的所有脚本,并将其缩小到以下失败的脚本:

导入基金会 导入UIKit 导入QuartzCore

public enum AlertStyle {
    case success,error,warning,none
    case customImag(imageFile:String)
}

class SweetAlert: UIViewController {
}

class AnimatableView: UIView {
    func animate(){

    }
}

如果我删除func animate() { },它就不会失败。即使这个函数在一个SweetAlert类中,它也会失败。从我所读到的内容来看,这是一个非常标准的快速代码。

所以这让我想知道 - Hyperloop 2.0.0(!)是否适合生产应用程序?

1 个答案:

答案 0 :(得分:1)

在创建一个简单的Swift类并将其包含在Titanium / Appcelerator项目中时,我收到类似的错误,其中appc.js文件设置了它们在稀疏文档中的显示方式。只要我不从Swift文件中引用该类,该项目就会在没有问题的情况下编译并在Xcode Simulator中运行。如果我在项目中引用该类,则会出现错误。基于编译日志,Swift文件会编译到项目中,但是这些类似乎没有正确地链接到“require”-ing到JavaScript代码中。

当我在线搜索解决方案时,同样的问题出现了,Titanium / Appcelerator团队从未提供过解决方案。我尝试过Titanium SDK 6.0.1,6.1.2和6.2.0,结果完全相同;我已经尝试将Swift代码添加到现有项目和新项目中;我还卸载并重新安装了Titanium / Appcelerator。 (我甚至试过运行他们的示例应用程序而没有运气!)

Hyperloop在我使用本机框架(如UIKit)时可以正常工作,但它似乎还没有为第三方框架和类的生产应用做好准备。

我希望我的发现可以帮助您和其他人调试项目,但不幸的是,我认为除此之外我不会提供太多帮助。