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


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