烽火exmobile--ios原生插件開(kāi)發(fā)

一:開(kāi)發(fā)

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、網(wǎng)絡(luò)空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、秦淮網(wǎng)站維護(hù)、網(wǎng)站推廣。

工具xcode、mbuilder

1:在http://www.exmobi.cn/open/resource.html網(wǎng)站下載生成插件包,XKPlugin_Test2_ComponentFactory是使用時(shí)的插件工廠(chǎng),可以改成自己的名稱(chēng)想使用的名稱(chēng):XKPlugin_CPI_ComponentFactory.h;其他文件XKPlugin_Component不要改動(dòng)。

2:XKPlugin_CPI_ComponentFactory.m文件中,修改紅色代碼,CPI_CalendarComponent是自己寫(xiě)的插件類(lèi)。




 

 

-    (XKPlugin_Component*) createComponent:(NSString*) type

{

    NSLog(@"XKPlugin_Component    createComponent %@", type);

    //根據(jù)插件type名構(gòu)建插件

    if    ([@"CPI_CalendarComponent" isEqualToString:type]){

           return [[CPI_CalendarComponent alloc] init];

               }

    return nil;

}

 

 

3:新建插件類(lèi),AppPlugin下,新建New Group,名稱(chēng)是CPI_CalendarComponent,在此文件夾下新建文件,

New File...-->Cocoa Touch Class-->Class(class就是插件類(lèi)名稱(chēng),和步驟2中的紅色代碼中的type類(lèi)型一致CPI_CalendarCpmponent)-->SubClass(NSObject)-->Language(Objective-C);

 

#import <UIKit/UIKit.h>
   #import "XKPlugin_Component.h"
   @interface CPI_CalendarComponent :  XKPlugin_Component
   @property (strong, nonatomic) NSString* idetifier ;    

 

 

4:CPI_CalendarCpmponent.h文件中導(dǎo)入基礎(chǔ)插件類(lèi)(XKPlugin_Component),其中idetifier 是需要返回的回調(diào)值

 

5:CPI_CalendarCpmponent.m中,

(1)getView是返回視圖,如果有視圖,則返回視圖模式,如果不返回視圖,則只可以直接返回一個(gè)nil;

(2)call方法是js和插件之間調(diào)用的橋梁,第一個(gè)參數(shù)必須是方法名稱(chēng),用來(lái)判斷js調(diào)用的什么方法,最多有起個(gè)參數(shù),前臺(tái)自己傳參,只要不大于7個(gè)就可以,后臺(tái)自己判斷參數(shù)個(gè)數(shù)。call方法格式不要修改,不要在call方法中使用UIAlert方法,容易造成閃退。

 

<nativecomponentid="native"style="width:200;height:300"type="ABC_SliderComponent"  factoryname=" XKPlugin_Test2_ComponentFactory"onchange="changetodo"minvalue =”1”maxvalue=”10”></nativecomponent>

 

 

(3)set方法是獲取前臺(tái)nativecomponent的xml標(biāo)簽中的參數(shù)

 

(4)setValue是插件的回調(diào),在方法體里執(zhí)行了需要操作的功能之后,回調(diào)一個(gè)值返回




 

 SEL sel = @selector(setValue:);
    if([delegate respondsToSelector: sel]) {
           [delegate performSelector: sel withObject: @"success"];
    }

 

 

5:get方法是可以在mbuilder上可以調(diào)用的返回值。




 

varnav=document.getElementById("nav");

vartest=nav.get("test");

 

 

前段頁(yè)面調(diào)用MBuilder

1:body里放xml標(biāo)簽文件,其實(shí)“type”代表的是你寫(xiě)的插件類(lèi),id是自己定義的,在js中使用

varnav=document.getElementById("nav");來(lái)獲取這個(gè)插件,factoryname是寫(xiě)的工廠(chǎng)類(lèi),wid是自己定義的方法,js中使用toGetWid(v)方法來(lái)獲取這個(gè)回調(diào)回來(lái)的值,就是xcode插件中,setValue中和回調(diào)函數(shù)一起返回過(guò)來(lái)的參數(shù)。

 

<nativecomponent     type="CPI_CalendarComponent"id="nav"

   factoryname="XKPlugin_CPI_ComponentFactory"    wid="toGetWid">   

</nativecomponent>

 

 

 

 

 

 


二:打包

1:新建一個(gè)文件夾,名稱(chēng)為自己定義的工廠(chǎng)類(lèi):XKPlugin_CPI_ComponentFactory

2:將xcode中的代碼通過(guò)編譯,點(diǎn)擊AppPlugin項(xiàng)目-->Product-->Archive。

3:可以在項(xiàng)目的Products目錄下看見(jiàn)一個(gè)libplugin.a文件,右鍵點(diǎn)擊-->Show in Finder,將.a文件復(fù)制到文件夾中。

4:將自己寫(xiě)的工廠(chǎng)類(lèi)XKPlugin_CPI_ComponentFactory.h文件復(fù)制到文件夾中

5:在文件夾中新建一個(gè)framework文件夾,里面新建一個(gè)framework.txt文檔,將插件項(xiàng)目中所需要的freamwork相對(duì)路徑放到.txt文件中,將插件工程中所需要的.a文件或者其他第三方framework庫(kù)復(fù)制到framework文件夾中

