ios cordova 踩坑記錄一

剛剛做了一個(gè)項(xiàng)目矾瘾,想試試混合開(kāi)發(fā)图张。然后去網(wǎng)上溜達(dá)了一圈加上前端同事的建議瘾境,最后選擇了已經(jīng)發(fā)布好多年的cordova崔梗。至于為啥要用這么老的技術(shù)來(lái)做混合開(kāi)發(fā)主要有以下幾個(gè)方面的考慮:

1.cordova可以直接把現(xiàn)有的前端代碼嵌入到ios原生項(xiàng)目中。因?yàn)槲疫@個(gè)ios項(xiàng)目有部分功能在移動(dòng)web端也是有的逻澳,所以前端可以直接把代碼拷貝過(guò)來(lái)闸天。

2.cordova比較成熟。前端同事說(shuō)前面用過(guò)赡盘,使用過(guò)程還是比較順利号枕。

3.性能不是太差,而且有熱更新的能力。

4.對(duì)現(xiàn)在的原生項(xiàng)目侵入小陨享,我可以直接使用cocopods來(lái)導(dǎo)入cordova插件到我現(xiàn)在的項(xiàng)目中葱淳。不需要建立一個(gè)cordova項(xiàng)目。如果以后換成其他技術(shù)方案也很容易抛姑。

雖然說(shuō)技術(shù)比較成熟了赞厕,但是cordova確實(shí)有點(diǎn)老了。網(wǎng)上的資料也不是太多定硝。所以開(kāi)發(fā)中還是遇到了很多坑皿桑。以下就是我在開(kāi)發(fā)中遇到的一些坑。

坑1.cordova項(xiàng)目建立

如我前面提到的蔬啡,在這個(gè)項(xiàng)目中我不是建立的一個(gè)cordova項(xiàng)目诲侮。而是使用cocopods導(dǎo)入的cordova第三方庫(kù)。cocopods項(xiàng)目的建立網(wǎng)上有很多就不贅述了箱蟆。下面是Podfile文件中cordova文件導(dǎo)入的代碼沟绪,第一個(gè)是cordova的框架,其他的都是我項(xiàng)目中需要的cordova插件空猜,這些插件提供了對(duì)應(yīng)的原生功能如果設(shè)備信息绽慈、網(wǎng)絡(luò)情況、文件訪問(wèn)等辈毯。p-1

p-1

導(dǎo)入后 直接在終端中執(zhí)行pod install命令就可以把cordova添加到現(xiàn)在的原生項(xiàng)目中了坝疼。如果是學(xué)習(xí)或者第一次使用cordova的朋友 建議你一定導(dǎo)入 “ pod 'phonegap-ios-template' ” 這個(gè)東東到項(xiàng)目中。他會(huì)導(dǎo)入一個(gè)完整的cordova項(xiàng)目谆沃。還有對(duì)應(yīng)的實(shí)例钝凶、www文件、config.xml等管毙。你可以在這個(gè)文件上參考修改腿椎。用cocopods來(lái)導(dǎo)入cordova 雖然方便桌硫,但是其他方面相對(duì)直接建立一個(gè)cordova項(xiàng)目有以下弊端:

1.cocopods 上在我寫(xiě)這篇文章時(shí)支持的cordova最高版本是4.5.4夭咬。我在github上看到的cordova最新版本在5.0.1啃炸。4.5.4是在2017年發(fā)布的。我也沒(méi)去詳細(xì)了解相對(duì)于5.0.X的版本卓舵,4.5.4有哪些功能欠缺南用。但是在準(zhǔn)備做熱更新時(shí)發(fā)現(xiàn)。是需要5.0.X版本來(lái)支持的掏湾。

2.cocopods 支持的cordova插件數(shù)比較少但是基本滿(mǎn)足日常開(kāi)發(fā),如果你確實(shí)需要一些cocopods不支持的插件你可以手動(dòng)導(dǎo)入裹虫。手動(dòng)導(dǎo)入插件我們?cè)谙旅嬖诒怼D憧梢允褂胮od search cordova 來(lái)查看 插件基本都是以cordova-plugin-* 來(lái)命名的 很好識(shí)別融击。?p-2


p-2

cocopods導(dǎo)入cordova的弊端在我這個(gè)項(xiàng)目中主要就是以上2個(gè)點(diǎn)筑公。相對(duì)于cocopods導(dǎo)入的優(yōu)點(diǎn)來(lái)說(shuō)。我還是推薦使用cocopods來(lái)導(dǎo)入尊浪。比較符合我們ios的正常開(kāi)發(fā)匣屡。

