美文网首页
如何为 .NET MAUI Android 和 iOS 开发构建

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

作者: 蜗牛是不是牛 | 来源:发表于2022-08-22 14:51 被阅读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

    相关文章

      网友评论

          本文标题:如何为 .NET MAUI Android 和 iOS 开发构建

          本文链接:https://www.haomeiwen.com/subject/tpeigrtx.html