做一个高德地图的 iOS / Android .NET MAUI 控件系列 - iOS 原生库绑定

本文介绍了如何在.NET MAUI中绑定高德地图的iOS原生库,包括认识iOS动态库和静态库、使用Sharpie工具生成C#接口、项目设置调整和编译过程中的问题解决。详细步骤和错误处理帮助开发者掌握iOS库绑定技巧。
摘要由CSDN通过智能技术生成

上篇介绍了一些做高德地图的 iOS / Android MAUI 控件的主要知识。而今天我会重点介绍 iOS 原生库绑定的知识, 并告诉大家在绑定原生库过程的一些技巧,希望给到小伙伴一些启发。

认识 iOS 动态库和静态库

在绑定之前,我们需要学习一下 iOS 的动态库和静态库。最简单理解的方式是在 iOS 中静态库是以 .a 后缀结尾,动态库是以 .dylib 后缀结尾。无论静态库和动态库都可以打包成 Framework 。

静态库和动态库的区别

  1. 静态库的特点是编译时会把库文件直接拷贝一份到目标应用程序,而这个拷贝是驻留在目标应用程序里面的,所以编译完成后,静态库的文件就没有用了。但有个缺点就是,因为需要拷贝,所以生成的应用程序的容量会较大

  2. 动态库和静态库刚好是相反,编译的时候是不会拷贝到目标应用程序里面的,所以生成应用程序的体积较小,而且一个动态库可以共享给多个应用程序使用。但生成应用程序是依赖于动态库,这也导致经常会出现动态库找不到的情况。

我们来拆解一下高德地图基础的 SDK - AMapFoundationKit.framework

这里就包含了对应的头文件信息,模块信息,以及静态库。你可以清晰看到高德地图打包成 Framrwork 的实现。这也是我们对库概念的认识,编译好的二进制代码,向外暴露头文件给第三方开发者使用。

通过 Sharpie 工具生成 C# 调用的接口

Shapie 是一个非常好用的转换工具,它支持在 macOS 下对 Objective-C 的库的转。通过 Sharpie 可以对库文件给出的头文件进行转换完成 C# 的绑定。 在 MAUI 前身 Shapie 工具就已经存在 , 我经常就利用这个工具做转换。

因为这次高德地图的功能我用到 3D ,所以我会对高德的 AMapFoundationKit.Framework 和 MAMapKit.framework 两个 Framework 进行绑定转换。

转换 AMapFoundationKit.Framework

sharpie bind -framework AMapFoundationKit.framework -sdk iphoneos15.5

转换 MAMapKit.framework

sharpie bind -framework MAMapKit.framework -sdk iphoneos15.5

补充: MAMapKit.framework 依赖于 AMapFoundationKit.framework ,所以要放在一个相同的目录下。

这里面要注意,你需要安装好 Xcode ,建议安装到最新 ,并对应最新的 iOS SDK , 当然你也可以根据需要绑定不同版本的 iOS SDK , 你可以通过一次是命令查看环境

sharpie xcode -sdks

这里创建需要注意,现在 Visual Studio 2022 的模版都没有完成,现在大家用命令行创建,因为我们有两个项目,需要创建两个 Binding 的项目分别是

针对于 AMapFoundationKit.Framework 的项目构建

dotnet new iosbinding -o iOS.AMap.Foundation

生成好后,需要把 AMapFoundationKit.framework 放到 iOS.AMap.Foundation 的目录下, MAMapKit.framework 放到 iOS.AMap.3D 目录下。并把生成的 StructsAndEnums.cs 和 ApiDefinitions.cs 放到对应目录。

项目设置调整

  1. 在 Sharpie 生成的目录下 StructsAndEnum.cs ,而在构建的 Binding 目录下是 ApiDefinition.cs , 要把它替换掉。所以要对 .csproj 项目进行修改

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值