iOS 打包靜態(tài)庫(kù)與workspace

版權(quán)聲明
本文由陳懷哲首發(fā)自簡(jiǎn)書(shū):http://www.itdecent.cn/users/9f2e536b78fd/latest_articles;
微信公眾號(hào):陳懷哲(chenhuaizhe2016);
無(wú)需授權(quán)即可轉(zhuǎn)載,但請(qǐng)自覺(jué)保留以上版權(quán)聲明。


雖然開(kāi)源越來(lái)越被人們所接受,但是對(duì)于核心代碼,公司一般是不公開(kāi)的。如果想把自己的sdk提供給合作方使用,很多會(huì)選擇使用靜態(tài)庫(kù)。
已經(jīng)成熟穩(wěn)定的代碼打包成靜態(tài)庫(kù)文件(.a文件)比較簡(jiǎn)單。但如果我們需要可以調(diào)試更改代碼,又能隨時(shí)使用它的.a文件,這時(shí)候就需要用到workspace來(lái)關(guān)聯(lián)各個(gè)工程文件,并且能隨時(shí)導(dǎo)出最新的靜態(tài)庫(kù)給友方使用,而不需要重新打包。
我們有幾個(gè)獨(dú)立工程,如果想組織在一個(gè)主工程里使用,也可以使用workspace.

如何打包.a靜態(tài)庫(kù)文件

1、 創(chuàng)建工程的時(shí)候,選擇cocoa touch static library

2、在 edit scheme中選Run ,build configration 改成debug。
選中一個(gè)模擬器的設(shè)備類(lèi)型,編譯一下。再選中 Generic iOS Device ,編譯一下。
在Products文件夾下的.a文件已經(jīng)變黑了,表示可用了。這時(shí)候 Show in Finder。就可以找到Debug類(lèi)型的真機(jī)靜態(tài)庫(kù)和模擬器靜態(tài)庫(kù)版本了。

edit scheme--> Run
Show in Finder

Debug類(lèi)型的真機(jī)靜態(tài)庫(kù)和模擬器靜態(tài)庫(kù)版本

靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的區(qū)別

動(dòng)態(tài)庫(kù)是在蘋(píng)果系統(tǒng)中,不同的工程調(diào)用的時(shí)候才會(huì)加載到內(nèi)存里。
靜態(tài)庫(kù)必須復(fù)制到每個(gè)工程里面,不能動(dòng)態(tài)加載。
<strong>蘋(píng)果商店不允許包含自己制作的動(dòng)態(tài)庫(kù)的app上架app store。</strong>

靜態(tài)庫(kù)有哪些版本

1、首先分架構(gòu),也就是模擬器還是真機(jī)。當(dāng)你編譯時(shí),選擇的設(shè)備不同,就會(huì)得到不同的架構(gòu)版本。
2、其次分Release和Debug版本。這在edit scheme里面的 build configration 可以更改。一般來(lái)說(shuō),如果提供出去給別人用的話(huà),建議使用Release版本。Release版本包會(huì)稍微小一些。

如何檢測(cè)靜態(tài)庫(kù)類(lèi)型,并合并靜態(tài)庫(kù)

1、檢測(cè)靜態(tài)庫(kù)支持的架構(gòu)類(lèi)型

$ lipo -info xxxxx.a

示例如下:


查詢(xún)示例

2、合并靜態(tài)庫(kù)
合并之后的靜態(tài)庫(kù),既可以在模擬器使用,也可以在真機(jī)使用

$ lipo -creat xxxxx.a  yyyyy.a -output zzzzz.a
合并靜態(tài)庫(kù)

3、如果不想合并靜態(tài)庫(kù),直接編譯時(shí)就生成真機(jī)和模擬器通用的靜態(tài)庫(kù),可以在 Build Active Architecture Only中都設(shè)置為NO


Build Active Architecture Only

如何向靜態(tài)庫(kù)添加.h文件

在Build Phases中找到Copy Files,點(diǎn)擊添加要暴露出去的文件


Copy Files

如何向靜態(tài)庫(kù)添加bundle資源文件

