IOS用使用workspace管理工程

以下的方式二,簡書上有詳細圖文的操作過程,但是最后一步封裝靜態庫圖片資源的環境配置,我沒有成功,下面這個腳本配置比較好用:

 cp -R ${BUILT_PRODUCTS_DIR}/MyLibBundle.bundle ${BUILT_PRODUCTS_DIR}/${TARGET_NAME}.app

方式一:使用2個Project

example :
工作區 :Text.workspace
主工程 : Text1.xcodeproj
依賴庫工程 :Text2.xcodeproj

過程:
  1. 新建workspace文件 將其保存在一個文件夾中 比如Text文件夾中Text.workspace文件。

  2. 打開Text.workspace文件,將兩個有關聯的工程拷貝到Text文件夾文件夾中。如:Text1工程和Text2工程

  3. 將Text1.xcodeproj和Text2.xcodeproj文件分別加入該工作區間,此時兩個項目都可以分別運行。如果現在想在Text1中調用Text2的一個自定義類,就必須執行如下操作。

  4. 方法一》在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文件

  1. 在Text1工程中可以直接引用Text2工程中的頭文件。

方式二:使用1個Project和1個靜態庫Project

example:
工作區 :Text.workspace
主工程 : Text1.xcodeproj
依賴庫工程 :MyLib

過程:
  1. 新建workspace文件 將其保存在一個文件夾中 比如Text文件夾中Text.workspace文件

  2. 打開該文件,在里面新建一個應用程序工程Text1,新建一個Static Lib工程MyLib
    新建MyLib過程:Xcode New->Project->IOS:Framework&Library,

  3. 設置編譯環境:
    1).進入主工程的"Text1"target的“Build Phase”設置項頁面,展開“Link Binnary With Libraries”選項卡,點擊“+”,選擇“Workspace”中的“libMyLib.a”

2).在主工程的Build Settings 里找到Header Search Paths,添加一項$(SRCROOT)/../MyLib,并且設置為recursive。$(SRCROOT)是當前的工程路徑,..是返回上一層,然后到MyLib文件夾。使用了相對路徑,為了是項目移動不會影響這個配置,只要主工程和其他工程的相對位置不變,這里的相對位置是固定在同一個文件夾。

  1. 使用靜態庫里的資源
    如何在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]];
    }

Demo下載地址:https://github.com/Am0103/WorkSpaceTest.git

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容