.NET MAUI Android 및 iOS 개발용 NuGet 패키지를 빌드하는 방법

14003 단어 mauiiosdotnetandroid
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를 설치했다고 가정합니다. macOS에 원격으로 페어링하기 위해 Mac용 Visual Studio를 설치할 필요는 없지만 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로 변경합니다.

  • 프로젝트를 빌드합니다. 출력 파일은 다음과 같습니다.
  • android.dll
  • android.pdb
  • android.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.csStructsAndEnums.cs 파일을 생성합니다.

  • 프로젝트를 빌드합니다. 출력 파일은 다음과 같습니다.
  • ios.dll
  • ios.pdb
  • ios.resources
  • DynamsoftBarcodeReader.xcframework


  • Pack를 클릭하여 NuGet 패키지를 생성합니다. 이제 Windows와 macOS의 차이점을 볼 수 있습니다. Windows용 Visual Studio에서 생성된 출력 패키지에는 ios.dll만 포함되어 있습니다. 반대로 macOS용 Visual Studio에서 생성한 패키지에는 ios.dll , manifestDynamsoftBarcodeReader.xcframework 가 포함되어 있습니다. 분명히 Windows에서 빌드된 패키지는 작동하지 않습니다. 하지만 걱정하지 마세요. macOS에서 빌드된 패키지 구조에 따라 Windows에서 실행 가능한 패키지를 구성할 수 있습니다.



  • 단일 NuGet 패키지에 Android 및 iOS SDK 패키징



    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>
    

    iOS 빌드에 사용되는 manifest 파일은 Mac용 Visual Studio에서 자동 생성됩니다.

    <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 바코드 QR 코드 스캐너 사용해보기



    https://github.com/yushulx/maui-barcode-qrcode-scanner

    소스 코드



    https://github.com/yushulx/barcode-dotnet-mobile

    좋은 웹페이지 즐겨찾기