1、創(chuàng)建一個(gè)文件夾,直接將拓展名改成.bundle,然后“顯示包內(nèi)容”,往里面添加資源文件
2、獲取bundle文件夾的資源

    NSString *path = [[NSBundle mainBundle]pathForResource:@"icon.png" ofType:nil inDirectory:@"CCYY.bundle"];
    UIImage *image = [UIImage imageWithContentsOfFile:path];

如何打包framework類(lèi)型的靜態(tài)庫(kù)

1、打包framework靜態(tài)庫(kù)基本和.a文件一樣,創(chuàng)建類(lèi)型換成選framework


framework

2、默認(rèn)是生成動(dòng)態(tài)庫(kù),需要在設(shè)置中改成靜態(tài)庫(kù)

改成靜態(tài)庫(kù)

3、暴露出去的頭文件需要放在Public中去

Public

調(diào)試靜態(tài)庫(kù)

1、在主工程里點(diǎn)擊右鍵,向工程添加文件,把你要調(diào)試使用的靜態(tài)庫(kù)文件夾添加進(jìn)去。
2、在Build Phases添加靜態(tài)庫(kù)的.a文件


在Build Phases添加靜態(tài)庫(kù)的.a文件

3、開(kāi)始使用調(diào)試
比如我靜態(tài)庫(kù)里有一個(gè)方法

//  CCYY.h
//  StaticCCYY
#</code>import <UIKit/UIKit.h>
@interface CCYY : UIViewController

+ (int)giveMeFive;

@end

//  CCYY.m
//  StaticCCYY
#import "CCYY.h"
@implementation CCYY

+ (int)giveMeFive{
   return 5;
}

@end

那么我現(xiàn)在在主工程里就可以直接使用了,并且在CCYY這個(gè)類(lèi)里的更改也可以及時(shí)更新到 .a文件中。

   int five = [CCYY giveMeFive];

workspace管理多個(gè)工程

workspace可以管理多個(gè)工程,cocoapods就是一個(gè)典型的例子。
我們可以在已經(jīng)有Pods工程的工程里繼續(xù)添加工程,加入為BLEs工程,并在主工程中引用該工程的.a文件。
聽(tīng)起來(lái)好像沒(méi)什么卵用。如果你是主管,需要經(jīng)常改BLEs這個(gè)sdk里面的內(nèi)容,而這些東西又不方便其它開(kāi)發(fā)人員看到。
那么可以將BLEs這部分內(nèi)容只保存到你的本地,不上傳到git,同時(shí)又保證了sdk的更新,開(kāi)發(fā)人員的使用不受影響。
1、在主工程中右鍵添加文件,只添加BLEs的工程文件,它會(huì)自動(dòng)鏈接其他文件

添加之后是這樣

2、添加BLEs生成的.a文件
3、在主工程的Header Search Paths中添加 S(SRCROOT)/../BLEs


Header Search Paths
你的靜態(tài)庫(kù)名字如果不一樣,則需要更改BLEs
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)的區(qū)別 首先來(lái)看什么是庫(kù),庫(kù)(Library)說(shuō)白了就是一段編譯好的二進(jìn)制代碼,加上頭文件就可以供別...
    吃瓜群眾呀閱讀 12,331評(píng)論 3 42
  • 這幾天公司有一個(gè)新的需求,就是要將我們開(kāi)發(fā)的某些東西都抽取出來(lái),打個(gè)比方我們開(kāi)發(fā)了A項(xiàng)目,可以以后B項(xiàng)目要包含A項(xiàng)...
    黃魚(yú)兒啦啦啦閱讀 6,404評(píng)論 2 16
  • 僅以方便自己查閱記錄前言1.靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)有什么異同?靜態(tài)庫(kù):鏈接時(shí)完整地拷貝至可執(zhí)行文件中,被多次使用就有多份冗...
    190CM閱讀 4,521評(píng)論 0 4
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評(píng)論 19 139
  • 鼎然師開(kāi)示: 吃肉喝酒算不算殺生?算不算放縱? 鼎然答:嘴若吃肉喝酒心中必有貪念,因貪生愛(ài),愛(ài)即是酒肉,只是表現(xiàn)在...
    慈勤閱讀 405評(píng)論 0 1

友情鏈接更多精彩內(nèi)容