如果您尝试将 Xamarin 移动项目移植到 .NET MAUI,您会发现为 Xamarin Android 构建的包没有问题,但为 Xamarin iOS 构建的包不兼容。要解决此问题,您需要将目标框架更改为 .NET 6 并重建相关包。Dynamsoft 移动条码 SDK 目前只支持 Xamarin。本文旨在帮助您使用 .NET MAUI 开发移动条码 QR 码扫描仪应用程序。您将了解如何从头开始构建基于 Android *.aar 和 iOS 框架的 .NET 绑定库,以及如何将 Android 和 iOS SDK 打包到单个 NuGet 包中。
先决条件
下载Dynamsoft Mobile Barcode Scanner SDK
为 Android 和 iOS 创建 .NET 绑定库
假设您已在 Windows 和 macOS 上安装了 Visual Studio 2022 Preview。尽管无需安装 Visual Studio for Mac 即可远程与 macOS 配对,但适用于 iOS 的 .NET 绑定库的输出包在 Windows 和 macOS 之间是不同的。我们将在以下段落中讨论它。
Visual Studio 库绑定项目
在 Visual Studio 2022 中搜索时binding
,您会看到有两种库绑定项目。一个用于 Xamarin,另一个用于 .NET 6。要构建与 .NET MAUI 兼容的库,我们选择不带(Xamarin)
.
为 .NET 6 绑定 Android AAR 包
- 拖到
DynamsoftBarcodeReader.aar
Android 绑定项目。 - 选择
DynamsoftBarcodeReader.aar
并将构建操作更改为AndroidLibrary
.
-
将构建模式更改为
Release
. -
构建项目。以下是输出文件:
- 安卓.dll
- 安卓.pdb
- 安卓.xml
- DynamsoftBarcodeReader.aar
-
右键单击该
csproj
文件并选择Pack
创建 NuGet 包。
为 .NET 6 绑定 iOS 框架
-
拖动
DynamsoftBarcodeReader.xcframework
到 iOS 绑定项目。 -
将以下代码添加到 csproj 文件。
<ItemGroup> <NativeReference Include="DynamsoftBarcodeReader.xcframework"> <Kind>Framework</Kind> <Frameworks></Frameworks> </NativeReference> </ItemGroup>
-
使用macOS 的命令行工具Objective Sharpie来生成
ApiDefinition.cs
和StructsAndEnums.cs
文件。 -
构建项目。以下是输出文件:
- ios.dll
- ios.pdb
- ios.resources
- DynamsoftBarcodeReader.xcframework
-
单击
Pack
以创建 NuGet 包。现在您将看到 Windows 和 macOS 之间的区别。Visual Studio for Windows 生成的输出包仅包含ios.dll
. 相比之下,Visual Studio for macOS 生成的包包含ios.dll
,manifest
和DynamsoftBarcodeReader.xcframework
. 显然,在 Windows 上构建的软件包无法运行。不过不用担心,根据 macOS 上构建的包的结构,我们可以在 Windows 上构建一个可行的包。
将 Android 和 iOS SDK 打包到一个 NuGet 包中
由于我们使用 Visual Studio 构建了 Android 和 iOS 包,我们可以将它们分别发布到 NuGet.org。但是,如果您想将它们构建到单个 NuGet 包中怎么办?我们可以使用nuspec文件来实现这一点。
以下是步骤:
-
创建一个
nuspec
文件。nuget spec
-
添加files元素并指定要包含在包中的文件列表。
<files> <file src="README.md" target="" /> <file src="android/bin/Release/net6.0-android/android.dll" target="lib/net6.0-android31.0/" /> <file src="android/bin/Release/net6.0-android/android.xml" target="lib/net6.0-android31.0/" /> <file src="android/bin/Release/net6.0-android/DynamsoftBarcodeReader.aar" target="lib/net6.0-android31.0/" /> <file src="ios/bin/Release/net6.0-ios/ios.dll" target="lib/net6.0-ios15.4/" /> <file src="ios/manifest" target="lib/net6.0-ios15.4/ios.resources" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/Info.plist" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Info.plist" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/DynamsoftBarcodeReader" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Headers/DynamsoftBarcodeReader.h" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Headers" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Headers/DynamsoftBarcodeSDK.h" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Headers" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Modules/module.modulemap" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64/DynamsoftBarcodeReader.framework/Modules" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Info.plist" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/DynamsoftBarcodeReader" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Headers/DynamsoftBarcodeReader.h" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Headers" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Headers/DynamsoftBarcodeSDK.h" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Headers" /> <file src="ios/bin/Release/net6.0-ios/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Modules/module.modulemap" target="lib/net6.0-ios15.4/ios.resources/DynamsoftBarcodeReader.xcframework/ios-arm64_x86_64-simulator/DynamsoftBarcodeReader.framework/Modules" /> </files>
manifest
用于 iOS 构建的文件由 Visual Studio for Mac 自动生成。<BindingAssembly> <NativeReference Name="DynamsoftBarcodeReader.xcframework"> <ForceLoad></ForceLoad> <Frameworks></Frameworks> <IsCxx></IsCxx> <Kind>Framework</Kind> <LinkerFlags></LinkerFlags> <NeedsGccExceptionHandling></NeedsGccExceptionHandling> <SmartLink></SmartLink> <WeakFrameworks></WeakFrameworks> </NativeReference> </BindingAssembly>
此外,为不同的目标框架添加依赖项。
<dependencies> <group targetFramework="net6.0-android31.0"> </group> <group targetFramework="net6.0-ios15.4"> <dependency id="System.Runtime.InteropServices.NFloat.Internal" version="6.0.1" exclude="Build,Analyzers" /> </group> </dependencies>
-
构建包:
nuget pack
现在您可以为 .NET MAUI 移动开发安装Barcode.NET.Mobile 。
试试 .NET MAUI 条码二维码扫描器
https://github.com/yushulx/maui-barcode-qrcode-scanner
源代码
https://github.com/yushulx/barcode-dotnet-mobile
来源:https://dev.to/yushulx/how-to-build-a-nuget-package-for-net-maui-android-and-ios-development-37pl
网友评论