手動建立WorkSpace方式的iOS多工程聯合編譯包含Static Library
1、建立一個空的App Project
啟動Xcode
點選 File
-> New
-> Project
選擇 Single
View Application
取名為TestMainApp
建立成功後關閉專案留待下一步使用
2、建立一個Static Project
啟動Xcode
點選 File
-> New
-> Project
選擇 Cocoa
Touch Static Library
取名為TestStaticLibrary
,放在跟剛才的TestMainApp
專案同一級目錄下
3、建立一個WorkSpace關聯剛才的兩個專案
啟動Xcode
點選 File
New
-> WorkSpace
取名為 TestWorkSpace
建立成功開啟後在左側空空的導航欄中點選右鍵選擇 Add
Files to "TestWorkSpace"
選項在開啟的目錄中選擇剛剛建立的Project
檔案新增到WorkSpace
,如圖所示:同理新增Static
Library
專案到WorkSpace
, 完成以後是這個樣子的:
4、開始配置專案依賴關係
在TestStaticLibrary
專案的TestStaticLibrary.h
中新增一個方法
#import <Foundation/Foundation.h>
@interface TestStaticLibrary : NSObject
- (void)sayHello;
@end
對應的TestStaticLibrary.m
中實現方法體
#import "TestStaticLibrary.h"
@implementation TestStaticLibrary
- (void)sayHello
{
NSLog(@"Hello! form Static Library Project");
}
@end
下面開始生成靜態庫檔案,選擇要暴露給外部的標頭檔案,選中TestStaticLibrary
專案的 Targets
TestStaticLibrary
在右側的視窗中選擇 Build
Phases
New Headers Phase
,如圖:新增成功以後,展開Headers
有三個子分組Public
、Private
和 Project
,直接把 TestStaticLibrary.h
拖到 Public
分類下,如圖
:再來新增TestMainApp
專案對TestStaticLibrary
的依賴,選中TestMainApp
專案,Target
選擇TestMainApp
,右側Build
Settings
分類下,搜尋 User Header Search Paths
,新增$(BUILT_PRODUCTS_DIR),
勾選遞迴搜尋選項recursive
,如下圖然後,按Command
+ B
鍵編譯工程,看到下面紅色的libTestStaticLibrary.a
檔案變為黑色。
接著在選擇Build Phases
分來,展開Link
Binary With Libraries
,點選下面的加號,新增停開庫檔案引用,如圖:點選Add
按鈕新增。
最後可以在ViewController.m
檔案中,引入靜態庫暴露出來的標頭檔案,TestStaticLibrary.h
,然後在viewDidLoad
方法中新增如下程式碼進行測試。
- (void)viewDidLoad {
[super viewDidLoad];
TestStaticLibrary *test = [[TestStaticLibrary alloc] init];
[test sayHello];
}
編譯執行專案,可以看到控制檯列印的資訊,證明成功了。
補充資訊
Bundle打包和引用
WorkSpace
中的Bundle
型別target
不能自動引用,需要手動加入子專案中的目標Bundle
(注意為WorkSpace
相對路徑)
另外一種辦法是使用指令碼拷貝到指定目錄,未使用,不做詳述。
標頭檔案的引用問題
子專案的.a檔案
預設放在$(BUILT_PRODUCTS_DIR)
下(Debug-iphoneos,Relese-iphoneos)
,
標頭檔案預設放在$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_NAME)
目錄下,
這樣標頭檔案就有兩份,在不同的目錄下,都是在*-iphoneos
目錄下,而User
Head Search Path
設定為$(BUILT_PRODUCTS_DIR)
,在切換iphonesimulater
編譯時,就無法搜尋到標頭檔案。
(.a檔案
的引用由Workspace
自動管理的,沒有這問題)
解決辦法:
-
首先修改標頭檔案copy路徑,原為:
/include/$(PRODUCT_NAME)
,修改為:../include/$(PRODUCT_NAME)
-
User Head Search Path
設定為$(BUILD_DIR)/include
,勾選recursive
迴圈搜尋,Always Search User Path
設定為YES
。
OK,這樣就可以隨心所欲的選擇iphoneos
和iphonesimulater
進行構建。
轉自:http://www.softdevblog.com/2016/03/29/iosduo-gong-cheng-lian-he-bian-yi-bao-han-staticlibrary/