乐趣区

关于xamarin:MASA-MAUI-iOS如何绑定微信

背景

MAUI 的呈现,赋予了宽广 Net 开发者开发多平台利用的能力,MAUI 是 Xamarin.Forms 演变而来,然而相比 Xamarin 性能更好,可扩展性更强,构造更简略。然而 MAUI 对于平台相干的实现并不残缺。所以 MASA 团队发展了一个实验性我的项目,意在对微软 MAUI 的补充和扩大

我的项目地址 https://github.com/BlazorComp…

每个性能都有独自的 demo 演示我的项目,思考到 app 安装文件体积(尽管 MAUI 曾经集成裁剪性能,然而该性能对于代码自身有影响),届时每一个性能都会以独自的 nuget 包的模式提供,不便测试,当初我的项目才刚刚开始,然而置信很快就会有能够交付的内容啦。

前言

本系列文章面向挪动开发小白,从零开始进行平台相干性能开发,演示如何参考平台的官网文档应用 MAUI 技术来开发相应性能。

介绍

App 开发中难免不了要对接第三方平台,这些平台官网也提供了 SDK 供开发者应用。

对于 Android 和 iOS 平台而言,只须要下载官网的 SDK,依照官网阐明文档进行集成就能够轻松实现了。

然而对于 MAUI 来说,并没有官网的 SDK,这个时候就须要咱们绑定实用于.NET MAUI 的本机库。

本文次要介绍在 MAUI 中如何实现 iOS 绑定库,相比拟 Android 绑定,iOS 绑定会麻烦些,接下里让咱们一步步在 MAUI 中实现 iOS 微信 SDK 的绑定。

* 以下过程,均在 macOS 上操作

前置环境筹备

  1. Xcode 13.4.1
  2. Visual Studio for mac 2022
  3. 装置 Sharpie, Shapie 是一个十分好用的转换工具,它反对在 macOS 下对 Objective-C 的库的转换。通过 Sharpie 能够对库文件给出的头文件进行转换实现 C# 的绑定。

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

下载微信 iOS SDK,关上后外面有 libWeChatSDK.a 的动态库和三个头文件 (.h)

咱们须要将这几个.h 文件转换为 C# 文件, 这时候就须要用到 Objective Sharpie 工具

sharpie bind -output=WeChatSDK.IOS -namespace=WeChatSDK.IOS -sdk=iphoneos15.5 -scope [绝对路径]/OpenSDK1.9.6 [绝对路径]/OpenSDK1.9.6/*.h

这里须要留神指定 -scope。

-scope 如果没有参数,Objective Sharpie 将尝试为导入的任何 iOS SDK 标头生成绑定,例如 #import <UIKit.h>,生成一个微小的定义文件,在编译绑定我的项目时可能会生成谬误。应用 -scope 参数集时,Objective Sharpie 不会为作用域文件夹之外的任何标头生成绑定。

转换胜利后,会在你指定的文件夹生成 ApiDefinitions.cs 和 StructsAndEnums.cs,StructsAndEnums.cs 对应的是一些常量和枚举类型,ApiDefinitions.cs 对应的是一些接口和办法。

创立 MAUI 的 iOS 绑定我的项目

通过命令行创立 MAUI 的 iOS 绑定库

dotnet new iosbinding -o WeChatSDK.IOS

将生成的 ApiDefinitions.cs 和 StructsAndEnums.cs 替换掉我的项目对应内的文件并对.csproj 调整

<ItemGroup>
    <ObjcBindingApiDefinition Include="ApiDefinitions.cs" />
    <ObjcBindingCoreSource Include="StructsAndEnums.cs" />
</ItemGroup>

生成一下,发现报错了

看了文档之后,理解到 Verify 标注只是让咱们确认转换是否失常,删除掉即可。删除 verify 后失去以下界面

这里遗记了增加对动态库 libWeChatSDK.a 文件的援用,增加下并依据微信文档对.csproj 调整

<ItemGroup>
    <NativeReference Include="libWeChatSDK.a">
      <Kind>Static</Kind>
      <ForceLoad>True</ForceLoad>
      <Frameworks>CFNetwork CoreTelephony Security SystemConfiguration</Frameworks>
      <LinkerFlags>-ObjC -all_load -lstdc++ -lsqlite3.0 -lz</LinkerFlags>
    </NativeReference>
</ItemGroup>

生成后发现还有报错

删除 AutoGeneratedName,删除后显示生成胜利

绑定胜利后如何确定程序曾经运行?让咱们接着往下看

测试绑定库

创立一个 MAUI Blazor 我的项目并给我的项目增加绑定库的援用

测试一下微信分享(这里只是演示 appid 和 Universal Links 要换成你本人的)

WXApi.RegisterApp("wxd930ea5d5a258f4f","https://help.wechat.com/sdksample/");

SendMessageToWXReq req = new SendMessageToWXReq();
req.Text = "Hello,MASA!";
req.BText = true;
req.Scene = 1;
WXApi.SendReq(req,null);

依据微信文档,在 Info.plist 中减少对应配置

最初来看一下真机成果

踩坑记录

  1. 自己一开始用的 Xcode 14,发现在 Xcode14 中无奈真机调试,给官网提了 issues,过后 Xcode 14 对 MAUI 还没有很好的反对,依据官网的意见退回到了 Xcode 13.4.1。
  2. 应用 Sharpie 要指定 -scope,做 MAUI 的 iOS 微信 SDK 绑定前看了一些 Xamarin ios 绑定的文章,外面用 Sharpie 都没有指定 scope,照着指令敲转换生成的入口文件带大量无奈编译的谬误,到不了 Verify 那一步,看了官网文档后才理解到须要指定 scope。
  3. MAUI 援用做好的 iOS 绑定库,发现代码智能感知生效了,然而能够胜利构建我的项目,目前要解决绑定库智能感知的问题,我的做法是间接援用生成的程序集。

如果你对咱们的开源我的项目感兴趣,无论是代码奉献、应用、提 Issue,欢送分割咱们

  • WeChat:MasaStackTechOps
  • QQ:7424099
退出移动版