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

1. 库的分类

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

2. 开源库的制作

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

3. 静态私有库framework的制作

3.1 用xcode创建一个framework工程:

iOS 制作私有库framework + 图片资源的使用_第1张图片
iOS 制作私有库framework + 图片资源的使用_第2张图片iOS 制作私有库framework + 图片资源的使用_第3张图片
创建后的工程如下:
iOS 制作私有库framework + 图片资源的使用_第4张图片

3.2 添加代码

将准备好的代码添加到工程里
iOS 制作私有库framework + 图片资源的使用_第5张图片
添加对应的代码文件目录如下:
iOS 制作私有库framework + 图片资源的使用_第6张图片
iOS 制作私有库framework + 图片资源的使用_第7张图片

3.3 配置工程文件

设置兼容最低的iOS系统
iOS 制作私有库framework + 图片资源的使用_第8张图片

设置Build Active Architecture Only 值 为NO。如下图(适配所有版本的模拟器和真机)
iOS 制作私有库framework + 图片资源的使用_第9张图片

设置Mach-O Type值为Static Library(静态库)。如下图
iOS 制作私有库framework + 图片资源的使用_第10张图片

设置Excluded Architectures下的 Any ios Simulator SDK 值为 arm64。(模拟器生成的.framework, 不需要arm64架构)。如下图 切记taget不要看错了。
iOS 制作私有库framework + 图片资源的使用_第11张图片
iOS 制作私有库framework + 图片资源的使用_第12张图片

3.4 设置暴露的头文件

将需要别人引用的头文件设置public。默认在project(不可见,私有)。
iOS 制作私有库framework + 图片资源的使用_第13张图片

在自动生成的IGLiveSDK的.h 文件中,加入需要暴露的头文件, 格式应该是用"<>“
iOS 制作私有库framework + 图片资源的使用_第14张图片
注意:设置public的文件,与在LGLiveSDK 设置的头文件要保持一致,不然编译不通过。

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

如果代码中引用到了其他的三方库,例如AFN, Masonry等等,那么也需要在framework的工程中集成过来,保证能编译成功。
用命令行进入项目文件下:
执行”pod init“
iOS 制作私有库framework + 图片资源的使用_第15张图片

在Podfile 中,添加对应的其他三方库
iOS 制作私有库framework + 图片资源的使用_第16张图片

回到命令行,执行“pod install”
iOS 制作私有库framework + 图片资源的使用_第17张图片

3.6 设置编译模式 release

iOS 制作私有库framework + 图片资源的使用_第18张图片

3.7 编译

先选择真机编译 ,command+b 生成真机.framework,如果不成功,看看是什么问题
iOS 制作私有库framework + 图片资源的使用_第19张图片

选择模拟器,command+b 生成模拟器.framework
iOS 制作私有库framework + 图片资源的使用_第20张图片

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

在project下的新建一个run script, 执行后自动生成合并后的framework
Project --> TARGETS --> Build Phases -> + --> New Run Script Phases 如下:
iOS 制作私有库framework + 图片资源的使用_第21张图片
在新建的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

添加后的效果如下:
iOS 制作私有库framework + 图片资源的使用_第22张图片
真机模拟器 都各编译完一次后,才能执行这段代码,执行步骤,就是common + B, 编译完后,会在工程目录下生成对应的framework,如下图:
iOS 制作私有库framework + 图片资源的使用_第23张图片

3.9 使用framework

将framework拖到需要使用的工程目录下,为了方便管理添加的framework库,我在工程目录下创建了一个“Library”文件夹,我添加的路径,如下图
iOS 制作私有库framework + 图片资源的使用_第24张图片
打开工程,添加对应的framework
iOS 制作私有库framework + 图片资源的使用_第25张图片
添加后的样子
iOS 制作私有库framework + 图片资源的使用_第26张图片
在 target下的general 的Framework 、libraries 下 点击" + " 选择 “ Add file” 将 对应的Framework添加进来,并将值设置为“Do Not Embed”
iOS 制作私有库framework + 图片资源的使用_第27张图片
在需要的地方添加引用逻辑即可。

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

回到制作Framework的工程中,在生成的framework 目录即 Product 下,与 framework平级下添加一个.bundle, 如下图
iOS 制作私有库framework + 图片资源的使用_第28张图片
将图片资源放到进去,然后在使用Framework的工程中,也添加这个bundle文件,如下图:
iOS 制作私有库framework + 图片资源的使用_第29张图片iOS 制作私有库framework + 图片资源的使用_第30张图片

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合并

你可能感兴趣的:(OC学习小记,ios,xcode,objective-c)