Cordova進(jìn)行iOS開(kāi)發(fā) (已存FFmpeg項(xiàng)目中添加Cordova及自定義插件)
主要介紹的是iOS端項(xiàng)目實(shí)戰(zhàn),以及簡(jiǎn)單的將Cordova集成到自己的工程項(xiàng)目中(iOS的FFmpeg項(xiàng)目)的方法,以及添加Cordova自定義插件的簡(jiǎn)單使用。本文的自定義插件是純代碼的實(shí)現(xiàn)掖棉,至于在終端創(chuàng)建自定義cordova插件請(qǐng)查看官網(wǎng)介紹:http://cordova.axuer.com/plugins/
其實(shí)最終實(shí)現(xiàn)的效果就是在js網(wǎng)頁(yè)界面點(diǎn)擊網(wǎng)頁(yè)里的按鈕觸發(fā)ffmpeg解碼的效果,即自定義cordova插件妥衣,你也可以自定義其他的插件(如訪(fǎng)問(wèn)相機(jī)相冊(cè)赘阀,像原生app一樣去訪(fǎng)問(wèn)手機(jī)里的內(nèi)容)從而實(shí)現(xiàn)小混合開(kāi)發(fā)(webapp)
關(guān)于業(yè)務(wù)的web頁(yè)面需要調(diào)用原生的相機(jī)万细,相冊(cè)扑眉,地理位置,掃描二維碼等一系列功能赖钞,這就涉及到j(luò)s與原生交互的問(wèn)題了腰素。起初iOS端提出的方案是直接用WebView或者用WKWebView嵌套就好了,因?yàn)閼?yīng)要求雪营,只要web端發(fā)送一個(gè)假的請(qǐng)求弓千,然后手機(jī)端斷掉截住這個(gè)請(qǐng)求也是可以實(shí)現(xiàn)交互的,不過(guò)安卓因?yàn)槠淦脚_(tái)多樣性和特殊性這個(gè)就不兼容而且可行性交差献起,這是安卓給的說(shuō)法洋访,可是不管怎么說(shuō),反正最后確定雙方都用Cordova實(shí)現(xiàn)該功能
至于iOS端cordova的配置請(qǐng)查看的上一篇文章谴餐,絕對(duì)是筆者親身經(jīng)歷姻政,有圖有真相(第一次經(jīng)歷確實(shí)有點(diǎn)坑),iOS版Cordova安裝開(kāi)發(fā)
在這里先介紹下ffmpeg的.a架構(gòu):和cordova.a的架構(gòu)類(lèi)似岂嗓,所能夠支持的模擬器或者真機(jī)的版本平臺(tái)(盡量ffmpeg的.a和cordova.a支持架構(gòu)相同扶歪,不然在運(yùn)行時(shí)會(huì)出現(xiàn):Undefined symbols for architecture x86_64:)
好了下面真正進(jìn)入正文:
1.將cordova本地相關(guān)的文件copy到已存在的項(xiàng)目中
1.1. ?"/Users/Mac/Desktop/Cordova/hello/platforms/ios" 路徑下面需要copy的4個(gè)文件夾copy到新建項(xiàng)目(FFmpegDecodeCordovaPlugin)的根路徑中
CordovaLib? cordova? www? platform_www
1.2. 需要將下面的兩個(gè)"config.xml" -> 各自copy到已存在的iOS項(xiàng)目的文件夾內(nèi)
2.配置相關(guān)參數(shù)
2.1. 下圖"Run Script.png" 中點(diǎn)擊①中的按鈕創(chuàng)建"New Run Script Phase" ,②為創(chuàng)建的"Run Script"
2.2 將下圖"Copy www directory.png" 中①原名稱(chēng)"Run Script"修改為"Copy www directory"摄闸;將②中的選項(xiàng)(show environment variables in build log)去掉;將下面的代碼復(fù)制到③中.
NODEJS_PATH=/usr/local/bin; NVM_NODE_PATH=~/.nvm/versions/node/`nvm version 2>/dev/null`/bin; N_NODE_PATH=`find /usr/local/n/versions/node/* -maxdepth 0 -type d 2>/dev/null | tail -1`/bin; XCODE_NODE_PATH=`xcode-select --print-path`/usr/share/xcs/Node/bin; PATH=$NODEJS_PATH:$NVM_NODE_PATH:$N_NODE_PATH:$XCODE_NODE_PATH:$PATH && node cordova/lib/copy-www-build-step.js
2.3 Build Settings -> Other Linker Flags 中添加"-ObjC -all_load"
2.4 Add Files to ... -> CordovaLib.xcodeproj
2.5 Add Files to ... -> config.xml
2.6 Add Files to ... -> www文件夾
2.7 Schemes按照下圖配置,然后編譯一次程序乎完,最后導(dǎo)入下面兩項(xiàng)
Build Phases -> Target Dependencies -> CordovaLib
Build Phases -> Link Binary With Libraries -> libCordova.a
(在這里說(shuō)下心的熏兄,此處的libCordova.a和ffmpeg的.a靜態(tài)庫(kù)一樣,需要多個(gè)不同版本模擬器和真機(jī)器的編譯树姨,支持的架構(gòu)才能夠多摩桶,盡量和ffmpeg的.a的架構(gòu)相同)
編譯完后可以在終端查看下 lipo -info XXXX.a支持的架構(gòu)
最后可以把a(bǔ)rm64和x86_64合并為一個(gè)fat file(新的.a庫(kù))lipo -create /Users//Build/Products/Debug-iphoneos/libCordova.a /Users//Build/Products/Debug-iphonesimulator/libCordova.a? -output /Users//Build/Products/LibCordova.a
2.8 Schemes按照下圖配置,將"ViewController.h" 文件改為
3. 自定義插件
3.1 在config.xml文件中加入
3.2 創(chuàng)建一個(gè)"ZTTPlugin" 類(lèi)帽揪,實(shí)現(xiàn)下面的的方法
ZTTPlugin.h聲明
#import<Cordova/CDVPlugin.h>
@interface ZTTPlugin : CDVPlugin
- (void)myMethod:(CDVInvokedUrlCommand*)command;
@end
ZTTPlugin.m實(shí)現(xiàn)
3.3 編寫(xiě)index.html文件如下
運(yùn)行效果如下:
整個(gè)ExampleObject界面都是網(wǎng)頁(yè)硝清,不再是控制里的控件
由于筆者js略知皮毛,網(wǎng)頁(yè)寫(xiě)的很簡(jiǎn)單转晰,js進(jìn)行中芦拿,有人告訴我js現(xiàn)在是一種趨勢(shì)啦
4.工程地址:https://github.com/mrzhao12/FFmpegDecodeCordovaPlugin
5.下面說(shuō)下簡(jiǎn)單cordova自定義插件的坑
1.第一次復(fù)制index.xml時(shí)位置放錯(cuò)了會(huì)出現(xiàn):
ERROR: Plugin 'ZTTPlugin' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2.(在這里說(shuō)下心得士飒,此處的libCordova.a和ffmpeg的.a靜態(tài)庫(kù)一樣,需要多個(gè)不同版本模擬器和真機(jī)器的編譯蔗崎,支持的架構(gòu)才能夠多酵幕,盡量和ffmpeg的.a的架構(gòu)相同)(詳細(xì)情況見(jiàn)上文2.7)
Cordova入門(mén)也沒(méi)有那么難,多看看官方的文檔Documentation缓苛。