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文件夾下

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

3.添加Target到FrameworkProject
3.1 FrameworkProject -> Targets -> [+]

選擇Cocoa Touch Framework

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

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

4.添加Framework到TestProject
4.1 TestProject ->Targets -> General -> Embedded Binaries -> [+]

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

framework嵌入成功

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

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

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


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

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

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

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

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

可以看到輸出正常了。

[重點] 所以說,自己生成的framework一定要一個特殊的類名前綴,否則很容易和項目中某個類沖突。
4.3 添加測試類
當然實際使用時基本不會使用默認的ViewController類,都會自己新建一個或幾個類來實現。注意新建類時一定要選擇對應的Target,否則就會出現無法編譯的問題。

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

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

移動后

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