Xamarin IOS綁定微信SDK

上篇文章分享了Xamarin Android綁定微信SDK蹬昌,由于Java和C#的語(yǔ)法相似度比較高,所以轉(zhuǎn)換起來(lái)基本上問(wèn)題不大攀隔,IOS的坑就要稍微多一點(diǎn)了皂贩,不過(guò)沒(méi)關(guān)系我們來(lái)一步步的分析。

  1. 在微信開(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 下載地址
  2. 將下載后的文件在Mac中打開(kāi)


  3. 接下來(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)安裝成功了轰枝。
  4. 輸入命令,顯示結(jié)果和下圖一樣就說(shuō)明成功了组去。


  5. 在用戶/Admin目錄下可以找到我們剛才生成的文件



  6. 在VS中新建一個(gè)IOS綁定庫(kù)


  7. 將剛才生成的文件中的代碼分別拷在對(duì)應(yīng)的文件中


  8. 這個(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ò)了
  9. 下一步添加靜態(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源碼地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市玻墅,隨后出現(xiàn)的幾起案子介牙,更是在濱河造成了極大的恐慌,老刑警劉巖澳厢,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耻瑟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赏酥,警方通過(guò)查閱死者的電腦和手機(jī)喳整,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)裸扶,“玉大人,你說(shuō)我怎么就攤上這事魏保∶溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵檩咱,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绊含,道長(zhǎng)躬充,這世上最難降的妖魔是什么充甚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任津坑,我火速辦了婚禮傲霸,結(jié)果婚禮上昙啄,老公的妹妹穿的比我還像新娘。我一直安慰自己耿币,他們只是感情好淹接,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布塑悼。 她就那樣靜靜地躺著楷掉,像睡著了一般烹植。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上巷屿,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天嘱巾,我揣著相機(jī)與錄音,去河邊找鬼栽渴。 笑死稳懒,一個(gè)胖子當(dāng)著我的面吹牛场梆,可吹牛的內(nèi)容都是我干的或油。 我是一名探鬼主播驰唬,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼叫编,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼搓逾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起世蔗,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤污淋,失蹤者是張志新(化名)和其女友劉穎芙沥,沒(méi)想到半個(gè)月后浊吏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體找田,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡墩衙,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了心铃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片去扣。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愉棱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出艾岂,到底是詐尸還是另有隱情王浴,我是刑警寧澤梅猿,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布粒没,位于F島的核電站,受9級(jí)特大地震影響爽撒,放射性物質(zhì)發(fā)生泄漏硕勿。R本人自食惡果不足惜枫甲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一想幻、第九天 我趴在偏房一處隱蔽的房頂上張望脏毯。 院中可真熱鬧,春花似錦渣淤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捶箱。三九已至动漾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間晨川,已是汗流浹背删豺。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工妈拌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓬蝶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓培愁,卻偏偏與公主長(zhǎng)得像定续,于是被迫代替她去往敵國(guó)和親禾锤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恩掷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容