iOS中製作動態連結庫Framework
這幾天在做個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];