Я пытаюсь понять, как лучше всего добавить код нативной библиотеки в плагин NativeScript для iOS. В прошлом мне удавалось приносить CocoaPod и получать от него доступ к символам. Итак, я хочу создать свой собственный.
Я слежу за процессом создания моего библиотечного проекта pod lib create TestPod
. (https://guides.cocoapods.org/making/using-pod -lib-create.html)
«Библиотека» - это тривиальный тест: она просто создает класс с функцией, которая возвращает
узнаваемая строка приветствия.
Связанная демонстрация «Пример приложения» создает текстовую метку, которая отображает эту строку.
Все это работает, как ожидалось, все работает в чистом мире iOS (написанном на Swift).
На стороне Nativescript я использую Seed плагина Nativescript и объявляю свой Podfile в папке src / platform / iOS, как указано. Мой «плагин» (тривиальный, как тест) имеет специфичные для iOS части в файле pluginName.ios.js. У меня есть отдельный метод тестирования, который проверяет, могу ли я достигать и использовать собственные символы платформы iOS (например, NSMutableString) и который работает должным образом. Я хочу сделать то же самое с машинным кодом, импортированным из моей библиотеки.
Но когда я добавляю Podfile в Nativescript, он строится нормально, но я не вижу никаких символов, как я ожидал бы увидеть. Я генерирую типизацию и не нахожу ее, но я нашел файл типизации TestPod.d.ts, в котором объявляется некоторая информация о версии, и таинственный класс с именем «UITest», который я не определял и не похожий на мой Класс "SimpleTest", которого нигде не могу найти.
Я уверен, что мне здесь не хватает чего-то, что очевидно для знающих. Но я не могу догадаться, что это такое. Любые идеи?
import Foundation
@objc public class SimpleTest : NSObject {
public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
Я вызываю это в плагине, используя следующее:
public testNativeLib() : string {
let str:string;
try {
const testClass = new SimpleTest()
str = testClass.announce()
} catch(e) {
str = e.message;
}
return str;
}
И то, что я получаю для str, - это сообщение об ошибке catch case: «Не удается найти переменную: SimpleTest»
1 ответ
Не видя источника файла пода; можно только предположить, что вы не использовали @objc ни для чего, что хотели бы раскрыть. Если вы не раскрываете что-либо с помощью @objc (или производного от собственного класса objc, поэтому он автоматически помечается меткой swift), NativeScript не может его увидеть.
Обратите внимание, что это некоторые типы в Swift, которые в настоящее время не могут быть использованы NativeScript (или ObjC), и вам нужно быстро написать некоторый код оболочки, используя типы, совместимые с ObjC, чтобы NativeScript мог его использовать.
См.: https://docs.nativescript.org/guides/ios-source-code для получения дополнительной информации о требованиях ...
Код должен быть:
import Foundation
public class SimpleTest : NSObject {
@objc public func announce() -> String {
return "Greetings from Swift code in a library"
}
}
Переместите @objc
к фактическому свойству / функции, которую вы хотите показать. NSObject
уже вызовет отображение класса, если у него есть открытые члены.
Сгенерированные метаданные:
Полная демонстрация с использованием быстрого исходного файла в плагине теперь находится по адресу
Если у меня есть полный контроль над источником, я обычно не буду добавлять в микс еще одну движущуюся часть (например, коконоду); просто позвольте xcode скомпилировать быстрый код и раскрыть его, не нужно добавлять какие-либо дополнительные места, которые могут сломаться.
Однако, если вы хотите увидеть, как создать настоящий быстрый плагин CocoaPod; проверить любой из этих репозиториев плагинов, которые используют быстрый код и cocoapod:
- https://github.com/tomvardasca/nativescript-crypto
- https://github.com/arpit2438735/nativescript-tglib
- https://github.com/Daltron/NotificationBanner
В случае настоящего коконода; у вас должен быть действующий Podfile и действительный файл podspec! Как только вы их получите; когда вы создаете приложение, вы можете открыть xcode и убедиться, что cocoapod подключен. Если он не связан, ваш подфайл / podspec испорчен и имеет отношение к проблеме с Cocoapod, и это не проблема с NativeScript. Итак, в этом случае; вам нужно следовать некоторым руководствам по Cocoapod, чтобы заставить его работать.
Пожалуйста, обрати внимание; Настоятельно рекомендуется часто запускать ядерную бомбу в папке вашей платформы во время тестирования с помощью cocoapods. Иногда Nativescript не обнаруживает изменения в собственном коде должным образом и поэтому не восстанавливает файлы проекта / рабочей области xcode. Так что ядерная бомбардировка вашей папки платформ, конечно, заставит ее восстановить их. Если вы этого не сделаете, вы БУДЕТЕ тратить много времени, возясь с коконодами.
При запуске демонстрационного проекта вы увидите следующее:
Кроме того, в демонстрации метаданные, сгенерированные из кода, который я сохранил в папке demo / metadata, чтобы вы могли их просмотреть.
Похожие вопросы
Новые вопросы
cocoapods
CocoaPods — это менеджер зависимостей для проектов Objective-C и Swift Cocoa.