以下的方式二,簡書上有詳細圖文的操作過程,但是最后一步封裝靜態庫圖片資源的環境配置,我沒有成功,下面這個腳本配置比較好用:
cp -R ${BUILT_PRODUCTS_DIR}/MyLibBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app
方式一:使用2個Project
example :
工作區 :Text.workspace
主工程 : Text1.xcodeproj
依賴庫工程 :Text2.xcodeproj
過程:
新建workspace文件 將其保存在一個文件夾中 比如Text文件夾中Text.workspace文件。
打開Text.workspace文件,將兩個有關聯的工程拷貝到Text文件夾文件夾中。如:Text1工程和Text2工程
將Text1.xcodeproj和Text2.xcodeproj文件分別加入該工作區間,此時兩個項目都可以分別運行。如果現在想在Text1中調用Text2的一個自定義類,就必須執行如下操作。
方法一》在Text1.xcodeproj的Build Setting下的 Search Paths 里 Header Search Paths項 和User Header Search Paths加入$(SRCROOT)/../Text2 (筆注:Text2是Text文件夾中Text2項目的文件夾) always Header Search Paths項為YES 。Linking中的Other Linker Flags設置為-ObjC
方法一》或者直接在Text1.xcodeproj的Copy Bundle Resources里加入Text中的 .m文件
- 在Text1工程中可以直接引用Text2工程中的頭文件。
方式二:使用1個Project和1個靜態庫Project
example:
工作區 :Text.workspace
主工程 : Text1.xcodeproj
依賴庫工程 :MyLib
過程:
新建workspace文件 將其保存在一個文件夾中 比如Text文件夾中Text.workspace文件
打開該文件,在里面新建一個應用程序工程Text1,新建一個Static Lib工程MyLib
新建MyLib過程:Xcode New->Project->IOS:Framework&Library,設置編譯環境:
1).進入主工程的"Text1"target的“Build Phase”設置項頁面,展開“Link Binnary With Libraries”選項卡,點擊“+”,選擇“Workspace”中的“libMyLib.a”
2).在主工程的Build Settings 里找到Header Search Paths,添加一項$(SRCROOT)/../MyLib,并且設置為recursive。$(SRCROOT)是當前的工程路徑,..是返回上一層,然后到MyLib文件夾。使用了相對路徑,為了是項目移動不會影響這個配置,只要主工程和其他工程的相對位置不變,這里的相對位置是固定在同一個文件夾。
- 使用靜態庫里的資源
如何在static lib中加入資源。通常,在我們的靜態庫工程中,會包含有資源文件,比如images, xib, plist等等,但這些資源文件在編譯過程中是不會加入到.a中的,所以我們需要通過其他的途徑把資源提供給使用者。個人推薦使用bundle,一來bundle會被編譯,xib文件會成為二進制文件,這樣外界就無法查看xib的內容,其次也是一個很好的封裝,很方的插入或刪除資源,這也是目前大多數SDK提供商采用的普通方式。
方法:在MyLib中添加一個Target,選擇“OS X”下的“Framework & Library”,選擇“Bundle”,創建MyLibBundle.bundle。進入MyLibBundle的“Build Setting”設置頁面,修改“Base SDK”為 “Latest iOS(iOS latestversion)”。然后就可以往MyLibBundle里面加入你想要的資源了。
1). 環境配置:
a).進入MyApp的“Build Phases”,添加選項“Run Scrip”,添加下述腳本:
cp -R ${BUILT_PRODUCTS_DIR}/MyLibBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app
MyLibBundle.bundle就是你在MyLib中新建的bundle的target名字。該腳本作用就是把生成的.bundle拷貝到最終生成的.app中,這樣.app中就包含了我們MyLib要用到的資源。
b).圖片放在MyLibBundle文件夾里(新建MyLibBundle.bundle時在MyLib工程下默認生成MyLibBundle文件夾,里面的產生的一些文件可刪除)
2). 使用:
注釋:要在模擬器和真機跑一下MyLib.Project和MyLibBundle.bundle
#define MyLibBUNDLE_NAME @ "MyLibBundle.bundle"
#define MyLibBUNDLE_PATH [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:MyLibBUNDLE_NAME]
#define MyLibBUNDLE [NSBundle bundleWithPath: MyLibBUNDLE_PATH]
xib :
self = [super initWithNibName:@"MyLibViewController" bundle:MyLibBUNDLE];
image :
+ (UIImage *)getImageWithName:(NSString *)pImageName {
return [UIImage imageWithContentsOfFile:[[MyLibBUNDLE resourcePath] stringByAppendingPathComponent:pImageName]];
}