在MAUI项目中使用包含Xamarin.iOS的类库

pgky5nke  于 2023-04-27  发布在  iOS
关注(0)|答案(1)|浏览(180)

我用MAUI开发了一个iOS应用程序,并且有一个用于iPhone的条形码扫描仪设备。要使用此设备,我需要添加一个使用Xamarin. iOS的dll。当我将此dll添加到主项目时,它需要Xamarin.iOS.dll,当我将Xamarin.iOS.dll添加到项目时,我得到以下错误

NSData有一个冲突,不幸的是我不能使用Xamarin.iOS的NSData.像Xamarin.iOS.Foundation.NSData
所以作为一种替代,我创建了另一个类库(这不是一个maui类库)。我添加了Xamarin.iOS和设备的DLL到这个项目中,我可以成功编译。
但是当我将这个类库添加到Maui应用程序项目中时,我在构建时得到以下错误

/usr/local/share/dotnet/packs/Microsoft.iOS.Sdk/16.2.1007/targets/Xamarin.Shared.Sdk.targets(3,3):
Error: clang++ exited with code 1:
Undefined symbols for architecture arm64:
  "_xamarin_IntPtr_objc_msgSendSuper_IntPtr", referenced from:
     -u command line option
     (maybe you meant: _xamarin_IntPtr_objc_msgSendSuper_IntPtr_ref_IntPtr_exception,
 _xamarin_IntPtr_objc_msgSendSuper_IntPtr_IntPtr_int_exception , 
 _xamarin_IntPtr_objc_msgSendSuper_IntPtr_int_int_int_int_exception , 
 _xamarin_IntPtr_objc_msgSendSuper_IntPtr_Int64_Int64_Int64_Int64_exception , 
  _xamarin_IntPtr_objc_msgSendSuper_IntPtr_UIntPtr_IntPtr_IntPtr_exception , 
  _xamarin_IntPtr_objc_msgSendSuper_IntPtr_UInt64_Int64_Int64_exception , 
  _xamarin_IntPtr_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_IntPtr_exception ,
  _xamarin_IntPtr_objc_msgSendSuper_IntPtr_UInt32_int_int_exception , 
   _xamarin_IntPtr_objc_msgSendSuper_IntPtr_IntPtr_IntPtr_IntPtr_IntPtr_exception )
  "_xamarin_IntPtr_objc_msgSendSuper_IntPtr_IntPtr_UInt32", referenced from:
     -u command line option
  "_xamarin_IntPtr_objc_msgSendSuper_IntPtr_IntPtr_UInt64", referenced from:
     -u command line option
  "_xamarin_Int (TestMauiApp)

除此之外,当我将设备的DLL添加到maui项目中并从Link behavior中选择“Link All”时,项目可以编译并部署到我的手机上,但当我打开应用程序时,我看到屏幕截图,然后应用程序崩溃。甚至项目中没有任何代码。
不幸的是,设备制造商现在不支持MAUI。https://asreader.com/products/asr-023xd/支持的:objective C,swift,cordova和xamarin。我不确定我是否可以将objective-c/swift库嵌入到我的项目中。
如果我能用Xamarin解决这个问题,那就太好了。否则我就不得不用Xamarin.Forms而不是MAUI。

w80xi6nr

w80xi6nr1#

这似乎是一个Xamarin.iOS Binding项目。Xamarin.iOS Binding项目旨在将Objective-C代码暴露给Xamarin的C#代码库,并且与iOS和MAUI的.NET不向前兼容。
这些项目需要首先转换为较新的.NET for iOS Binding项目类型。目前需要手动完成。一种方法是创建一个“iOS Binding Project”,如下所示:

  • dotnet new iosbinding -o MyBinding(将MyBinding替换为您希望的绑定名称)。
  • 这将创建一个新的.NET for iOS绑定项目(也应该与MAUI兼容)。
  • 然后将ApiDefinition.csStructsAndEnums.cs.a和/或.framework文件和目录、任何本机引用、其他设置和资源从原始Xamarin.iOS绑定到新的绑定项目。(确保SmartLink、ForceLoad等。NativeReferences的设置与原始绑定项目的设置相匹配)
  • 构建新的绑定项目。结果现在应该可以在.NET for iOS或MAUI项目中使用。
    注意:如果引用的是生成的DLL,而不是绑定项目本身,请确保生成的BindingName.resources文件夹在同一目录下

相关问题