制作framework(在自制的framework中引入其他framework)

 
1.创建iOS 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

原文地址:https://www.cnblogs.com/baxiu/p/13666194.html