iOS打包Framework

2019-02-20  本文已影响10人  木木子席

       在做项目的时候遇到过一个需求:把当前项目打包成一个静态库,暴露出相应的接口给别人调用。这里记录一下具体实现步骤。


创建framework工程


创建Framework工程

因为我们是iOS应用,这里选择iOS--Framework&Library--Cocoa Touch Framework,创建成功后,会自动生成一个projectName.h的文件,我们可以在这个文件中import需要暴露的头文件。

暴露公开文件

在build Phases中,将你要公开的头文件拖至Public下,要隐藏的放在Private或者Project下,当然,隐藏的头文件就无法再被引用。

打包资源文件

    一个完整的项目中会有很多图片,音频文件,在正常的项目中我们一般放在assets.xcassets文件夹或者自定义的资源文件夹下。在framework中我们需要统一把资源文件打包成bundle文件,便于用户使用。

创建bundle工程

创建bundle工程

选择macOS--Framework & Library--Bundle。创建成功后,修改bundle属性:

1:将Base SDK 修改为 iOS

2:将"Build Active Architecture Only" 设置为 "YES"

3:修改IOS Deployment Target

###导入资源文件

    将图片,xib等资源文件导入bundle项目。

打包bundle文件

    bundle工程的一切就绪后,我们就可以生成.bundle的文件了,直接command+B buildSucceeded之后在项目的products文件夹下就生成了我们所需要的.bundle文件了。

合并打包

    合并打包有好几种方式,有用写好的脚本打包的,有手动拿终端合并模拟器和真机环境的,说到底原理都是一样的,这里介绍用终端合并打包。

    准备好的framework工程分别在模拟器环境和真机环境下build一下,在products文件夹下生产对应环境的framework文件,showInFolder找到对应文件夹,然后使用lipo命令合并,代码如下:

lipo -create 真机文件路径 模拟器文件路径  -output  合成后文件的输出路径

命令执行后,会生成合并后的文件,将这个文件替换掉真机环境中Framework中的文件;此时就可以把当前.framework文件拿出来了,他就是最后生成的framework文件。

注意:

       在项目中使用图片时我们一般是用:imageNamed:@"图片名称",在framework中由于图片放在bundle中,需要改为 imageNamed:@"bundle名.bundle/图片名称"

        使用其他xib资源时,项目中用的是[NSBundle mainBundle],framework中我定义了一个宏:

#define UABundle [NSBundle bundleWithPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"UABundle.bundle"]]。

上一篇 下一篇

猜你喜欢

热点阅读