靜態(tài)庫(kù)的制作—仿寫(xiě)pingxx之路

在企業(yè)開(kāi)發(fā)中蚜点,一些核心技術(shù)或者常用框架荆虱,出于安全性和穩(wěn)定性的考慮,不想被外界知道纸颜,所以會(huì)把核心代碼打包成靜態(tài)庫(kù)兽泣,只暴露頭文件給程序員使用(比如:支付寶的支付sdk以及WeChat sdk)

我們知道集成第三方支付需要做相對(duì)多的配置,當(dāng)一個(gè)項(xiàng)目集成之后胁孙,在另外一個(gè)項(xiàng)目再集成有需要做很多的配置唠倦,此時(shí)我們可以把第三方支付統(tǒng)一配置成靜態(tài)庫(kù)的包,然后在不同的項(xiàng)目中實(shí)現(xiàn)快速導(dǎo)入和集成浊洞,本篇重點(diǎn)介紹在微信支付以及支付寶支付的快速集成牵敷。

簡(jiǎn)介

談到靜態(tài)庫(kù),不得不說(shuō)動(dòng)態(tài)庫(kù)法希,以及他們兩個(gè)的區(qū)別

  1. 存在形式
  • 靜態(tài)庫(kù):.a 和 .framework
  • 動(dòng)態(tài)庫(kù):.dylib 和 .framework
  1. 區(qū)別
  • 靜態(tài)庫(kù):鏈接時(shí),靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行文件中靶瘸,被多次使用就有多份冗余拷貝
  • 動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制苫亦,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用怨咪,系統(tǒng)只加載一次屋剑,多個(gè)程序共用,節(jié)省內(nèi)存

這里我們選擇采用.a的方式進(jìn)行封裝[其實(shí)試過(guò)Framework貌似不太好用??]

制作靜態(tài)庫(kù)

  1. 新建項(xiàng)目诗眨,選擇 Cocoa Touch Static Library


    step1
  2. 選擇項(xiàng)目名稱 "MyPingXX"
  3. 我們把包含支付寶sdk和微信sdk以及自我封裝的文件拷貝至靜態(tài)庫(kù)項(xiàng)目中


    step3

Demo中對(duì)支付寶支付和微信支付進(jìn)行的簡(jiǎn)單的API暴露唉匾,此時(shí)項(xiàng)目目錄結(jié)構(gòu)是這樣子的

展示結(jié)構(gòu)目錄
  1. 在 MyPingXX 類(lèi)里面加入相關(guān)代碼:
MyPingXX.h

@interface MyPingXX : NSObject

- (instancetype)initMyPingXXWithAlikey:(NSString*)key1 weChatKey:(NSString*)key2;

- (void)goPay;
@end

MyPingXX.m

#import "MyPingXX.h"

#import "MyAliPay.h"
#import "MyWeChatPay.h"

@interface MyPingXX ()

@property (nonatomic,strong) MyAliPay    *aliPay;
@property (nonatomic,strong) MyWeChatPay *wechatPay;

@end

@implementation MyPingXX

- (instancetype)initMyPingXXWithAlikey:(NSString*)key1 weChatKey:(NSString*)key2
{
    self = [super init];
    if (self) {
        self.aliPay = [[MyAliPay alloc] initAliPayWithAppkey:key1];
        self.wechatPay = [[MyWeChatPay alloc] initWeChatPayWithAppkey:key2];
    }
    return self;
}
- (void)goPay
{
    NSLog(@"趕緊支付去??");
}
@end
  1. 此時(shí) Build 項(xiàng)目,已經(jīng)成功匠楚,說(shuō)明已經(jīng)集成完畢巍膘。我們看下此時(shí)的 Build Phases目錄下的結(jié)構(gòu)


    phases
  • 1部分:為代碼的.m文件,一般不用處理
  • 2部分:為依賴庫(kù)文件:此時(shí)我們需要把 libWeChatSDK.a 文件刪除芋簿!
  • 3部分:為對(duì)外展示的頭文件打包的時(shí)候會(huì)在 include 文件夾里展示峡懈,可以點(diǎn)擊左下角增加其他的頭文件

