這幾天在做個SDK遇到了很多問題,現在做完了想把製作Framework的過程分享出來(我這個SDK中也包含了其他的第三方很多Framework,所以踩了很多坑)
首先需要創建個Framework工程:
然後會有個“工程名.h”文件,有這麼一句話:
In this header, you should import all the public headers of your framework using statements like #import <PayFramework/PublicHeader.h>
所以你需要這麼引用你想暴露的頭文件:
#import <PayFramework/FWPay.h>
#import <PayFramework/FWorder.h>
#import <PayFramework/FWPayManager.h>
然後看下面的圖:
在public中的是你想暴露出去的頭文件,在project中的是你隱藏的文件,在public中的頭文件中你不能引用你未暴露的文件,若需要使用你可以在.m文件中引用.
如果你的工程中含有第三方的Framework你需要在Copy Files中添加進去。Copy Files中一般都隱藏的你可以通過點擊左上角的+添加選:New Copy Files Phases。
然後看圖:
在Destination中選擇Frameworks 然後在Name中添加第三方的Framework
有的時候你的Framework或許會需要適應低版本你可以這麼做:
在Build Settings中選擇Deployment:
然後爲了方便他人的使用你可以把系統的Framework添加到你的工程中:
最後爲了可以在真機上運行你的Framework你需要選擇:Build only Device 然後快捷鍵common + B來編譯你的工程這樣你會得到一個Framework它可以運行在armv7和arm64指令集中
然後選iPhone 4s編譯你的工程可以得到一個能夠運行在i386指令集的Frmework
然後選iPhone 6編譯你的工程可以得到一個能夠運行在x86_64指令集的Frmework
你可以同過命令:lipo -info ...路徑/PayFramework查看Framework的信息
用命令lipo -create 路徑1/PayFramework 路徑2/PayFramework -output PayFramework 合併Framework
如:
lipo -create /Users/stone/Desktop/支付打包測試/6/PayFramework.framework/PayFramework /Users/stone/Desktop/支付打包測試/Debug-iphoneos/PayFramework.framework/PayFramework -output PayFramework
當在新工程你使用自己創建的Framework時可以在General下的Embedded Binaries下添加你的動態鏈接庫:
或者你也可以將動態庫當做一個資源文件使用在Build Phases中的Copy Bundle Resources中添加你的動態庫,然後就可以用bundle的方式使用動態庫了(在此之前你獲取會需要手動將動態庫添加到自己的沙盒中),這種方式添加的動態庫要這麼使用:
NSString *documentsPath = [NSString stringWithFormat:@"%@/Documents/FWPaySdk.framework/FWPaySdk",NSHomeDirectory()];
NSError *err = nil;
NSBundle *bundle = [NSBundle bundleWithPath:documentsPath];
if ([bundle loadAndReturnError:&err]) {
NSLog(@"bundle load framework success.");
} else {
NSLog(@"bundle load framework err:%@",err);
}
Class worder = NSClassFromString(@"FWorder");
FWorder * order = (FWorder *)[[worder alloc] init];