上一節(jié)我們講了項(xiàng)目結(jié)構(gòu)優(yōu)化中的 《項(xiàng)目嵌套子工程》 ,接下來(lái)我們繼續(xù)學(xué)習(xí)項(xiàng)目結(jié)構(gòu)優(yōu)化系列之項(xiàng)目依賴子模塊工程。
創(chuàng)新互聯(lián)建站專注于晉寧企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城建設(shè)。晉寧網(wǎng)站建設(shè)公司,為晉寧等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì)網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
在開(kāi)發(fā)中,我們會(huì)遇到這樣一種情況:公司有很多app,而這些app中會(huì)用到一些公用的功能模塊,比如說(shuō)登錄。這時(shí),我們可以單獨(dú)創(chuàng)建這些子模塊然后關(guān)聯(lián)進(jìn)項(xiàng)目中。
1、創(chuàng)建workspace、項(xiàng)目工程、模塊動(dòng)態(tài)庫(kù)
我們首先創(chuàng)建workspace來(lái)進(jìn)行項(xiàng)目和模塊的管理。命名為Projects。
接著我們分別創(chuàng)建兩個(gè)項(xiàng)目工程,學(xué)生端和教師端。命名為StudentProject和TeacherProject。
然后創(chuàng)建這兩個(gè)項(xiàng)目工程都需要用到的子功能模塊——登錄模塊動(dòng)態(tài)庫(kù)。命名為L(zhǎng)oginLib。
項(xiàng)目工程和動(dòng)態(tài)庫(kù)的建立都需要關(guān)聯(lián)進(jìn)Projects里面。如下圖所示:
當(dāng)加載動(dòng)態(tài)庫(kù)中的xib文件的時(shí)候,需要在init方法中生命xib文件所在的bundle,否則會(huì)找不到。
圖片等資源文件同理:
3、動(dòng)態(tài)庫(kù)的相關(guān)設(shè)置
TARGETS -Build Settings - Build Active Architchture Only 設(shè)置為No
TARGETS-Build Settings-Other Linker Flags,添加 -ObjC
TARGETS-Build Settings-Enable Bitcode 設(shè)置為No
Edit scheme-Run-Build Configuration設(shè)置為Release
完成?。?!
參考文章:
iOS使用Workspace來(lái)管理多項(xiàng)目
Xcode中的 workspace, project, target, scheme
workspace是Xcode的一種文件,用來(lái)管理工程和里面的文件,一個(gè)workspace可以包含若干個(gè)工程,甚至可以添加任何你想添加的文件。workspace提供了工程和工程里面的target之間隱式和顯式依賴
關(guān)系,用來(lái)管理和組織工程里面的所有文件。
1、用來(lái)管理同一個(gè)項(xiàng)目中的不同模塊
可以把在項(xiàng)目中把一些工具類或模塊等放在另一個(gè) 動(dòng)態(tài)庫(kù)工程 中,然后在主工程中來(lái)使用里面的類和方法。
其中一個(gè)重要的步驟就是在主項(xiàng)目的Build Settings 里找到Header Search Paths,添加一項(xiàng)$(SRCROOT)/../BookObtain,并且設(shè)置為recursive。$(SRCROOT)是當(dāng)前的工程路徑,..是返回上一層,然后到BookObtain文件夾。使用了相對(duì)路徑,為了是項(xiàng)目移動(dòng)不會(huì)影響這個(gè)配置,只要主工程和其他工程的相對(duì)位置不變,這里的相對(duì)位置是固定在同一個(gè)文件夾
recursive的意思是預(yù)先的意思,即這個(gè)動(dòng)態(tài)庫(kù)項(xiàng)目要先編譯,然后再編譯主項(xiàng)目。
使用方法可以參照:
iOS使用Workspace來(lái)管理多項(xiàng)目
相信各位讀了之前的兩篇文章,對(duì)pods的使用已經(jīng)相當(dāng)熟練了。不過(guò)在紛繁復(fù)雜的實(shí)際使用場(chǎng)景下,可能還是會(huì)遇到一些問(wèn)題。本文就結(jié)合自己的實(shí)踐經(jīng)驗(yàn),做一些快問(wèn)快答,希望大家能多多補(bǔ)充交流。話不多說(shuō),那我們就即刻開(kāi)始吧!
pod系列文章
Cocoapods,讓iOS開(kāi)發(fā)更簡(jiǎn)單(一):走近Cocoapods
Cocoapods,讓iOS開(kāi)發(fā)更簡(jiǎn)單(二):創(chuàng)建私有庫(kù)
Cocoapods,讓iOS開(kāi)發(fā)更簡(jiǎn)單(三):實(shí)踐經(jīng)驗(yàn)匯總
一文帶你快速分清靜態(tài)庫(kù)-動(dòng)態(tài)庫(kù)-Framework
一般推薦使用指定版本或范圍版本號(hào),以確保依賴的穩(wěn)定性。
總結(jié) :能用pod install解決問(wèn)題的,就不要用pod update。因?yàn)閜od update會(huì)把依賴庫(kù)全部檢查一遍,不僅慢有時(shí)候還會(huì)出現(xiàn)坑。
忽略Pods警告,有些第三方Pod集成進(jìn)來(lái)會(huì)有一大堆警告信息,在Podfile中對(duì)應(yīng)的target或分組下加上關(guān)鍵字inhibit_all_warnings!就可以把警告忽略。
作用:
在pods中用frameworks替代.a靜態(tài)庫(kù)。
場(chǎng)景:
swift項(xiàng)目pods默認(rèn)開(kāi)啟(use_frameworks!),OC項(xiàng)目pods默認(rèn)關(guān)閉(#use_frameworks!),同時(shí)需滿足以下兩點(diǎn),
解析:
swift工程依賴了OC工程的話,需要use_modular_headers!
示例:
為某個(gè) Pods 使用模塊化標(biāo)頭,可以使用以下語(yǔ)法:
pod 'TestPodLib', :modular_headers = true
另外,當(dāng)全局使用 use_modular_headers! 屬性時(shí),同時(shí)還可以使用以下方法從模塊化標(biāo)頭中排除特定的Pod:
pod 'TestPodLib', :modular_headers = false
版本格式:主版本號(hào).次版本號(hào).修訂號(hào),版本號(hào)遞增規(guī)則如下:
常用的方式調(diào)用pod中的素材是不生效的,因?yàn)槟J(rèn)是從mainBundle中讀取的,如
打在pod中的素材已經(jīng)不在mainBundle中而在對(duì)應(yīng)組件下的bundle 里面,所以應(yīng)該這么調(diào)用:
在用CocoaPods集成第三方庫(kù)之后,默認(rèn)情況下,使用類似#import XXX/YYY.h的方式引入第三方庫(kù)的頭文件。
pod search只會(huì)搜索本地緩存的庫(kù),如果想搜索到最新的第三方框架或者某個(gè)框架的最新版本,必須先使用pod repo update。