創(chuàng)建一個cordova項目:http://www.reibang.com/p/8773ab98a833
config.xml文件分析:http://www.reibang.com/p/518e55452821
兩種方式來使本地項目支持cordova
- carthage:4.4.0以上版本支持
- 手動配置
使用carthage來配置
git "git://git.apache.org/cordova-ios.git" "<version_or_tag>" # Apache
然而:
A shell task (/usr/bin/env git clone --bare --quiet git://git.apache.org/cordova-ios.git /Users/dawnwang/Library/Caches/org.carthage.CarthageKit/dependencies/cordova-ios) failed with exit code 128:
fatal: remote error: access denied or repository not exported: /cordova-ios.git
感受一下我內(nèi)心的羊駝。掖疮。射窒。狂巢。殴胧。订咸。
手動加入
- 如果Xcode在運行盖灸,則先退出(官方這么說氏涩,雖然我不知道為啥)
- 拷貝config.xml和CordovaLib/CordovaLib.xcodeproj文件進入工程
- 打開Xcode诈嘿,右鍵點擊添加文件,將上面兩個文件加入工程
- 在other linker flags中配置-force_load 和 -ObjC
- Build Phases->Link Binaries with Libraries.添加
AssetsLibrary.framework
CoreLocation.framework
CoreGraphics.framework
MobileCoreServices.framework
libCordova.a
- Target Dependencies中添加CordovaLib
- Header Search Paths
"$(TARGET_BUILD_DIR)/usr/local/lib/include"
"$(OBJROOT)/UninstalledProducts/include"
"$(OBJROOT)/UninstalledProducts/$(PLATFORM_NAME)/include"
"$(BUILT_PRODUCTS_DIR)"
運行報錯
ld: file not found: -ObjC
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決:我的第4步的other linker flags是配置在了本地工程的target下削葱,事實上應(yīng)該放在CordovaLib.xcodeproj工程下
此時Command+R運行正常
使用CDVViewController
-
首先我們要沒有任何錯誤的將代碼跑起來奖亚,然而我遇到了很多問題。
- 通過上一步添加cordova析砸,官方文檔說可以正常使用CDVViewController了昔字。
我新創(chuàng)建一個VC繼承了CDVViewController,然而卻報錯了首繁。
‘Cordova/Cordova.h’file not found
- 我傻啦吧唧得去找為什么自動生成的代碼告訴我這個文件找不到作郭。
網(wǎng)上的說法很多,Header Search Path什么的弦疮,然而都沒什么用夹攒。
Cordova庫里面事實上壓根就沒有Cordova.h這個文件,無論怎么操作都是不行的胁塞。所以把Cordova/Cordova.h換成
#import "Cordova/CDV.h"
完美解決咏尝。這算是Cordova的一個bug么!啸罢!很坑氨嗉臁!扰才!
PS:此處發(fā)現(xiàn)警告一枚允懂,CDVCommandDelegate.h里面有一個block沒有給參數(shù)類型。因為是Cordova的衩匣,遂忽略之蕾总。在Other Warning Flags中添加-Wno-strict-prototypes粥航,再次編譯,無警告生百。
再次編譯递雀,結(jié)果在
id backupWebStorage = [self.settings cordovaSettingForKey:@"BackupWebStorage"];
崩潰了。
- 查找原因是這個自定settings不能響應(yīng)方法cordovaSettingForKey置侍。由于這個方法是通過給字典增加分類的方式來添加的映之。所以需要在自己的工程的other linker flags中添加-ObjC拦焚。
- 于是我們終于可以愉快的運行了
- 由于之前沒有添加www/這個文件夾蜡坊,而且也沒有重新配置content,所以程序默認(rèn)去找www/index.html赎败。會報錯ERROR: Start Page at 'www/index.html' was not found.
將www/文件夾添加進去就好了秕衙,要注意的是,添加的時候一定要選擇Create folder references僵刮,文件夾是藍色才可以据忘。
- 通過上一步添加cordova析砸,官方文檔說可以正常使用CDVViewController了昔字。
-
正確加載www/index.html后
- 只有默認(rèn)安裝的幾個插件可以使用
在本地的工程中不能直接使用cordova plugin add 因為Current working directory is not a Cordova-based project.
如何增加新的插件?搞糕?- 在原來的hellocordova的工程中使用cordova plugin add添加需要添加的插件
- 將www/文件直接復(fù)制到本地工程的對應(yīng)目錄下勇吊,主要原因在于要使用cordova_plugins.js和plugins/
- cordova_plugins.js文件記錄了所有的插件的信息
- plugins/文件夾下則保存了對應(yīng)插件的Js文件
- 在finder中直接替換,所有的文件就自動加載到工程中了窍仰,我想這也是為什么之前添加www/這個文件要使用Create folder refrence這個選項的原因
- 將CordovaLib/Classes/Pievate/plugins/目錄下對應(yīng)的插件的原生代碼添加到本地工程Cordovalib.xcodeproj/Private/Plugins下
- 配置對應(yīng)的config.xml文件汉规,如:
<feature name="Device"> <param name="ios-package" value="CDVDevice" /> </feature>
- 配置好index.html文件
- Command+R 運行正常
- 如何增加自定義插件
- 創(chuàng)建一個繼承于CDVPlugin的類:CustomPluginTest
- 給這個類一個方法
- (void)customSelName:(CDVInvokedUrlCommand *)command { NSLog(@"%s______%@",__func__,command);}
- config.xml中配置
<feature name="CustomPluginTest"> <param name="ios-package" value="CustomPluginTest" /> <param name="onload" value="true" /></feature>
- 在index.html中寫
function customTest() { Cordova.exec(successFunction, failFunction, "customPluginTest", "customSelName", ["paramas"]);} function successFunction(){ alert("successFunction"); } function failFunction(){ alert("failFunction"); } <br/><button onclick="customTest()">customButton</button><br/>
- Command+R運行正常,點擊按鈕customButton驹吮,正常打印了customSelName方法中的command针史。
-[CustomPluginTest customSelName:]______<CDVInvokedUrlCommand: 0x600000455450>
- 只有默認(rèn)安裝的幾個插件可以使用
demo傳送門:https://github.com/DawnWdf/DW_TestCordovaManully