xcode集成h5+,采用官方最新SDK遭居,并可以支持和原生ios函數(shù)接口通信

系統(tǒng)環(huán)境

macbook:macos high Sierra 10.13.4
xcode:Version 9.3 (9E145)
h5+sdk: 官網(wǎng)最新版

說明

因為工作需要,公司準備采用H5的方式來做app旬渠,搜索各種開發(fā)環(huán)境魏滚,rn
也自己研究過,是好東西坟漱,但是覺得學(xué)習(xí)周期可能過長,所以暫時采用國產(chǎn)的hbuilder更哄,雖然坑比較多芋齿,但是還是硬著頭皮上

基礎(chǔ)成果

公司第一版的ios商城系統(tǒng)app提前上架,

集成環(huán)境開始

吐槽一下成翩,集成的坑真的是多到爆呀觅捆,官方文檔寫的也是夠了,集成到死的心都有了(哈哈麻敌,本人是做前端的栅炒,app開發(fā)不懂,所以有點懵弄的)术羔,rn的環(huán)境搭建多簡單赢赊。好了,開始吧,主要還是基于官方文檔來:http://ask.dcloud.net.cn/article/941

  • xcode創(chuàng)建項目什么的就一筆帶過了吧
  • 復(fù)制HBuilder-Hello工程的相應(yīng)文件到新創(chuàng)建的項目文件,文件為:

ViewController.h 和 ViewController.m
AppDelegate.h 和 AppDelegate.m

  • 拷貝以下文件到新創(chuàng)建工程目錄下

iOS-SDK/SDK/Bundles/PandoraApi.bundle
iOS-SDK/SDK/control.xml
iOS-SDK/SDK/Libs/libcoreSupport.a
iOS-SDK/SDK/Libs/liblibPDRCore.a
iOS-SDK/SDK/Libs/liblibUI.a

  • 拷貝IOS-SDK/SDK/inc目錄到新創(chuàng)建工程目錄下级历,并添加到工程內(nèi)
  • 點擊Project->TARGETS->Build Settings搜索“Other Linker Flags”释移,雙擊搜索到的項雙擊,在彈出框內(nèi)添加想“-ObjC”

說明:官網(wǎng)評論中有人說不需要設(shè)置‘-ObjC’寥殖,但是集成過程中玩讳,沒有設(shè)置的話會無法集成成功,如果有高人指導(dǎo)嚼贡,希望可以告知一二

  • 點擊Projcet->General->Linked Frameworks and Libraries 添加系統(tǒng)庫到工程

按照官網(wǎng)文檔中的庫文件導(dǎo)入吧熏纯,如下。
JavaScriptCore.framework
WebKit.framework
CoreTelephony.framework
MobileCoreServices.framework
SystemConfiguration.framework
MediaPlayer.framework
AudioToolbox.framework
Security.framework
QuartzCore.framework
CFNetwork.framework
Foundation.framework
CoreFoundation.framework
CoreGraphics.framework
UIKit.framework
QuickLook.framework
libstdc++.6.tbd
libxml2.tbd
libz.tbd
libsqlite3.0.tbd
ImageIO.framework
CoreText.framework

  • 點擊Project->TARGETS->Build Settings搜索“ARC”粤策,修改"Objective-C Automatic Reference Counting"項的值為"NO", 如果希望使用ARC則需要修改相應(yīng)的內(nèi)存管理代碼樟澜。

如果不修改,會出現(xiàn)ARC restrictions的錯誤

  • 此時運行掐场,肯定報錯往扔,報錯內(nèi)容如下:

Undefined symbols for architecture x86_64:
"OBJC_CLASS$_DCSplashAdObserver", referenced from:
objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
問題原因:
因為官方默認設(shè)置了開屏廣告贩猎,但是我們有沒有引入。
我的處理方式:
注釋掉:AppDelegate.m 中的#import "DCSplashAdObserver.h" 和 #define dcSplashAd

  • 此時運行萍膛,不出意外將提示成功吭服,但是沒有在模擬器中看到失敗的頁面,因為我們還沒做完集成呀蝗罗,繼續(xù)艇棕。
  • 修改頭文件搜索路徑:

點擊Project->TARGETS->Build Settings搜索"Header Search Paths",
雙擊搜索到的"Header Search Paths"項,將工程目錄下的inc目錄拖到打開的下拉框

  • 修改靜態(tài)庫搜索路徑:

點擊Project->TARGETS->Build Settings搜索"Library Search Paths",
如果"Library Search Paths"項下有值則不需要處理串塑,
如果沒有值則雙擊搜索到的"Library Search Paths"項沼琉,將工程目錄下的libs目錄(靜態(tài)庫所在目錄)拖到打開的下拉框

  • 修改BitCode

點擊Project->TARGETS->Build Settings搜索BitCode
將Enable Bitcode項的值改成 ‘NO’

  • 添加Web應(yīng)用到工程

在工程目錄下創(chuàng)建目錄”Pandora->apps->[APPID]->www“目錄,并將Web應(yīng)用拷貝到www目錄下
APPID為要加入到工程應(yīng)用mainfest.json文件
添加Pandora目錄到工程中

  • 修改control.xml文件

修改control.xml文件的appid節(jié)點值為mainfest.json文件的id節(jié)點下內(nèi)容,appver節(jié)點內(nèi)容修改為manifest.json文件的version->name節(jié)點下內(nèi)容

  • 階段性成果

此時再次運行模擬器桩匪,將看到hbulider官方demo頁面打瘪,只是會出現(xiàn)模版未添加的提示,暫時先不管傻昙,可以小小的慶祝一下了闺骚,集成環(huán)境基本是ok的,如果需要增加模塊妆档,請查看官方sdk文件中的Feature-iOS.xls僻爽,并對應(yīng)導(dǎo)入即可.

  • 繼續(xù),設(shè)置應(yīng)用的圖標

點擊project->target->General->App Icons and Launch Images->App Icons Source項右側(cè)小箭頭

  • 設(shè)置應(yīng)用的splash圖片

拷貝HBuider-Hello工程的info.plist文件的UILaunchImages節(jié)點到新工程info.plist文件贾惦,同時拷貝HBuilder-Hello工程下的splash目錄到新工程目錄下并將其添加到新工程中
根據(jù)圖片的尺寸逐個替換splash圖片胸梆,注意文件名不能修改

  • 修改info.plist文件,添加App Transport Security Settings類型為Dictionary须板,在該項下添加Allow Arbitrary Loads項類型為Boolean碰镜,值為YES
  • 再次提示

運行時如果提示“打包時未添加XXX模塊”,請參考SDK/Feature-ios.xls文件习瑰,查找對應(yīng)插件名需要引入的5+庫文件和系統(tǒng)庫文件洋措,添加到工程即可

  • 如果只是為了集成到ios,那到這里杰刽,集成工作就完成了菠发,其實這篇文章和官網(wǎng)一樣,只是里面有一些注意事項:

1贺嫂、splash滓鸠、inc、libs文件夾一定是要記得add到項目第喳,并且顏色是黃色糜俗。
2、庫文件一定要按照官方或者本文檔中的全部添加進去

集成環(huán)境完成了,但是真實環(huán)境往往需要和原生的ios進行通信悠抹,畢竟h5+很多系統(tǒng)級的操作還是無法更好的使用珠月,比如:需要使用第三方公司的sdk,下面我們繼續(xù)完成可以和原生ios通信的配置步驟:
  • 擴展插件JS API 編寫

首先要定義一個插件類別名楔敌,并需要在IOS工程的PandoraApi.bundle\feature.plist文件中聲明插件類別名和Native層擴展插件類的對應(yīng)關(guān)系啤挎,將一下demo添加到dict下
<key>plugintest</key>
<dict>
<key>class</key>
<string>PGPluginTest</string>
</dict>

  • 具體的插件寫法見官網(wǎng):http://ask.dcloud.net.cn/article/67,我這里只是簡單實現(xiàn)了一下卵凑。
  • plugintest.js文件內(nèi)容庆聘,文件是建立與ios原生通信的橋梁

document.addEventListener( "plusready", function()
{
var _BARCODE = 'plugintest',
B = window.plus.bridge;
var plugintest =
{
PluginTestFunction : function (Argus1, Argus2, Argus3, Argus4, successCallback, errorCallback )
{
var success = typeof successCallback !== 'function' ? null : function(args)
{
successCallback(args);
},
fail = typeof errorCallback !== 'function' ? null : function(code)
{
errorCallback(code);
};
callbackID = B.callbackId(success, fail);
return B.exec(_BARCODE, "PluginTestFunction", [callbackID, Argus1, Argus2, Argus3, Argus4]);
}
};
window.plus.plugintest = plugintest;
}, true );

  • 使用的html頁面

1、以下是異步調(diào)用
function PluginTestFunction() {
plus.plugintest.PluginTestFunction("Html5","Plus","AsyncFunction","MultiArgument!", function( result ) {
alert( result[0] + "" + result[1] + "" + result[2] + "_" + result[3] );
},function(result){
alert(result)
});
}
2勺卢、同步方式調(diào)用
function PluginTestFunctionSync()
{
plus.plugintest.PluginTestFunctionSync("Html5");
}
3伙判、直接調(diào)用原生
function getText()
{
plus.plugintest.PluginTestFunctionSync("Html5");
}

結(jié)尾

到此處,一個干凈并且可以使用js插件的集成環(huán)境已經(jīng)完成黑忱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宴抚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甫煞,更是在濱河造成了極大的恐慌酱塔,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件危虱,死亡現(xiàn)場離奇詭異,居然都是意外死亡唐全,警方通過查閱死者的電腦和手機埃跷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邮利,“玉大人弥雹,你說我怎么就攤上這事⊙咏欤” “怎么了剪勿?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長方庭。 經(jīng)常有香客問我厕吉,道長,這世上最難降的妖魔是什么械念? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任头朱,我火速辦了婚禮,結(jié)果婚禮上龄减,老公的妹妹穿的比我還像新娘项钮。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布烁巫。 她就那樣靜靜地躺著署隘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亚隙。 梳的紋絲不亂的頭發(fā)上磁餐,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音恃鞋,去河邊找鬼崖媚。 笑死,一個胖子當著我的面吹牛恤浪,可吹牛的內(nèi)容都是我干的畅哑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼水由,長吁一口氣:“原來是場噩夢啊……” “哼荠呐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起砂客,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泥张,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鞠值,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媚创,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年彤恶,在試婚紗的時候發(fā)現(xiàn)自己被綠了钞钙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡声离,死狀恐怖芒炼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情术徊,我是刑警寧澤本刽,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站赠涮,受9級特大地震影響子寓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笋除,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一别瞭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧株憾,春花似錦蝙寨、人聲如沸晒衩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽听系。三九已至,卻和暖如春虹菲,著一層夾襖步出監(jiān)牢的瞬間靠胜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工毕源, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浪漠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓霎褐,卻偏偏與公主長得像址愿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子冻璃,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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