坑2.swift自定義cordova插件

自定義插件涉及到4個(gè)文件的編輯。分別是1.swift類(lèi)提供具體功能拇涤。2.config.xml文件需要把你自定義的swift類(lèi)添加進(jìn)去捣作。3.cordova_plugins.js文件也是需要你自己把添加的自定義類(lèi)加入進(jìn)去。這個(gè)文件主要是讓cordova可以去查找對(duì)應(yīng)的js對(duì)象鹅士。4.js文件券躁,js文件主要是調(diào)用swift方法。你需要在js類(lèi)中調(diào)用swift方法掉盅。

在網(wǎng)上查到的大部分都是基于oc來(lái)開(kāi)發(fā)的也拜。但是我這個(gè)項(xiàng)目是swift。在自定義插件時(shí)遇到的一個(gè)坑就是函數(shù)命名了趾痘、swift類(lèi)名慢哈、js代碼函數(shù)的命名了。以下我用一個(gè)簡(jiǎn)單例子來(lái)說(shuō)明扼脐。這個(gè)例子的作用很簡(jiǎn)單設(shè)置當(dāng)前viewcontroller的title岸军。

1.編寫(xiě)swift代碼。如p-3


p-3

注意點(diǎn)1. class前面需要用 @objc(類(lèi)名) 來(lái)修飾? 瓦侮。

注意點(diǎn)2. 插件類(lèi)需要繼承自CDVPlugin 類(lèi)艰赞。CDVPlugin類(lèi)是自定義插件必須繼承的類(lèi)。

注意點(diǎn)3. 方法名需要用@objc 修飾肚吏。

注意點(diǎn)4. 參數(shù)必須是CDVInvokedUrlCommand 類(lèi)型方妖。前端傳過(guò)來(lái)的參數(shù)都是通過(guò)CDVInvokedUrlCommand中的arguments來(lái)獲取》E剩可以看到cordova中對(duì)這個(gè)對(duì)象的定義 p-4


p-4

1._callbackId 為網(wǎng)頁(yè)回調(diào)方法的id?

2._className 插件的類(lèi)名党觅。在我這個(gè)例子中雌澄,就是"A"

3.js調(diào)用的swift代碼的方法名。在我這個(gè)例子中 他就是”setTitle“杯瞻。但是需要注意的是在js代碼中調(diào)用時(shí)不能寫(xiě)成"setTitle" 而需要傳遞“setTitleWithCommand”? 需要加上 “WithCommand”镐牺。

4._arguments 這個(gè)參數(shù)是一個(gè)數(shù)組。js想傳遞參數(shù)都可以放在這個(gè)數(shù)組中魁莉。

2.config.xml中添加對(duì)應(yīng)的swift類(lèi)

在config.xml中添加如果xml節(jié)點(diǎn)? 如圖p-5

p-5

放在其他feature節(jié)點(diǎn)后面即可睬涧。

3.cordova_plugins.js文件的添加

如果你是使用cocopods導(dǎo)入的。那么在www文件下有一個(gè)cordova_plugins.js文件旗唁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畦浓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子检疫,更是在濱河造成了極大的恐慌讶请,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屎媳,死亡現(xiàn)場(chǎng)離奇詭異夺溢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)剿牺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)企垦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晒来,你說(shuō)我怎么就攤上這事钞诡。” “怎么了湃崩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵荧降,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我攒读,道長(zhǎng)朵诫,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任薄扁,我火速辦了婚禮剪返,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邓梅。我一直安慰自己脱盲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布日缨。 她就那樣靜靜地躺著钱反,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上面哥,一...
    開(kāi)封第一講書(shū)人閱讀 49,741評(píng)論 1 289
  • 那天哎壳,我揣著相機(jī)與錄音,去河邊找鬼尚卫。 笑死归榕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的焕毫。 我是一名探鬼主播蹲坷,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼驶乾,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邑飒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起级乐,我...
    開(kāi)封第一講書(shū)人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疙咸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后风科,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撒轮,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年贼穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了题山。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡故痊,死狀恐怖顶瞳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愕秫,我是刑警寧澤慨菱,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站戴甩,受9級(jí)特大地震影響符喝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜甜孤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一协饲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缴川,春花似錦茉稠、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春吞获,著一層夾襖步出監(jiān)牢的瞬間况凉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工各拷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留刁绒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓烤黍,卻偏偏與公主長(zhǎng)得像知市,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子速蕊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

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