1

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

该库有一个swift 文件。我已将此文件放在项目主文件夹内的 src 目录中(它必须在 src 文件夹中吗?我可以在项目中使用其他文件夹吗?子目录呢?)。

根据钛文档:

在您的 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 文件中的所有脚本,并将其缩小到以下失败的脚本:

导入 Foundation 导入 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 类中,它也会失败。从我读到的内容来看,这是一个非常标准的 swift 代码。

所以这让我想知道——Hyperloop 2.0.0(!) 准备好用于生产应用了吗?

4

1 回答 1

1

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

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

当我使用原生框架(如 UIKit)时,Hyperloop 确实可以工作,但它似乎还没有准备好用于 3rd 方框架和类的生产应用程序。

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

于 2017-09-12T16:14:37.593 回答