Начало работы с машинной библиотекой взаимодействия
Статья
В этой статье описывается, как приступить к работе с машинной библиотекой с помощью Maui.NativeLibraryInterop, чтобы упростить настройку.
Эти инструкции описывают основные шаги, ключевые точки принятия решений и примеры создания привязок с помощью взаимодействия с машинной библиотекой. Дополнительные рекомендации по конкретным API и реализации см. в документации по собственным пакетам SDK и библиотекам.
Средства командной строки Xcode (xcode-select --install)
Примечание
Можно установить пакет SDK для Android и (или) средства командной строки Xcode в автономном режиме. Однако установка средств командной строки Xcode обычно обрабатывается с помощью Xcode. Аналогичным образом установка пакета SDK для Android обычно обрабатывается с помощью Android Studio и (или) расширения VS Code ДЛЯ .NET MAUI в документации по началу работы с .NET MAUI.
Создание новой привязки
Самый простой способ приступить к созданию новой привязки — клонирование шаблона в репозитории Maui.NativeLibraryInterop и внесение изменений. Чтобы лучше понять, как в настоящее время настроен Maui.NativeLibraryInterop, см. дополнительные сведения в документации по обзору.
Настройка библиотек привязки .NET
Шаблон включает начальный .NET для Android и .NET для библиотек привязки iOS.
Обновите библиотеки привязки, чтобы отразить целевые платформы и версию .NET при необходимости в приложении .NET.
Примечание
Например, если вы стремитесь создать только привязку iOS с помощью .NET 9, можно:
Удаление библиотеки привязки Android в шаблоне/android/NewBinding.Android.Binding и
Обновите целевую платформу в шаблоне/macios/NewBinding.MaciOS.Binding/NewBinding.MaciOS.Binding.csproj , чтобы иметь значение net9.0-ios.
Настройка собственных проектов и библиотек оболочки
Шаблон также включает начальные проекты Android Studio и проекты Xcode.
Обновите собственные проекты, чтобы отразить целевые платформы и версии, необходимые в приложении .NET, и включите собственные библиотеки, интересующие вас, выполните следующие действия.
Настройка: iOS и Mac Catalyst
Проект Xcode находится в шаблоне/macios/native/NewBinding.
Обновите проект Xcode, чтобы отразить целевые платформы и версии, поддерживаемые в приложении .NET.
В проекте Xcode щелкните платформу верхнего уровня и в > цели":
При необходимости добавьте или удалите все назначения поддержки .
При необходимости настройте версию iOS.
Введите собственную библиотеку для iOS и (или) MacCatalyst в проект Xcode, используя любой метод, лучший для вашей библиотеки и ваших потребностей (например, CocoaPods, Swift диспетчер пакетов).
Настройка: Android
Проект Android Studio находится в шаблоне или android/native.
Обновите проект Android Studio, чтобы отразить целевые версии, поддерживаемые в приложении .NET.
Перейдите к файлу build.gradle.kts (:app)
compileSdk Обновление версии по мере необходимости
Перенос собственной библиотеки Android с помощью gradle
Добавьте зависимость пакета в блок зависимостей файла build.gradle.kts (:app ).
Добавьте репозиторий dependencyResolutionManagementrepositories в блок в файле settings.gradle.kts .
Синхронизация проекта с файлами gradle (с помощью кнопки в правом верхнем углу Android Studio).
Создание интерфейса API
Создайте интерфейс API между собственными проектами и проектами привязки .NET, выполнив следующие действия.
Определение API: iOS и Mac Catalyst
На собственной стороне сделайте обновления в шаблоне/macios/native/NewBinding/NewBinding/DotnetNewBinding.swift:
Добавьте инструкцию импорта для импорта только что добавленной собственной библиотеки.
Напишите определения API для api-интерфейсов собственной библиотеки, интересующих вас.
Убедитесь, что проект Xcode успешно выполняет сборку, и вы удовлетворены API.
Вернитесь на сторону .NET, теперь мы готовы взаимодействовать с собственной библиотекой:
Запустите dotnet build из шаблона/macios/NewBinding.MaciOS.Binding , чтобы проверить, что все подключено правильно и хорошо.
Используйте программу Objective Sharpie для создания привязок C# для обновлений Swift API.
Перейдите к разделу template/macios/NewBinding.MaciOS.Binding/bin/Debug/net9.0-ios/NewBinding.MaciOS.Binding.resources/NewBindingiOS.xcframework/ios-arm64/NewBinding.framework в папке вывода проектов привязки MaciOS.
Запустите sharpie xcode -sdks, чтобы получить список допустимых значений целевого пакета SDK для команды bind. Выберите значение, которое соответствует платформе и версии, которую вы используете для следующей команды, например iphoneos18.0.
Запустите sharpie bind против файлов заголовков в xcframework, который был создан проектом привязки.
Обновите содержимое шаблона /macios/NewBinding.MaciOS.Binding/ApiDefinition.cs, заменив его содержимым шаблона /macios/NewBinding.MaciOS.Binding/bin/Debug/net9.0-ios/NewBinding.MaciOS.Binding.resources/NewBindingiOS.xcframework/ios-arm64/NewBinding.framework/sharpie-out/ApiDefinitions.cs и внесите корректировки по мере необходимости (например, именование).
Запустите dotnet build из шаблона/macios/NewBinding.MaciOS.Binding еще раз.
Также см. документацию по objective-sharpie, чтобы узнать больше об этом инструменте.
Определение API: Android
На стороне нативного кода внесите обновления в шаблон /android/native/newbinding/src/main/java/com/example/newbinding/DotnetNewBinding.java:
Добавьте инструкцию импорта для импорта только что добавленной собственной библиотеки.
Напишите определения API для api-интерфейсов собственной библиотеки, интересующих вас.
Убедитесь, что проект Android Studio успешно выполняет сборку, и вы удовлетворены API.
Вернитесь на сторону .NET, теперь мы готовы взаимодействовать с собственной библиотекой:
Запустите dotnet build из шаблона/android/NewBinding.Android.Binding , чтобы проверить, что все подключено правильно и хорошо. (Примечание. Для этого шага потребуется установить JDK 17)
Ссылайтесь на все зависимости привязки Android, добавив элемент @(AndroidMavenLibrary) для шаблона/sample/MauiSample.csproj для каждой зависимости maven, привязанной к собственному проекту Android. Это позволит включить проверку зависимостей Java в вашем проекте и приведет к тому, что последующие сборки будут выдавать предупреждения или ошибки при отсутствующих зависимостях. Эти предупреждения и ошибки можно устранить, добавив элементы @(AndroidMavenLibrary) или @(PackageReference), как предложено, чтобы удовлетворить цепочку зависимостей Java для собственной библиотеки, которую вы привязываете. Примечание. Зависимости gradle/maven часто должны быть явно указаны, так как они не включаются в вашу библиотеку автоматически.
Класс заполнителя DotnetNewBinding можно переименовать, чтобы лучше отразить оболочку собственной библиотеки. Дополнительные примеры и советы по написанию определений API см. в разделе ниже: Изменение существующей привязки.
Использование API в приложении .NET
Шаблон включает пример приложения .NET MAUI в шаблоне/образце/MauiSample, который ссылается на проекты привязки .NET и делает собственные библиотеки немедленно готовыми к использованию!
Если вы заинтересованы в использовании собственных приложений .NET MAUI, .NET для Android, .NET для iOS и /или .NET для приложений Mac Catalyst, вы можете сделать это, изменив файлы проекта приложения .NET, чтобы ссылаться на библиотеки привязки:
XML
<!-- Reference to MaciOS Binding project --><ItemGroupCondition="$(TargetFramework.Contains('ios')) Or $(TargetFramework.Contains('maccatalyst'))"><ProjectReferenceInclude="..\..\macios\NewBinding.MaciOS.Binding\NewBinding.MaciOS.Binding.csproj" /></ItemGroup><!-- Reference to Android Binding project --><ItemGroupCondition="$(TargetFramework.Contains('android'))"><ProjectReferenceInclude="..\..\android\NewBinding.Android.Binding\NewBinding.Android.Binding.csproj" /></ItemGroup>
Изменение существующей привязки
Если существующая область API не предоставляет функциональные возможности, необходимые в собственном проекте, пришло время внести собственные изменения!
IOS и Mac Catalyst
В проекте Xcode вы найдете один или несколько файлов Swift, определяющих область общедоступного API для привязки. Например, register метод для обмена сообщениями Firebase определяется следующим образом:
Swift
@objc(MauiFIRMessaging)
publicclassMauiFIRMessaging : NSObject{
@objc(register:completion:)
publicstaticfuncregister(apnsToken: NSData, completion: @escaping (String?, NSError?) -> Void) {
let data = Data(referencing: apnsToken);
Messaging.messaging().apnsToken = data
Messaging.messaging().token(completion: { fid, error in
completion(fid, error asNSError?)
})
}
// ...
}
Примечание
Собственные типы API-оболочки, которые будут использоваться привязкой .NET, должны быть объявлены как public и должны быть помечены и @objc(NameOfType) методы также должны publicбыть помечены, а также может воспользоваться аналогичными заметками @objc(methodName:parameter1:) , в которых указано имя и параметры, которые помогают повлиять на привязку, с которой будет генерироваться цель sharpie.
В этом методе видно, что область общедоступного API использует только типы, о которых уже известно .NET для iOS: NSData, StringNSError и обратном вызове.
Firebase.MaciOS.Binding В проекте файл ApiDefinitions.cs содержит определение привязки для этого СОБСТВЕННОго API-оболочки:
Предположим, что вы хотите добавить метод для отмены регистрации. Код Swift будет выглядеть примерно так:
Swift
@objc(unregister:)
publicstaticfuncunregister(completion: @escaping (NSError?) -> Void) {
// need delegate to watch for fcmToken updatesMessaging.messaging().deleteToken(completion: { error in
completion(error asNSError?)
})
}
Вторая половина будет обновлять файл ApiDefinitions.cs в проекте привязки, чтобы предоставить этот новый метод. Это можно сделать двумя способами:
Можно вручную добавить обязательный код.
После создания проекта привязки вы можете запустить инструмент objective sharpie для создания файла ApiDefinitions.cs. Вы можете попытаться найти соответствующие изменения из этого файла и скопировать их вручную или попытаться скопировать по всему файлу и посмотреть на дифф, чтобы найти нужную часть.
В этом случае изменения в ApiDefinitions.cs будут следующими:
После внесения этих изменений можно перестроить проект привязки, а новый API будет готов к использованию из проекта .NET MAUI.
Примечание
Проекты привязки для Mac/iOS не используют исходные генераторы, поэтому система проектов и intellisense могут не знать о новом API, пока не перестроили проект привязки, и перезагрузили решение, чтобы ссылка на проект взяла новую сборку. Проект приложения по-прежнему должен компилироваться независимо от ошибок intellisense.
Android
В проекте Android Studio вы найдете каталог модуля, содержащий java-файл, определяющий область общедоступного API для привязки. Например, initialize метод для Facebook определяется следующим образом:
В этом методе видно, что область общедоступного API использует только типы, о которых уже известно .NET для Android: Activity и Boolean.
В проекте Facebook.Android.Binding файл Transforms/Metadata.xml содержит только некоторые xml, чтобы описать сопоставление имени пакета Java (com.microsoft.mauifacebook) с более понятным пространствомFacebook имен C#. Как правило, привязки android являются более "автоматическими", чем Mac/iOS на данный момент, и вам редко нужно вносить изменения в эти файлы преобразования.
Из этого простого изменения проект привязки не требует обновлений для преобразования или Metadata.xml или других файлов. Вы можете просто перестроить проект привязки, и новый API будет готов к использованию из проекта .NET MAUI.
Примечание
Проекты привязки для Android не используют генераторы источников, поэтому система проектов и intellisense могут не знать о новом API, пока не перестроили проект привязки и перезагрузили решение, чтобы ссылка на проект взяла новую сборку. Проект приложения по-прежнему должен компилироваться независимо от ошибок intellisense.
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET MAUI Community Toolkit
.NET MAUI Community Toolkit — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.
Создайте пользовательский интерфейс с привязкой данных. Пользовательский интерфейс автоматически обновляется на основе последних данных, а данные обновляются в ответ на изменения в пользовательском интерфейсе.
NET MAUI — это решение для разработки кроссплатформенных приложений. В системах iOS и Android существует множество собственных библиотек, включая карты, камеры, сообщества и т. д. Обычно эти собственные библиотеки объединяются для создания приложений. В этом курсе показано, как привязать собственные библиотеки в .NET MAUI, что позволяет разработчикам объединять сторонние библиотеки для создания лучших кроссплатформенных приложений .NET MAUI. Связь Kinfey Lo на Twitter!
Рэйчел присоединяется к Джеймсу, чтобы показать некоторые новые функции для создания привязки вокруг собственных библиотек для приложений .NET MAUI. Рэйчел описывает взаимодействие собственной библиотеки для .NET MAUI, что значительно упрощает процесс привязки и некоторые новые шаблоны для начала работы. Главы 00:00 - Введение 01:00 - Что такое привязка? 02:30 . Что такое взаимодействие с собственной библиотекой? 05:00 . Как работает взаимодействие с собственной библиотекой 08:00 . Создание первой привязки