如何在.NET 8.0 MAUI中使用iOS .framework文件

问题描述 投票:0回答:1

有人可以创建一个使用 .framework 而不是“.a”静态库的绑定库以及使用该绑定库的工作 MAUI 演示,以便我们可以解决此问题并解决它吗?

c# ios .net maui .net-8.0
1个回答
0
投票

第1步:

创建一个像这样的文件夹结构:

App/ (.NET 8.0, MAUI)
│   App.csproj
│   ...
App.Binding/ (iOS/MacCatalyst Binding Library)
│   ApiDefinition.cs
│   App.Binding.csproj
│   StructsAndEnums.cs
App.Frameworks/ (created by hand)
└───FAT
└───Frameworks

第2步:

.framework
复制到
App.Frameworks/FAT/
App.Frameworks/Frameworks/
目录

第三步:

从框架生成FAT框架。请注意,您可以将多个框架添加到 FAT 框架中,只要它们针对不同的架构即可

lipo -create -output App.Frameworks/FAT/[Name].framework/[Name] App.Frameworks/Frameworks/[Name].framework/[Name] ...

第四步:

使用 Sharpie 生成

ApiDefinition.cs
StructsAndEnums.cs

备注:

  1. 如果您使用 Apple 框架作为导入,您可能需要使用提升的权限(例如 sudo)运行此命令
  2. 您可能需要将头文件中的导入路径更改为相对路径,例如: G。
    #import <MyFramework/MyFrameworkExt.h>
    #import "MyFrameworkExt.h"
    (在这种情况下,两个标头将位于同一目录中)
  3. 此示例适用于 iOS,但对于 MacCatalyst 应该类似
sharpie bind --sdk=iphoneos16.2 --output="ApiDefinition" --namespace="App.Binding" --scope="App.Frameworks/FAT/[Name].framework/Headers/" "App.Frameworks/FAT/[Name].framework/Headers/[Name].h"

第五步:

将目录

ApiDefinitions
中找到的新生成文件的部分复制到以下文件中,您将需要这些文件来进行绑定:

  • App.Binding/ApiDefinition.cs
  • App.Binding/EnumsAndStructs.cs

第6步:

从绑定中的文件中删除任何 [Verify] 属性,因为它们会导致错误,并删除

using
文件最顶部的
App.Bindings/ApiDefinition.cs
指令,该指令指的是您要链接的框架

第7步:

备注:

  1. 如果您使用 MacCatalyst,您需要修改链接器标志中的位置路径
  2. <Frameworks>
    标签中检查您正在使用哪些框架,并将其更改为您的需要

通过添加以下内容更新您的

App.Binding/App.Binding.csproj

<ItemGroup>
    <NativeReference Include="..\Frameworks\FAT\[Name].framework">
        <Kind>Framework</Kind>
        <Frameworks>Foundation UIKit [Name]</Frameworks>
        <LinkerFlags>-L "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator/" -L "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos" -Wl,-rpath -Wl,@executable_path/Frameworks</LinkerFlags>
    </NativeReference>
</ItemGroup>

第8步:

更新您的

App/App.csproj
文件以加载绑定项目。

备注:

  1. 您可以考虑添加参考的条件加载
  2. 即使您正在链接项目引用,某些 IDE 也需要手动构建绑定,然后卸载绑定项目,以便显示代码完成并接受其他文件中的
    using
    指令
<ItemGroup>
    <ProjectReference Include="..\App.Binding\App.Binding.csproj"/>
</ItemGroup>

希望这对您有帮助,我没有错过任何一步。 如果您有任何疑问,请告诉我!

BR, 尼可

© www.soinside.com 2019 - 2024. All rights reserved.