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];


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章