制作framework(在自制的framework中引入其他framework)
首先我们需要创建一个iOS的
CocoaTouch
工程,点击Next,输入我们Framework的名字即可。下方我们暂且将该Framework的名字命名为MyFramework
。如下所示:
2.设定兼容版本
创建完工程后,我们要选择Deployment Target
, 此处我们选择的是8.0。也就是说此处我们封装的SDK所支持的iOS系统版本是iOS8.0+。
3.选择“静态库”
我们创建的framework默认是动态库,所以我们要讲Mach-O Type设置为静态库“Static Library”,如下所示。
4.引入源代码并进行编译
①这里我创建的是SayHello类。
.h文件中
#import <Foundation/Foundation.h> NS_ASSUME_NONNULL_BEGIN @interface SayHello : NSObject - (void)sayHello; @end NS_ASSUME_NONNULL_END
.m文件中
#import "SayHello.h" @implementation SayHello - (void)sayHello { NSLog(@"hello world"); } @end
下方截图中是在Build Phases
下的Headers
中进行设置的。将用户可以看到的头文件房子Public
中,用户看不到的放在Project中。如下所示。
将Run更改为release模式,选择真机编译完后,在Products
下会生成相应的Framework, 然后通过Show in Finder
进行查看即可
将framework导入到新项目中,other link flags 配置-Objc即可调用
自定义Framework 报错 Could not build module
调用解决方法:找到buildSetting--Allow Non-modular Includes In Framework Modules 改为YES
将第三方.framework集成到自己的静态库里
调举个例子,将高德framework集成到自己的静态库里,打包出来
到高德官网下载定位和基础的两个framework,下图示例:
.
双击进入,找到AMapFoundationKit, 重命名为.a文件,并拖入header文件夹中.将header文件夹改名为AMapFoundation,另外一个framework同理操作
创建framework项目,将AMapFoundation文件夹拖入项目中,导入高德相关依赖库
接下来生成framework的操作和上边操作一样,编译过后生成framework.
新建项目,导入framework,修改release,ios9.0,添加高德依赖库,添加-Objc,添加定位权限,添加网络权限,调用即可.
可能会有一些头文件导入后的文件层级关系的错误, 根据自己文件所在位置酌情修改即可.
!!!!!!!!!!!如果自己framework中使用的其他framework不支持某个架构的话(arm7,arm64等)
首先cd到这个问题framework中,lipo -info frameworkName查看该framework都支持什么架构,如果确实没有报错的架构,只能是让自己的framework也不支持该架构.
到Build Setting中,Architecutres---Architecutres默认的另外添加arm64 或者arm7