6:新建p_w_picpath文件夾,將插件工程中所需要的圖片放到文件夾中

7:新建other文件夾,將項(xiàng)目中一些其他文件放置到這個(gè)文件夾中,比如plist、xml文件(如果說(shuō)插件中需要設(shè)計(jì)到權(quán)限的問(wèn)題,需要在plist文件中添加權(quán)限);

8:新建xib文件夾,將插件工程中需要的xib文件放到文件夾中(返回視圖的插件需要,不然不需要);

9:新建natives文件夾,在文件夾下新建文件夾,名稱(chēng)為插件類(lèi)的名稱(chēng)CPI_CalendarComponent,新建config.xml文件,作為插件的版本信息,可以有有多個(gè)插件,config文件格式如下,其中version是版本號(hào),每次要更新的時(shí)候需要提高版本號(hào),不然會(huì)打包失敗。type是你的插件類(lèi),factoryname是工廠(chǎng)類(lèi),其他信息可以隨便填了。

 

<?xml version="1.0"    encoding="UTF-8"?>

<config>

   <version>1.1.9</version>

      <type>CPI_CalendarComponent</type>

      <factoryname>XKPlugin_CPI_ComponentFactory</factoryname>

      <description>日程寫(xiě)入</description>

      <date></date>

      <vendor url="" email=""></vendor>

</config>

 

 

 

10:所有文件完成之后,壓縮XKPlugin_CPI_ComponentFactory,格式必須是.zip格式的。

11:插件打包好之后登陸到烽火的控制臺(tái),在插件管理中,添加插件,打包成功之后,在mbuilder打包的時(shí)候 可以修改ios的打包配置文件,將自己的插件添加進(jìn)去就可以使用了。

 

三:遇到的問(wèn)題

Q:打包的時(shí)候,烽火平臺(tái)的教程上,直接選擇了文件夾中的七項(xiàng),然后壓縮,上傳之后顯示打包失??;

A:文件夾中的七個(gè)選項(xiàng),外面還需要加一層工廠(chǎng)類(lèi)的文件夾,然后再壓縮,壓縮格式必須是ZIP格式的。

Q:在IOS平臺(tái)壓縮打包,上傳失敗

A:IOS平臺(tái)打包的時(shí)候,文件夾中會(huì)出現(xiàn)多余的文件,導(dǎo)致打包失敗,將所有的文件拷到windows平臺(tái)壓縮。

Q:第一次上傳成功,第二次失敗

A:一個(gè)可能是修改的插件有問(wèn)題,還有一個(gè)可能是因?yàn)閏onfig.xml文件中version的版本號(hào)沒(méi)有提高導(dǎo)致的。

Q:本次所做的日歷插件中,ios10以下的版本可以正常使用,ios10以上的沒(méi)有反應(yīng)

A:IOS10的版本提高了安全性,在開(kāi)發(fā)的時(shí)候,需要加上權(quán)限,在AppPlugin的文件夾下,新建一個(gè)info.plist文件,或者直接從別處拷過(guò)來(lái),在Information Property List 下添加一個(gè)App TransportSecurity Settings 選項(xiàng),在此項(xiàng)下面加上插件所需要的權(quán)限。然后選中AppPlugin工程,在Build Settings選項(xiàng)下面找到 packaging-->info.plist File 選項(xiàng),將info.plist文件的路徑加上去,并且將這個(gè)plist文件加入到打包文件夾中的other文件夾下。

Q:打包成功之后安裝app,但是打開(kāi)之后會(huì)有閃退現(xiàn)象

A:第一,在MBuilder中打包的項(xiàng)目的時(shí)候,基座版本不要選的太高

  第二,在插件的call方法中,不要使用UIAlert方法彈出信息,將所需的信息通過(guò)回調(diào),返回到j(luò)s中,        通過(guò)js去回調(diào)。

Q:使用get方法獲取參數(shù)值,在js中使用nav.get("v"),信息沒(méi)有返回

A:返回的參數(shù)沒(méi)有獲取到,參數(shù)需要操作成功之后通過(guò)自身的回調(diào)函數(shù)回來(lái),js使用時(shí)并沒(méi)有獲取到這個(gè)參數(shù)值,callbackFunction是從set方法中根據(jù)前端<nativecomponent>中自定義的名稱(chēng)獲取的,helper_callJsScript調(diào)用了js中的方法名稱(chēng)。

 

 

-(void) set:(NSString*) name value:(NSString*)value{
         if ([@"wid" isEqualToString: name]){
             callbackFunction = [NSString stringWithString:value];
         }
   }

 

-(void*)setValue:(NSString*)v{
        wid = v;
        if (callbackFunction.length > 0){
            NSString* string = [NSString stringWithFormat:@"%@ (\"%@\")",callbackFunction,v];
            [self helper_callJsScript:string];
        }
       return nil;
   }

 

 

 

附件:http://down.51cto.com/data/2368379

本文題目:烽火exmobile--ios原生插件開(kāi)發(fā)
當(dāng)前鏈接:http://muchs.cn/article4/pjjpie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)全網(wǎng)營(yíng)銷(xiāo)推廣、靜態(tài)網(wǎng)站定制網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化