這里重點(diǎn)介紹下為什么要?jiǎng)h除 libWeChatSDK.a這個(gè)類(lèi),因?yàn)殪o態(tài)庫(kù)中引用靜態(tài)庫(kù)与斤,打包的時(shí)候就是包含該靜態(tài)庫(kù)肪康,但是導(dǎo)入到真正的項(xiàng)目就會(huì)存在重復(fù)導(dǎo)入的情況,故一定要移除撩穿。

  1. 開(kāi)始打包[可以選擇Scheme的Debug模式和Release模式磷支,分別會(huì)打出對(duì)應(yīng)的包],這里我們打出用于模擬器和真機(jī)通用的包
    • 切換至模擬器狀態(tài)進(jìn)行Build程序
    • 切換至 Generic iOS Device 進(jìn)行Build程序
  2. 進(jìn)入DerivedData 文件夾下 找到項(xiàng)目文件夾 cd /Users/用戶名/Library/Developer/Xcode/DerivedData/MyPingXX-borelbgfhilpdgfheqvpixwosrmw/Build/Products
  3. 可以看到該目錄下有兩個(gè)文件夾 Debug-iphonesimulator 和 Debug-iphoneos食寡,分別代表模擬器和真機(jī)的Debug庫(kù)文件雾狈。合并兩者 lipo -create Debug-iphoneos/libMyPingXX.a Debug-iphonesimulator/libMyPingXX.a -output libMyPingXX.a

至此靜態(tài)庫(kù)的打包已經(jīng)完成,目前打包的成果為:libMyPingXX.a 和MyPingXX.h 分別是包文件和庫(kù)文件
此時(shí)加上微信支付的靜態(tài)庫(kù)和阿里支付的靜態(tài)庫(kù)就構(gòu)成了我們自己的pingxx庫(kù)冻河,導(dǎo)入到demo工程里面看下目錄結(jié)構(gòu):


demo項(xiàng)目

補(bǔ)充

  1. 集成了自制庫(kù)之后箍邮,也需要添加支付寶/微信等所需要的依賴的系統(tǒng)庫(kù)茉帅,微信支付需要注意, 添加 Other Linker Flags:在 Build Settings 搜索 Other Linker Flags 锭弊,添加 -ObjC堪澎。
  2. 如果需要集成一些資源文件,比如說(shuō)圖片味滞,txt等之類(lèi)的文件樱蛤,可以制作成bundle,和自制的庫(kù)一塊打包進(jìn)demo工程剑鞍,但是引用的地方需要修改一下:
        //bundle前
     UIImage * titleImage = [UIImage imageNamed:@"mytitle"];
     //bundle后
     UIImage * titleImage = [UIImage imageNamed:@"MyPingXX.bundle/mytitle"];
     
     //bundle前
     NSString * resourcePath = [[NSBundle mainBundle] pathForResource:@"nameList" ofType:@"pdf"];
     //bundle后
     NSString * bundlePath = [[ NSBundle mainBundle] pathForResource: @"MyPingXX" ofType :@"bundle"];
     NSBundle *resourceBundle = [NSBundle bundleWithPath:bundlePath];
     
     NSString * resourcePath = [[NSBundle bundleWithPath:bundlePath] pathForResource:@"nameList" ofType:@"pdf"];
    

最后附上demo地址:https://github.com/albertjson/MyPingXX

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昨凡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蚁署,更是在濱河造成了極大的恐慌便脊,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件光戈,死亡現(xiàn)場(chǎng)離奇詭異哪痰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)久妆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)晌杰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人筷弦,你說(shuō)我怎么就攤上這事肋演。” “怎么了烂琴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵爹殊,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我监右,道長(zhǎng)边灭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任健盒,我火速辦了婚禮绒瘦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扣癣。我一直安慰自己惰帽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布父虑。 她就那樣靜靜地躺著该酗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呜魄,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天悔叽,我揣著相機(jī)與錄音,去河邊找鬼爵嗅。 笑死娇澎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的睹晒。 我是一名探鬼主播趟庄,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伪很!你這毒婦竟也來(lái)了戚啥?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锉试,失蹤者是張志新(化名)和其女友劉穎猫十,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體键痛,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炫彩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了絮短。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡昨忆,死狀恐怖丁频,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邑贴,我是刑警寧澤席里,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站拢驾,受9級(jí)特大地震影響奖磁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜繁疤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一咖为、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稠腊,春花似錦躁染、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春饰恕,著一層夾襖步出監(jiān)牢的瞬間挠羔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工埋嵌, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留破加,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓莉恼,卻偏偏與公主長(zhǎng)得像拌喉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俐银,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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