如果您嘗試將 Xamarin 移動項目移植到 .NET MAUI,您會發(fā)現(xiàn)為 Xamarin Android 構(gòu)建的包沒有問題,但為 Xamarin iOS 構(gòu)建的包不兼容。要解決此問題,您需要將目標框架更改為 .NET 6 并重建相關(guān)包桐磁。Dynamsoft 移動條碼 SDK 目前只支持 Xamarin。本文旨在幫助您使用 .NET MAUI 開發(fā)移動條碼 QR 碼掃描儀應(yīng)用程序讲岁。您將了解如何從頭開始構(gòu)建基于 Android *.aar 和 iOS 框架的 .NET 綁定庫我擂,以及如何將 Android 和 iOS SDK 打包到單個 NuGet 包中。
先決條件
下載Dynamsoft Mobile Barcode Scanner SDK
為 Android 和 iOS 創(chuàng)建 .NET 綁定庫
假設(shè)您已在 Windows 和 macOS 上安裝了 Visual Studio 2022 Preview缓艳。盡管無需安裝 Visual Studio for Mac 即可遠程與 macOS 配對校摩,但適用于 iOS 的 .NET 綁定庫的輸出包在 Windows 和 macOS 之間是不同的。我們將在以下段落中討論它阶淘。
Visual Studio 庫綁定項目
在 Visual Studio 2022 中搜索時binding
衙吩,您會看到有兩種庫綁定項目。一個用于 Xamarin溪窒,另一個用于 .NET 6坤塞。要構(gòu)建與 .NET MAUI 兼容的庫,我們選擇不帶(Xamarin)
.
為 .NET 6 綁定 Android AAR 包
- 拖到
DynamsoftBarcodeReader.aar
Android 綁定項目澈蚌。 - 選擇
DynamsoftBarcodeReader.aar
并將構(gòu)建操作更改為AndroidLibrary
.
將構(gòu)建模式更改為
Release
.-
構(gòu)建項目摹芙。以下是輸出文件:
- 安卓.dll
- 安卓.pdb
- 安卓.xml
- DynamsoftBarcodeReader.aar
右鍵單擊該
csproj
文件并選擇Pack
創(chuàng)建 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
文件。-
構(gòu)建項目份汗。以下是輸出文件:
- ios.dll
- ios.pdb
- ios.resources
- DynamsoftBarcodeReader.xcframework
單擊
Pack
以創(chuàng)建 NuGet 包∮纾現(xiàn)在您將看到 Windows 和 macOS 之間的區(qū)別。Visual Studio for Windows 生成的輸出包僅包含ios.dll
. 相比之下杯活,Visual Studio for macOS 生成的包包含ios.dll
,manifest
和DynamsoftBarcodeReader.xcframework
. 顯然匆帚,在 Windows 上構(gòu)建的軟件包無法運行。不過不用擔心轩猩,根據(jù) macOS 上構(gòu)建的包的結(jié)構(gòu)卷扮,我們可以在 Windows 上構(gòu)建一個可行的包荡澎。
將 Android 和 iOS SDK 打包到一個 NuGet 包中
由于我們使用 Visual Studio 構(gòu)建了 Android 和 iOS 包均践,我們可以將它們分別發(fā)布到 NuGet.org晤锹。但是,如果您想將它們構(gòu)建到單個 NuGet 包中怎么辦彤委?我們可以使用nuspec文件來實現(xiàn)這一點鞭铆。
以下是步驟:
-
創(chuàng)建一個
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 構(gòu)建的文件由 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>
-
構(gòu)建包:
nuget pack
現(xiàn)在您可以為 .NET MAUI 移動開發(fā)安裝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