上篇文章分享了Xamarin Android綁定微信SDK蹬昌,由于Java和C#的語(yǔ)法相似度比較高,所以轉(zhuǎn)換起來(lái)基本上問(wèn)題不大攀隔,IOS的坑就要稍微多一點(diǎn)了皂贩,不過(guò)沒(méi)關(guān)系我們來(lái)一步步的分析。
- 在微信開(kāi)放平臺(tái)官網(wǎng)https://open.weixin.qq.com/ 申請(qǐng)一個(gè)開(kāi)發(fā)者賬號(hào)昆汹,填寫(xiě)公司APP信息明刷,通過(guò)審核。申請(qǐng)成功的APPID在項(xiàng)目中會(huì)使用到满粗。然后下載官方的IOS_SDK 下載地址
-
將下載后的文件在Mac中打開(kāi)
- 接下來(lái)我們要將這幾個(gè).h文件轉(zhuǎn)換為C#文件辈末,這個(gè)時(shí)候就需要用到一個(gè)工具Objective Sharpie 點(diǎn)擊查看詳細(xì)介紹
如果你的Mac上沒(méi)有請(qǐng)先點(diǎn)擊上面的地址下載安裝,之后打開(kāi)終端命令,輸入sharpie -v查看版本挤聘,如果顯示如下圖所示則說(shuō)明已經(jīng)安裝成功了轰枝。
-
輸入命令,顯示結(jié)果和下圖一樣就說(shuō)明成功了组去。
-
在用戶/Admin目錄下可以找到我們剛才生成的文件
-
在VS中新建一個(gè)IOS綁定庫(kù)
-
將剛才生成的文件中的代碼分別拷在對(duì)應(yīng)的文件中
-
這個(gè)時(shí)候生成一下會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了狸膏。
這個(gè)Verify標(biāo)簽是讓你去確認(rèn)轉(zhuǎn)換的是否正確,我們要相信科學(xué)相信編譯器就當(dāng)他已經(jīng)轉(zhuǎn)換正確了添怔,先全部刪掉試試。
果然全部刪掉之后就可以編譯通過(guò)了 -
下一步添加靜態(tài)庫(kù)libWeChatSDK.a文件砾脑,如果是在Mac下在本機(jī)引用中添加靜態(tài)引用,如下圖的方式設(shè)置屬性就可以了
但如果是Windows下這里就有坑了韧衣,這樣做在編譯的時(shí)候靜態(tài)庫(kù)libWeChatSDK.a會(huì)無(wú)法拷貝至生成文件中,一直生成失敗畅铭,在google找了半天資料后最后采用和綁定Android庫(kù)差不多的方法,直接把靜態(tài)庫(kù)文件放在項(xiàng)目中
打開(kāi)libWeChatSDK.linkwith.cs文件修改屬性的值
using ObjCRuntime;
[assembly: LinkWith("libWeChatSDK.a", ForceLoad = true, SmartLink = true,
Frameworks = "CFNetwork CoreTelephony Security SystemConfiguration",
LinkerFlags = "-ObjC -all_load -lc++ -lsqlite3.0 -lz")]
10.綁定庫(kù)文件到此就完成了硕噩,新建一個(gè)Demo來(lái)測(cè)試一下
11.先給項(xiàng)目添加綁定庫(kù)的引用缭贡,修改AppDelegate.cs的FinishedLaunching方法
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
//注冊(cè)微信程序
WXApi.RegisterApp("wxd930ea5d5a258f4f");
// create a new window instance based on the screen size
Window = new UIWindow(UIScreen.MainScreen.Bounds);
TestViewController vc = new TestViewController();
Window.RootViewController = vc;
// If you have defined a root view controller, set it here:
// Window.RootViewController = myViewController;
// make the window visible
Window.MakeKeyAndVisible();
return true;
}
12.新建一個(gè)視圖控制器,給他的界面上新增一個(gè)Button和Button的TouchUpInside事件谍失,修改代碼如下,這里已一個(gè)分享網(wǎng)頁(yè)到朋友圈的例子來(lái)進(jìn)行測(cè)試快鱼,分享其他類(lèi)型的文件和這個(gè)類(lèi)似,具體可以參考官方文檔纲岭。
using System;
using UIKit;
using WeChat.IOS;
namespace WeChat.IOS.Samples
{
public partial class TestViewController : UIViewController
{
public TestViewController() : base("TestViewController", null)
{
}
public override void DidReceiveMemoryWarning()
{
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
}
partial void UIButton5_TouchUpInside(UIButton sender)
{
try
{
WXMediaMessage msg = new WXMediaMessage();
msg.Title = "Xamarin官方網(wǎng)站";
msg.Description = "Xamarin官方網(wǎng)站的描述";
msg.SetThumbImage(UIImage.FromFile("icon.png"));
WXWebpageObject webObj = new WXWebpageObject();
webObj.WebpageUrl = "https://www.xamarin.com";
msg.MediaObject = webObj;
SendMessageToWXReq req = new SendMessageToWXReq();
req.BText = false;
req.Message = msg;
req.Scene = (int)WXScene.Timeline;
var result = WXApi.SendReq(req);
UIAlertView alertView = new UIAlertView("", "分享結(jié)果:" + result, null, "取消");
alertView.Show();
}
catch (Exception ex)
{
UIAlertView alertView = new UIAlertView("", "異常:" + ex, null, "取消");
alertView.Show();
}
}
}
}
13.修改Info.plist文件配置微信的URL抹竹,否則無(wú)法打開(kāi)微信分享。URL方案填寫(xiě)你注冊(cè)的APPID
14.到現(xiàn)在位置所有的工作都已經(jīng)做完了荒勇,又到了激動(dòng)人心的調(diào)試時(shí)間柒莉,我們插上真機(jī)開(kāi)始調(diào)試闻坚。生成和部署都很順利沽翔,點(diǎn)擊按鈕開(kāi)始分享,卻發(fā)現(xiàn)報(bào)錯(cuò)了。仅偎。跨蟹。很難受
在虛擬機(jī)中測(cè)試又不會(huì)報(bào)錯(cuò),經(jīng)過(guò)研究發(fā)現(xiàn)是編譯的方式不同橘沥,真機(jī)只支持AOT模式窗轩,不支持JIT模式。這下該怎么辦座咆,難道就只能倒在這里了嗎痢艺,抱著試試看的心態(tài)將生成模式從Debug改為Release,重新生成介陶,部署堤舒,成功了!
暫時(shí)只能使用Release模式進(jìn)行編譯才可以實(shí)現(xiàn)功能了哺呜,這里如果有大神知道具體的方法請(qǐng)賜教舌缤。
最后總結(jié)一下:
- 將下載的庫(kù)文件在Mac中用Objective Sharpie把.h文件編譯成C#代碼
- 建立IOS綁定庫(kù)項(xiàng)目,把生成的C#代碼分別替換項(xiàng)目中的ApiDefinition.cs和Structs.cs某残,刪除Verify屬性
- 將靜態(tài)庫(kù)文件libWeChatSDK.a加入項(xiàng)目国撵,修改他的屬性
- 把綁定庫(kù)添加到項(xiàng)目引用中使用
附上Demo源碼地址