iOS 制作私有库framework + 图片资源的使用

1. 库的分类

  1. 开源库:公开源代码,能看到具体实现
  2. ** 闭源库**:不公开源代码,是经过编译后的二进制文件,看不到具体实现;其中包括:静态库和动态库

2. 开源库的制作

我了解的开源库的制作,就是将代码上传到cocopods上,提供其他人下载使用。
优点:制作简单
缺点:暴露源码
cocopods上传的步骤:
将代码上传到cocopods

3. 静态私有库framework的制作

3.1 用xcode创建一个framework工程:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
创建后的工程如下:
在这里插入图片描述

3.2 添加代码

将准备好的代码添加到工程里
在这里插入图片描述
添加对应的代码文件目录如下:
在这里插入图片描述
在这里插入图片描述

3.3 配置工程文件

设置兼容最低的iOS系统
在这里插入图片描述

设置Build Active Architecture Only 值 为NO。如下图(适配所有版本的模拟器和真机)
在这里插入图片描述

设置Mach-O Type值为Static Library(静态库)。如下图
在这里插入图片描述

设置Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。(模拟器生成的.framework, 不需要arm64架构)。如下图 切记taget不要看错了。
在这里插入图片描述
在这里插入图片描述

3.4 设置暴露的头文件

将需要别人引用的头文件设置public。默认在project(不可见,私有)。
在这里插入图片描述

在自动生成的IGLiveSDK的.h 文件中,加入需要暴露的头文件, 格式应该是用"<>“
在这里插入图片描述
注意:设置public的文件,与在LGLiveSDK 设置的头文件要保持一致,不然编译不通过。

3.5 引用到其他的三方库时的操作

如果代码中引用到了其他的三方库,例如AFN, Masonry等等,那么也需要在framework的工程中集成过来,保证能编译成功。
用命令行进入项目文件下:
执行”pod init“
在这里插入图片描述

在Podfile 中,添加对应的其他三方库
在这里插入图片描述

回到命令行,执行“pod install”
在这里插入图片描述

3.6 设置编译模式 release

在这里插入图片描述

3.7 编译

先选择真机编译 ,command+b 生成真机.framework,如果不成功,看看是什么问题
在这里插入图片描述

选择模拟器,command+b 生成模拟器.framework
在这里插入图片描述

3.8 真机和模拟器都编译成功后,合并生成对应的framework

在project下的新建一个run script, 执行后自动生成合并后的framework
Project --> TARGETS --> Build Phases -> + --> New Run Script Phases 如下:
在这里插入图片描述
在新建的run script 下添加如下的代码:

# Type a script or drag a script file from your workspace to insert its path.
if [ "${ACTION}" = "build" ]
then
INSTALL_DIR=${SRCROOT}/Products/${PROJECT_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework
# 如果真机包或模拟包不存在,则退出合并
if [ ! -d "${DEVICE_DIR}" ] || [ ! -d "${SIMULATOR_DIR}" ]
then
exit 0
fi

# 如果合并包已经存在,则替换
if [ -d "${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
# 使用lipo命令将其合并成一个通用framework  
# 最后将生成的通用framework放置在工程根目录下新建的Products目录下  
lipo -create "${DEVICE_DIR}/${PROJECT_NAME}" "${SIMULATOR_DIR}/${PROJECT_NAME}" -output "${INSTALL_DIR}/${PROJECT_NAME}"
#合并完成后打开目录
open "${SRCROOT}/Products"
fi

添加后的效果如下:
在这里插入图片描述
真机模拟器 都各编译完一次后,才能执行这段代码,执行步骤,就是common + B, 编译完后,会在工程目录下生成对应的framework,如下图:
在这里插入图片描述

3.9 使用framework

将framework拖到需要使用的工程目录下,为了方便管理添加的framework库,我在工程目录下创建了一个“Library”文件夹,我添加的路径,如下图
在这里插入图片描述
打开工程,添加对应的framework
在这里插入图片描述
添加后的样子
在这里插入图片描述
在 target下的general 的Framework 、libraries 下 点击" + " 选择 “ Add file” 将 对应的Framework添加进来,并将值设置为“Do Not Embed”
在这里插入图片描述
在需要的地方添加引用逻辑即可。

4. Framework中需要用到资源的添加

回到制作Framework的工程中,在生成的framework 目录即 Product 下,与 framework平级下添加一个.bundle, 如下图
在这里插入图片描述
将图片资源放到进去,然后在使用Framework的工程中,也添加这个bundle文件,如下图:
在这里插入图片描述在这里插入图片描述

Framework中 图片的获取,注意需要区分@2x.png 和 @3x.png , 图片的名称必须写全,否则会找不到图片的。

- (UIImage *)getImageWithName:(NSString *)imageName {
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    //IGLiveSDK 需要修改成创建的对应的bundle名
    UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"IGLiveSDK.bundle/%@@2x.png",imageName] inBundle:bundle compatibleWithTraitCollection:nil];
    if (image == nil) {
        image = [UIImage imageNamed:imageName];
    }
    return image;
}

—结束—

参考文档:

iOS制作framework
iOS Framework合并

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值