如何为 .NET MAUI Android 和 iOS 开发构建

2022-08-22  本文已影响0人  蜗牛是不是牛

如果您尝试将 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 包

  1. 拖到DynamsoftBarcodeReader.aarAndroid 绑定项目。
  2. 选择DynamsoftBarcodeReader.aar并将构建操作更改为AndroidLibrary.
  1. 将构建模式更改为Release.

  2. 构建项目。以下是输出文件:

    • 安卓.dll
    • 安卓.pdb
    • 安卓.xml
    • DynamsoftBarcodeReader.aar
  3. 右键单击该csproj文件并选择Pack创建 NuGet 包。

为 .NET 6 绑定 iOS 框架

  1. 拖动DynamsoftBarcodeReader.xcframework到 iOS 绑定项目。

  2. 将以下代码添加到 csproj 文件。

    <ItemGroup>
        <NativeReference Include="DynamsoftBarcodeReader.xcframework">
        <Kind>Framework</Kind>
        <Frameworks></Frameworks>
        </NativeReference>
    </ItemGroup>
    
    
  3. 使用macOS 的命令行工具Objective Sharpie来生成ApiDefinition.csStructsAndEnums.cs文件。

  4. 构建项目。以下是输出文件:

    • ios.dll
    • ios.pdb
    • ios.resources
      • DynamsoftBarcodeReader.xcframework
  5. 单击Pack以创建 NuGet 包。现在您将看到 Windows 和 macOS 之间的区别。Visual Studio for Windows 生成的输出包仅包含ios.dll. 相比之下,Visual Studio for macOS 生成的包包含ios.dll,manifestDynamsoftBarcodeReader.xcframework. 显然,在 Windows 上构建的软件包无法运行。不过不用担心,根据 macOS 上构建的包的结构,我们可以在 Windows 上构建一个可行的包。

将 Android 和 iOS SDK 打包到一个 NuGet 包中

由于我们使用 Visual Studio 构建了 Android 和 iOS 包,我们可以将它们分别发布到 NuGet.org。但是,如果您想将它们构建到单个 NuGet 包中怎么办?我们可以使用nuspec文件来实现这一点。

以下是步骤:

  1. 创建一个nuspec文件。

    nuget spec
    
    
  2. 添加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>
    
    
  3. 构建包:

    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

上一篇 下一篇

猜你喜欢

热点阅读