您的位置:首页 > 移动开发 > IOS开发

iOS中制作动态链接库Framework

2016-03-14 17:46 543 查看
这几天在做个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];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: