一、動態庫創建
- 打開Xcode,選擇菜單欄中的Window,然后選擇Welcome to Xcode,如圖:
Snip20170516_157.png
- 進入歡迎界面,選擇第二個,create a new Xcode project:
Snip20170516_158.png
- 選擇Framework & Binaries中的第一個,cocoa touch framework:
Snip20170516_159.png
- 然后填寫好庫名和相關設置,如下圖:
Snip20170516_160.png
- 我此處創建了一個KODFrameworkDemo,然后創建動態庫之后會默認有以下東西:
Snip20170516_161.png
- 公開頭文件的內容如下,以下的內容沒什么用,一般做導入頭文件和存放宏定義或者全局常亮用:
KODFrameworkDemo.h
#import <UIKit/UIKit.h>
//! Project version number for KODFrameworkDemo.
FOUNDATION_EXPORT double KODFrameworkDemoVersionNumber;
//! Project version string for KODFrameworkDemo.
FOUNDATION_EXPORT const unsigned char KODFrameworkDemoVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <KODFrameworkDemo/PublicHeader.h>
我將其刪除,只留以下:
KODFrameworkDemo.h
#import <UIKit/UIKit.h>
- 在動態庫中新建Student類,其中有兩個接口一個是eat,另一個是run,代碼如下:
Student.h
#import <Foundation/Foundation.h>
@interface Student : NSObject
- (void)eat;
- (void)run;
@end
Student.m
#import "Student.h"
@implementation Student
- (void)eat{
NSLog(@"我在吃飯呢!");
}
- (void)run{
NSLog(@"我在跑步呢!");
}
@end
- 將Student類的頭文件添加到公開的頭文件KODFrameworkDemo.h中:
Snip20170516_162.png
- 然后Command+B編譯一下,如果編譯之后沒問題就右鍵打開以下文件的路徑:
Snip20170516_163.png
- 注意,這里是通過模擬器創建的庫,只能模擬器用,如果是真機還得通過真機編譯一次,那么那個真機的庫才能給真機使用,其中模擬器庫是放在Debug-iPhonesimulator路徑下的:
Snip20170516_164.png
-
真機庫是放在Debug-iphoneos下的,當然這是調試下的,如果是發布的就是Release了:
Snip20170516_165.png - 那這里大家肯定有疑問,怎么調節Release呢?以下插一段release的設置:
Snip20170516_166.png
Snip20170516_167.png
那如果要合并的話,請看Framework和.a文件合并
二、動態庫調試
- 將庫導入到測試工程中,選擇124,編譯后發現報錯:
Snip20170516_170.png
Snip20170516_171.png
具體報錯:
1>~/Desktop/KODTestDemo/KODTestDemo/KODFrameworkDemo.framework/Headers/KODFrameworkDemo.h:19:9: 'Student.h' file not found
2>~/Desktop/KODTestDemo/KODTestDemo/ViewController.m:10:9: Could not build module 'KODFrameworkDemo'
- 說明Framework的公開文件中有導入這個Student.h但是并沒有公開這個Student文件導致工程編譯的時候報錯,解決如下:
Snip20170516_172.png
Snip20170516_174.png
- 再編譯一次,然后再將生成的framework替換掉工程中已經導入的framework,再次編譯一次發現報如下錯(這里大家可能會說這樣調試的時候老是庫編譯一次再替換一次,不能做聯調,對SDK工作者是極大的不友好,所以請看iOS開發庫之(四):工程和庫聯調):
Snip20170516_177.png
- 報錯指的是"Reason:image not found",其中image表示的是二進制文件(可執行文件或者動態鏈接庫)編譯后的符號或者代碼等,這里指的就是這個動態庫的二進制文件沒有找到。那么出現這個問題的原因就是因為我們剛導入動態庫后缺少如下步驟,所以導入的時候需要再按照以下步驟配一次即可,這樣就不會有問題了:
Snip20170516_178.png
Snip20170516_179.png
Snip20170516_180.png
(這里發現添加完成之后下面的Linked Frameworks and Libraries上有兩個庫,刪掉一個就好了)
然后再次編譯一下,問題得到解決。