iOS使用Workspace來(lái)管理多項(xiàng)目

參考:iOS使用Workspace來(lái)管理多項(xiàng)目歇万,個(gè)人覺(jué)得這篇文章講解的不錯(cuò)嘲更。

前言

Workspace凝颇,工作空間潘拱,可以用來(lái)管理多個(gè)Xcode Project,像Cocoapods一樣拧略,它的常見(jiàn)用法是編譯靜態(tài)庫(kù)芦岂,然后給主工程使用,但跟普通的制作.a.framework不同的是辑鲤,它不需要先打開(kāi)靜態(tài)庫(kù)工程編譯盔腔,然后將生成的.a.framework拷貝到主工程,最后再編譯主工程月褥,這樣會(huì)造成很強(qiáng)的割裂感弛随。Workspace只需要編譯主工程,即可將依賴的工程一同編譯宁赤,體驗(yàn)會(huì)更好一些舀透。

制作Workspace

1.新建一個(gè)Workspace項(xiàng)目

菜單File -> New -> Workspace,新建一個(gè)Workspace項(xiàng)目决左,如下圖所示愕够,之后會(huì)生成一個(gè).xcworkspace文件走贪,雙擊打開(kāi)該文件,會(huì)發(fā)現(xiàn)什么都沒(méi)有惑芭,其實(shí)Workspace就類(lèi)似一個(gè)文件夾坠狡,將不同的Project放在一起編譯。

新建Workspace項(xiàng)目
2.向Workspace添加Project

本Demo包含2個(gè)Project遂跟,一個(gè)靜態(tài)庫(kù)項(xiàng)目BookObtain逃沿,另一個(gè)是主工程BookManager,如圖幻锁,BookObtain用來(lái)模擬從網(wǎng)絡(luò)下載書(shū)籍信息凯亮,BookManager用來(lái)展示下載的書(shū)籍信息。

Demo工程目錄

BookObtain核心代碼如下:


// BookObtain.h
#import <Foundation/Foundation.h>
#import "Book.h"

@interface BookObtain : NSObject

+ (Book *)obtainBookWithURL:(NSString *)urlString;

@end

// BookObtain.m
@implementation BookObtain

+ (Book *)obtainBookWithURL:(NSString *)urlString {
    NSDictionary *info = @{
        @"name": @"算法導(dǎo)論",
        @"price": @(125.0),
        @"content": @"內(nèi)容太長(zhǎng)哄尔,xxx意思一下..."
    };
    Book *book = [Book bookWithInfo:info];
    return book;
}

@end
// Book.h
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface Book : NSObject

@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) CGFloat price;
@property (nonatomic, copy) NSString *content;

+ (instancetype)bookWithInfo:(NSDictionary *)info;

@end

NS_ASSUME_NONNULL_END

// Book.m
#import "Book.h"

@implementation Book

- (instancetype)initWithInfo:(NSDictionary *)info {
    if (self = [super init]) {
        self.name = info[@"name"];
        self.price = [info[@"price"] floatValue];
        self.content = info[@"content"];
    }
    return self;
}

+ (instancetype)bookWithInfo:(NSDictionary *)info {
    return [[self alloc] initWithInfo:info];
}

@end

完成BookObtain代碼編寫(xiě)假消,需要在主工程引用,這時(shí)候你會(huì)發(fā)現(xiàn)#import "BookObtain.h"報(bào)錯(cuò)岭接,找不到頭文件富拗。這就是靜態(tài)庫(kù)引用需要做的第一件事:指定頭文件路徑

在主工程的 Build Settings -> Header Search Paths 添加一項(xiàng) $(SRCROOT)/../BookObtain亿傅,并且設(shè)置為recursive媒峡。

指定靜態(tài)庫(kù)頭文件

現(xiàn)在引入頭文件不報(bào)錯(cuò)了,在主工程的ViewController.m中添加如下代碼:

// 點(diǎn)擊按鈕回去書(shū)籍信息
- (IBAction)obtainBookInfo:(UIButton *)sender {
    Book *book = [BookObtain obtainBookWithURL:@"xxx"];
    self.bookLbl.text = [NSString stringWithFormat:@"name:%@\nprice:%.2lf\ncontent:%@", book.name, book.price, book.content];
}

