Appcelerator Hyperloop - использование сторонней библиотеки swift
Я пытаюсь использовать Hyperloop для использования сторонней библиотеки с открытым исходным кодом. Я хочу использовать библиотеку Sweet Alert iOS.
В библиотеке есть быстрый файл. Я поместил этот файл в каталог src внутри главной папки моего проекта (должен ли он быть внутри папки src? Могу ли я использовать другую папку в моем проекте? Как насчет подкаталогов?).
Согласно документации Titanium:
Все файлы *.swift, найденные в ваших каталогах src, будут автоматически скомпилированы
В моем приложении, когда я делаю что-то вроде этого:
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. Теперь, когда я компилирую, я вижу несколько более интересных выводов о быстрой компиляции, но получаю ошибку:
[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 ответ
Я получаю аналогичную ошибку при создании простого класса Swift и включении его в проект Titanium/Appcelerator с файлом appc.js, настроенным так, как это показано в разреженной документации. Проект будет компилироваться без проблем и запускаться в Xcode Simulator, если я не ссылаюсь на класс из файла Swift. Если я ссылаюсь на этот класс в проекте, возникает ошибка. Основываясь на журнале компиляции, файлы Swift компилируются в проект, но классы, по-видимому, в конце не связываются должным образом для "необходимости" в коде JavaScript.
Когда я ищу в Интернете решения, эта же проблема обнаруживается повсюду, и команда Titanium/Appcelerator никогда не представляет решение. Я пробовал Titanium SDK 6.0.1, 6.1.2 и 6.2.0 с одинаковыми результатами; Я попытался добавить код Swift в существующие проекты и в новые; Я также удалил и переустановил Titanium/Appcelerator. (Я даже попытался запустить их пример приложения без удачи!)
Hyperloop работает, когда я использую собственные фреймворки, такие как UIKit, но, похоже, он не готов для производственных приложений для сторонних фреймворков и классов.
Я надеюсь, что мои открытия помогут вам и другим в отладке проектов, но, к сожалению, я не думаю, что смогу предложить большую помощь помимо этого.