有人可以创建一个使用 .framework 而不是“.a”静态库的绑定库以及使用该绑定库的工作 MAUI 演示,以便我们可以解决此问题并解决它吗?
第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
。
备注:
#import <MyFramework/MyFrameworkExt.h>
到 #import "MyFrameworkExt.h"
(在这种情况下,两个标头将位于同一目录中)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步:
备注:
<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
文件以加载绑定项目。
备注:
using
指令<ItemGroup>
<ProjectReference Include="..\App.Binding\App.Binding.csproj"/>
</ItemGroup>
希望这对您有帮助,我没有错过任何一步。 如果您有任何疑问,请告诉我!
BR, 尼可