Я пытаюсь добавить нативный код swift в мое приложение NativeScript. Согласно этим инструкциям в документации, я могу просто добавить исходный файл swift в App_Resources/iOS/src/
и затем использовать любые открытые классы прямо в моем коде TypeScript. К сожалению, это просто не работает. Я просто получу Cannot find name 'TestClass'
и все.
Шаги для воспроизведения:
- Получите проект fre sh NS с ios
tns create my-app-name --template tns-template-blank-ts
Обновление : Я действительно создал приложение с vue init nativescript-vue/vue-cli-template testapp
. Кажется, это вызвало проблемы.
Добавить
TestClass.swift
к
App_Resources/iOS/src/
import Foundation
public class TestClass: NSObject {
@objc public func echo(param: String) -> String {
return param
}
}
Создание экземпляра в любом исходном файле TypeScript
let instance = new TestClass()
Do
tns debug ios
Компиляция завершится с
Cannot find name 'TestClass'
Я также попытался сгенерировать Наберите TypeScript с помощью TNS_TYPESCRIPT_DECLARATIONS_PATH="$(pwd)/typings" tns build ios
или просто разделите его как любой с declare let KeyCommander: any;
, чтобы исключить вероятность того, что это проблема, связанная с TS. Первый подход не генерирует никаких типизаций для моего пользовательского класса, поэтому код TypeScript все равно не будет компилироваться. Второй подход позволяет компилировать код TS, но происходит сбой при выполнении с JS ERROR ReferenceError: Can't find variable: TestClass
.
. Я также проверил, что файл swift действительно компилируется, вставив синтаксическую ошибку, которая вызовет sh процесс сборки.
Моя версия NativeScript 6.4.0
.
Что мне не хватает?
Обновление : я только что понял, что на самом деле создал приложение с vue init nativescript-vue/vue-cli-template testapp
. Я подтвердил, что, как уже упоминалось, ответ Тайлера Блейка в приложении, созданном с помощью tns cli, описанный процесс действительно работает. В приложении, которое я только что создал с vue init
, это не так, objc!nsswiftsupport.d.ts
не генерируется.
Теперь вопрос: что вызывает разницу?