提问人:helper 提问时间:7/22/2023 更新时间:8/22/2023 访问量:410
.Net Maui iOS 本机绑定,用于创建 .Net Maui Nuget 包
.Net Maui iOS Native Binding to create a .Net Maui Nuget package
问:
我有一个 .net Maui 本机 iOS 绑定一些 iOS 框架。我设法成功绑定。但是,我想创建一个 .Net Maui 类库来使用 iOS 本机绑定。请参阅下面的项目结构:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0;net7.0-android;net7.0-ios</TargetFrameworks>
<!-- Uncomment to also build the tizen app. You will need to install tizen by following this: https://github.com/Samsung/Tizen.NET -->
<!-- <TargetFrameworks>$(TargetFrameworks);net7.0-tizen</TargetFrameworks> -->
<UseMaui>true</UseMaui>
<SingleProject>true</SingleProject>
<ImplicitUsings>enable</ImplicitUsings>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">16.1</SupportedOSPlatformVersion>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|net7.0-ios|AnyCPU'">
<CreatePackage>false</CreatePackage>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\NativeSdk.Android\NativeSdk.Android.csproj" />
<ProjectReference Include="..\NativeSdk.iOS\NativeSdk.iOS.csproj" />
</ItemGroup>
<ItemGroup Condition=" '$(TargetFramework)' == 'net7.0-ios' ">
<ProjectReference Include="Path\To\Your\iOSNativeBindingProject.csproj" />
</ItemGroup>
<ItemGroup>
<None Remove="Platforms\Android\Models\" />
<None Remove="Platforms\Android\Aar\" />
<None Remove="Platforms\Android\Aar\TransaktSDK.aar" />
</ItemGroup>
<ItemGroup>
<Folder Include="Platforms\Android\Models\" />
<Folder Include="Platforms\Android\Aar\" />
</ItemGroup>
<ItemGroup>
<AndroidAarLibrary Include="Platforms\Android\Aar\TransaktSDK.aar">
<AndroidSkipResourceProcessing></AndroidSkipResourceProcessing>
</AndroidAarLibrary>
</ItemGroup>
<ItemGroup>
<Compile Condition=" '$(EnableDefaultCompileItems)' == 'true' " Update="SecureServiceInfo.cs">
<ExcludeFromCurrentConfiguration>true</ExcludeFromCurrentConfiguration>
</Compile>
</ItemGroup>
</Project>
我尝试在我的本机绑定项目上添加其他平台以避免兼容性问题。我还添加了条件以尝试仅使用 ios 进行编译。当我这样做时,apiDefinition 类中的所有文件都会中断。请参阅下面的本机 iOS 项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net7.0-ios;net7.0;net7.0-android;net7.0-maccatalyst</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>true</ImplicitUsings>
<IsBindingProject>true</IsBindingProject>
</PropertyGroup>
<!-- <ItemGroup>
<Compile Remove="StructsAndEnums.cs" />
<Compile Remove="ApiDefinitions.cs" />
</ItemGroup>-->
<ItemGroup>
<ObjcBindingCoreSource Include="StructsAndEnums.cs" />
</ItemGroup>
<ItemGroup>
<ObjcBindingApiDefinition Include="ApiDefinitions.cs" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net7.0-ios'">
<NativeReference Include="..\..\..\..\..\Downloads\nativeSKD_iOS\NativeSDK.xcframework">
<Kind>Framework</Kind>
<Frameworks>Foundation</Frameworks>
<ForceLoad>True</ForceLoad>
</NativeReference>
</ItemGroup>
</Project>
我已经坚持了好几天了。我只想创建一个 maui 类库,包括我的本机 iOS 绑定项目
答:
0赞
Jessica
8/11/2023
#1
为什么要创建 MAUI 类库?可以直接在 .NET MAUI 应用项目中引用 iOS 绑定库创建的 dll。或者,可以从 iOS 绑定库创建 nuget,并在 .NET MAUI 应用项目中使用它。
评论
0赞
zegee29
8/22/2023
#2
不幸的是,你还有很长的路要走:-/
MAUI 与 Xamarin 相同,具有许多必须精确完成的配置。
从你的例子中,我看不出来
<ObjcBindingApiDefinition Include="..\NativeSdk.iOS\ApiDefinitions.cs" />
该^必须由Sharpie工具生成。此外,Sharpie 输出不是 100% 正确的,您必须在这里和那里修复一些部件。
然后,你看起来差不多了,请添加SmartLink:
<NativeReference Include="..\..\..\..\..\Downloads\nativeSKD_iOS\NativeSDK.xcframework">
<Kind>Framework</Kind>
<Frameworks>Foundation</Frameworks>
<ForceLoad>True</ForceLoad>
<SmartLink>False</SmartLink>
</NativeReference>
否则 ForceLoad 将被忽略(取决于 env conf,但添加它以确保)。
最后的建议是,你应该在这里写一个你看到的错误,否则它真的是我们的尝试和失败的提示。
评论