編譯葵擎,發(fā)現(xiàn)報(bào)錯(cuò):

Undefined symbols for architecture arm64:

"_OBJC_CLASS_$_BookObtain", referenced from:

objc-class-ref in ViewController.o

這涉及到引用靜態(tài)庫(kù)的第二個(gè)問(wèn)題:添加.a文件

在主工程的 Build Phases -> Link Binary With Libraries 添加 libBookObtain.a 文件谅阿,如下圖:

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

至此,Workspace管理2個(gè)Project基本就完成了酬滤。

3.bundle攜帶資源文件

眾所周知签餐,.a文件是不能攜帶資源文件的,那如果靜態(tài)庫(kù)有資源文件怎么辦呢盯串?使用bundle氯檐。

BookObtain工程的TARGETS下添加一個(gè)新的target,類(lèi)型是macOS下的Bundle体捏,操作如下圖:

添加bundle

注意:因?yàn)锽undle只在macOS下才有冠摄,所以創(chuàng)建完成之后,需要將該target的Base SDKmacOS改為iOS几缭。

然后將需要添加的資源文件拖到Bundle中即可河泳。

添加資源文件到bundle

因?yàn)橹鞴こ绦枰褂迷揃undle中的資源文件,所以需要保證該Bundle的target優(yōu)先編譯年栓,修改主工程的Build選項(xiàng)拆挥,讓該Bundle的target在主工程target之前進(jìn)行編譯。

bundle優(yōu)先編譯

最后某抓,需要將該bundle編譯的產(chǎn)物拷貝到主工程的main bundle下纸兔。

主工程的 Build Phases 左上角點(diǎn)擊 + 號(hào)惰瓜,添加一個(gè)New Run Script Phase,在里面添加拷貝bundle的腳本命令汉矿,如下:

#!/bin/sh
cp -R ${BUILT_PRODUCTS_DIR}/BookObtainBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app

然后就可以在主工程使用該bundle中的資源文件了崎坊。

NSString *bundlePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"BookObtainBundle.bundle"];
NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];
NSString *imgPath = [[bundle resourcePath] stringByAppendingPathComponent:@"1.jpeg"];
self.imgView.image = [UIImage imageWithContentsOfFile:imgPath];

總結(jié)

上面的Demo講解了Workspace的用法,主要就是用來(lái)管理多個(gè)Project负甸,這種方式可以消除普通靜態(tài)庫(kù)制作的割裂感流强,但是它也有弊端,就是代碼是暴露出來(lái)的呻待,比較適用于企業(yè)內(nèi)部不同項(xiàng)目間共享代碼。如果你不想讓別人看到你的代碼队腐,那你只能用傳統(tǒng)的制作靜態(tài)庫(kù)的方式了蚕捉。

Demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柴淘,隨后出現(xiàn)的幾起案子迫淹,更是在濱河造成了極大的恐慌,老刑警劉巖为严,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件敛熬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡第股,警方通過(guò)查閱死者的電腦和手機(jī)应民,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)夕吻,“玉大人诲锹,你說(shuō)我怎么就攤上這事∩嫦冢” “怎么了归园?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)稚矿。 經(jīng)常有香客問(wèn)我庸诱,道長(zhǎng),這世上最難降的妖魔是什么晤揣? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任桥爽,我火速辦了婚禮,結(jié)果婚禮上碉渡,老公的妹妹穿的比我還像新娘聚谁。我一直安慰自己,他們只是感情好滞诺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布形导。 她就那樣靜靜地躺著环疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朵耕。 梳的紋絲不亂的頭發(fā)上炫隶,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音阎曹,去河邊找鬼伪阶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛处嫌,可吹牛的內(nèi)容都是我干的栅贴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熏迹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼檐薯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起注暗,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坛缕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后捆昏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體赚楚,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年骗卜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宠页。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡膨俐,死狀恐怖勇皇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情焚刺,我是刑警寧澤敛摘,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站乳愉,受9級(jí)特大地震影響兄淫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔓姚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一捕虽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坡脐,春花似錦泄私、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捅暴。三九已至,卻和暖如春咧纠,著一層夾襖步出監(jiān)牢的瞬間蓬痒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工漆羔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梧奢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓演痒,卻偏偏與公主長(zhǎng)得像亲轨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸟顺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

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