iOS開發之通過Framework建立項目依賴


https://www.jianshu.com/p/d146db167bf3

項目開發時經常會遇到個別模塊想打包成framework的情況,傳統的打包方式太繁瑣,反復測試時很麻煩,不如一個項目管理來得方便。
這里記錄一下用一個Workspace方式管理項目依賴的方式。由於圖是兩天前截的,按圖碼字,有疏漏之處還請見諒。

1.新建Workspace:

1.1 Xcode -> File -> New -> Workspace並放到Test文件夾下

2.新建TestProject和FrameworkProject:

2.1 Xcode -> File -> New -> Project,同樣放在Test文件夾下

 
Test文件夾狀態

2.2 在Xcode中將這兩個Project添加到Workspace

 

 
Workspace狀態

3.添加Target到FrameworkProject

3.1 FrameworkProject -> Targets -> [+]

 

 
添加Target

選擇Cocoa Touch Framework

 

 
選擇最下面的Framework

命名為TestFW,先不要選Embed in App

 

 
命名為TestFW

可以看到Targets下面新增了一個Framework

 

 
Targets

4.添加Framework到TestProject

4.1 TestProject ->Targets -> General -> Embedded Binaries -> [+]

 

 
添加Binaries

可以看到剛剛生Target的Products已經列了出來,選擇TestFW.frameworkiOS

 

 
選擇framework

framework嵌入成功

 

 
嵌入的framework

可以看到在Project中也顯示出來了,不要在意紅色,因為在編譯TestProject時會先編譯它依賴的framework,這也是這種方法建立項目依賴的方便之處,不需要額外手動編譯framework。

 

 
嵌入的framework

如果看着不舒服,可以移動到項目的Frameworks文件夾(Tips:看不到Frameworks文件夾可以先隨便嵌入一個系統庫,比如UIKit.framework,然后再刪掉,就可以看到Frameworks文件夾了)。

 

 
移動好的Framework

4.2 添加測試方法

這里舉例添加方法到ViewController中,注意這是錯誤演示,下面會說明。

 

 
ViewController.h
 
ViewController.m

當然不要忘了在暴露的.h中#import "ViewController"

 

 
23.png

運行,發現報錯,提示找不到ViewController,導致無法編譯framework模塊

 

 
找不到ViewController

原來是新增的Target中不包含ViewController這個類。
解決方法:選擇ViewController.h -> TargetMembership -> 勾選TestFW

 

 
勾選TestFW

再次運行,發現helloFramework方法並沒有調用,並且控制台輸出提示ViewController這個class被兩個類文件同時生成了,一個是TestProject項目,一個是TestFW這個framework。

 

 
控制台輸出

解決方法:把兩個ViewController其中一個改下名字就可以了,這里我把framework中的ViewController改名為TestViewController(當然里面的類名也一定要改啊)。

 

 
ViewController改為TestViewController

可以看到輸出正常了。

 

 
hello
[重點] 所以說,自己生成的framework一定要一個特殊的類名前綴,否則很容易和項目中某個類沖突。

4.3 添加測試類
當然實際使用時基本不會使用默認的ViewController類,都會自己新建一個或幾個類來實現。注意新建類時一定要選擇對應的Target,否則就會出現無法編譯的問題。

 

 
選擇TestFW

自己添加類后,運行,依然報錯?找不到helloFramework方法,什么鬼?

 

 
找不到方法

解決方法:FrameworkProject -> Targets -> TestFW -> Build Phases -> Headers,將Project中新增的方法,拖到Public下。否則編譯器將新增的方法視為私有的,無法被TestFW.h引用。

 

 
移動到Public

移動后

 

 
Public

至此,就大功告成了。
當然,這種方法適用於將現有項目簡單的打包,如果想從0完全新建framework,那在新建項目時直接選擇Cocoa Touch Framework就好,這樣會少生成很多AppDelegate之類的文件。

 

 
新建framework

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM