一檐涝、動(dòng)態(tài)庫創(chuàng)建
- 打開Xcode架馋,選擇菜單欄中的Window窟她,然后選擇Welcome to Xcode,如圖:
Snip20170516_157.png
- 進(jìn)入歡迎界面,選擇第二個(gè)漂问,create a new Xcode project:
Snip20170516_158.png
- 選擇Framework & Binaries中的第一個(gè)赖瞒,cocoa touch framework:
Snip20170516_159.png
- 然后填寫好庫名和相關(guān)設(shè)置,如下圖:
Snip20170516_160.png
- 我此處創(chuàng)建了一個(gè)KODFrameworkDemo蚤假,然后創(chuàng)建動(dòng)態(tài)庫之后會(huì)默認(rèn)有以下東西:
Snip20170516_161.png
- 公開頭文件的內(nèi)容如下,以下的內(nèi)容沒什么用栏饮,一般做導(dǎo)入頭文件和存放宏定義或者全局常亮用:
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>
- 在動(dòng)態(tài)庫中新建Student類磷仰,其中有兩個(gè)接口一個(gè)是eat,另一個(gè)是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
- 注意伺通,這里是通過模擬器創(chuàng)建的庫,只能模擬器用逢享,如果是真機(jī)還得通過真機(jī)編譯一次罐监,那么那個(gè)真機(jī)的庫才能給真機(jī)使用,其中模擬器庫是放在Debug-iPhonesimulator路徑下的:
Snip20170516_164.png
-
真機(jī)庫是放在Debug-iphoneos下的,當(dāng)然這是調(diào)試下的瞒爬,如果是發(fā)布的就是Release了:
Snip20170516_165.png - 那這里大家肯定有疑問弓柱,怎么調(diào)節(jié)Release呢?以下插一段release的設(shè)置:
Snip20170516_166.png
Snip20170516_167.png
那如果要合并的話侧但,請(qǐng)看Framework和.a文件合并
二矢空、動(dòng)態(tài)庫調(diào)試
- 將庫導(dǎo)入到測試工程中,選擇124禀横,編譯后發(fā)現(xiàn)報(bào)錯(cuò):
Snip20170516_170.png
Snip20170516_171.png
具體報(bào)錯(cuò):
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的公開文件中有導(dǎo)入這個(gè)Student.h但是并沒有公開這個(gè)Student文件導(dǎo)致工程編譯的時(shí)候報(bào)錯(cuò)屁药,解決如下:
Snip20170516_172.png
Snip20170516_174.png
- 再編譯一次,然后再將生成的framework替換掉工程中已經(jīng)導(dǎo)入的framework燕侠,再次編譯一次發(fā)現(xiàn)報(bào)如下錯(cuò)(這里大家可能會(huì)說這樣調(diào)試的時(shí)候老是庫編譯一次再替換一次者祖,不能做聯(lián)調(diào),對(duì)SDK工作者是極大的不友好绢彤,所以請(qǐng)看iOS開發(fā)庫之(四):工程和庫聯(lián)調(diào)):
Snip20170516_177.png
- 報(bào)錯(cuò)指的是"Reason:image not found",其中image表示的是二進(jìn)制文件(可執(zhí)行文件或者動(dòng)態(tài)鏈接庫)編譯后的符號(hào)或者代碼等七问,這里指的就是這個(gè)動(dòng)態(tài)庫的二進(jìn)制文件沒有找到。那么出現(xiàn)這個(gè)問題的原因就是因?yàn)槲覀儎倢?dǎo)入動(dòng)態(tài)庫后缺少如下步驟茫舶,所以導(dǎo)入的時(shí)候需要再按照以下步驟配一次即可械巡,這樣就不會(huì)有問題了:
Snip20170516_178.png
Snip20170516_179.png
Snip20170516_180.png
(這里發(fā)現(xiàn)添加完成之后下面的Linked Frameworks and Libraries上有兩個(gè)庫,刪掉一個(gè)就好了)
然后再次編譯一下,問題得到解決讥耗。
三有勾、擴(kuò)展
iOS開發(fā)庫之(二):靜態(tài)庫Framework的創(chuàng)建
iOS開發(fā)庫之(四):工程和庫聯(lián)調(diào)
以上!