1. 程式人生 > >iOS中製作動態連結庫Framework

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