在開發中我們常常會用到一些第三方 SDK 庫,使用時只需將 framework 文件添加到項目中即可,十分方便。同樣地,我們也可以創建自己的 framework 框架,用來封裝一些常用的工具方法、框架類等。一來不會使源代碼完全暴露在外,二來也便于代碼復用。
下面演示一個最基礎framework的開發及使用
一、framework的制作
-
新建一個工程,創建時選擇
iOS->Framework & Library
,如下圖所示
1 -
在“General”->“Deployment Info”里設置個較低的發布版本,設置好之后的文件目錄如下圖所示:
2 之后我們在工程中創建一個測試類及一個測試方法,如下:
import UIKit
class MyTest: NSObject
{
class func sayHello()
{
print("Hello World")
}
}
但是需要注意的是:對于那些需要暴露出來,即在框架外部也能訪問使用的類、方便、變量前面需要加上關鍵字 Public。如果還允許 override 和繼承的話,可以使用 open 關鍵字。所以修改后的代碼如下:
import UIKit
public class MyTest: NSObject
{
public class func sayHello()
{
print("Hello World")
}
}
- 生成framework庫文件
- 發布編譯目標選擇“Generic iOS Device”后,使用快捷鍵 command+B 或者點擊菜單 Product > Build 進行編譯。這時生成的是真機調試使用的 framework。
- 如果發布編譯目標選擇的是模擬器,那么編譯出來的模擬器使用的 framework。
- 分別編譯后我們可以選擇 項目中的
Products
->SDKDemoOne.framework
然后右鍵選擇Show in Finder
即可進入所在文件夾,這是我們可以看到分別對應于 真機 和 模擬器的連個文件夾,里面各有一個.framework
文件。如下圖所示:
3
二、framework的使用
-
引入framework
- 將生成的
SDKDemoOne.framework
添加到項目中來。(注意:要根據你是使用真機調試還是模擬器調試選擇對應的 framework) - 接著在“General”->“Embedded Binaries”中把
SDKDemoOne.framework
添加進來。這兩步完成之后的工程文件目錄如下:
4
- 將生成的
使用
由于之前定義的是一個類方法,所以我們在需要使用的地方直接調用該方法即可,如下所示
import UIKit
import SDKDemoOne
class ViewController: UIViewController
{
override func viewDidLoad()
{
super.viewDidLoad()
SDKTest.sayHello()
}
}
如此,即完成了這個framework的調用
三、常見問題
- 制作的Framework是動態庫、還是靜態庫?
- framework 文件可以是動態庫,也可以是靜態庫。創建 framework 的時候默認是 Dynamic Library(即動態庫),像本文樣例就是動態庫。
- 如果要制作靜態庫,只需要編譯 framework 時指定Build Settings-< Mach-O Type 為 Static Library
- 開發的sdk怎么同時支持模擬器和真機
- 首先我們先進入到真機和模擬器對應的靜態庫文件路徑
- 打開終端:使用如下命令:
lipo -create 模擬器文件路徑/SDKDemoOne.framework/SDKDemoOne 真機文件路徑/SDKDemoOne.framework/SDKDemoOne -output 輸出路徑/SDKDemoOne.framework
即可得到在真機和模擬器下均可使用的靜態庫文件。