美文网首页
iOS 静态库打包

iOS 静态库打包

作者: 问题饿 | 来源:发表于2018-03-23 10:10 被阅读26次

一、简单介绍

什么是库

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。
iOS中的静态库有 .a 和 .framework两种形式;动态库有.dylib 和 .framework 形式,后来.dylib动态库又被苹果替换成.tbd的形式。其中系统中.framework文件是动态库,自己打包出来的.framework是静态库,不然审核通不过

静态库与动态库的区别

静态库和动态库是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。


二、Framework的打包

1、创建SDK工程以及测试用例代码

(1)创建一个文件夹,然后在里面添加工程组,便于测试SDK


创建一个工程组将其添加在新建的文件夹下
结果如上图所示

(2)在工作组中添加一个新的项目,用于测试打包好之后的SDK


添加新的项目工程,起完名字之后添加到相应的工程组 (3)创建一个新的framework工程,将其添加到相应的工程组 创建framework工程

(4)添加文件到工程,并且在相应的文件中导入接口文件


添加文件到工程

(5)创建完成之后对应的项目组成,一个用于测试,一个用于打包SDK


项目组成

(6)实现方法,并且记得将方法暴露在.h文件中


实现方法

(7)配置相关参数:


将其配置修改,Static Library 静态库
将其build active 都修改成NO,用于来适配所有的机型,如果选择了YES则只能适配部分机型
给Architectures项目中添加armv7s编译器

将需要暴露可以引用的头文件放在public下面,private放不需要暴露的头文件,其中对应的SDK的主头文件一定要放在public下面,不然无法引用


将需要暴露的头文件放在public下面

(8)进行打包
创建一个Aggregare


添加target
选择Aggregare
创建一个新的Run

下面把这段脚本复制进去(格式不要错,格式错编译不通过)

# Sets the target folders and the final framework product.

# 如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME

# 例如: FMK_NAME = "MyFramework"

FMK_NAME=${PROJECT_NAME}

# Install dir will be the final output to the framework.

# The following line create it in the root

folder of the current project.

INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework

# Working dir will be deleted after the framework creation.

WRK_DIR=build

DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework

SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework

# -configuration ${CONFIGURATION}

# Clean and Building both architectures.

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphoneos clean build

xcodebuild -configuration "Release" -target "${FMK_NAME}" -sdk iphonesimulator clean build

# Cleaning the oldest.

if [ -d "${INSTALL_DIR}" ]

then

rm -rf "${INSTALL_DIR}"

fi

mkdir -p "${INSTALL_DIR}"

cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"

# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.

lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" -output "${INSTALL_DIR}/${FMK_NAME}"

rm -r "${WRK_DIR}"

open "${INSTALL_DIR}"
将对应代码赋值到相对应的位置

选择对应target工程,Com + B进行编译,注意不要选错


选择对应target进行编译

编译通过之后就成功了,然后通过Finder找到对应的打包好的SDK,然后将对应编译好的SDK直接使用就可以
(9)进行使用


FrameWork的使用,以及最后成功的结果

三、.a文件的打包

(1).a文件的创建 .a文件库选择并创建

然后在创建的文件中进行实现方法,记得要将想调用的方法放在.h中暴露出来,否则无法调用

进行配置参数的设置,需要将头文件暴露出来,以及选择适配的机型 添加相对应的头文件
将需要暴露的头文件放在public中
这里需要注意的是暴露出来的头文件中import的其他类也得添加到public中暴露出来。 
如果不想将import的类暴露出来,那么在头文件中用@class 然后在对应的.m文件中再import。 
总之 
1. 你再外面用到的类,一定要暴露出来; 
2. 你暴露出来的类,头文件中导入的类也一定是暴露出来的 
3. 如果提示导入头文件报错,找不到文件,找不到谁暴露谁就对了 
设置适配的机型
打包前的准备

(2)进行打包操作

  1. 首先在真机情况下编译 (Generic iOS Device),并记录下.a文件的绝对路径 ,在下图中具有标示,未编译前.a文件是红色的,编译之后.a文件变成了黑色,表示编译成功。
  2. 选择一个模拟机进行编译,并记录下.a文件绝对路径 ,跟上面一步相同
  3. 用命令行合并1、2部记录的文件,到新的.a文件,名字最好取开始我们取的名字吧,命令行:lipo -create 文件1路径 文件2路径 -output 最终文件路径
  4. 把你要暴露的.h文件和你已经生成的.a文件搞到一个文件夹里,这个文件夹就可以直接拖到工程里用啦


    选择真机进行编译,左下方的.a文件在编译过后会变黑色!其中右边大方框里面是其绝对路径,将其拷贝出来使用

    5.最后将生成的.a静态库文件和需要暴露的.h放在一个新建的文件夹中,然后将这个新建的文件夹放在你需要使用的工程中,这样你就可以使用了


    新建的文件目录,可以使用的静态库文件
    6.最后将生成的新文件放在项目中进行测试使用
    测试使用的结果

category是我们在开发中经常使用到的方法,如果在category打包成静态库之后放在项目中无法使用,则需要在使用静态库的工程配置中将other linker flags的值设置成-ObjC,这是因为在调用category中的方法时会有找不到该方法的运行时错误(selector not recognized)
一般在使用静态库的时候,都是在静态库的内部创建一个.h文件(一般起个的名字静态库名字相同),然后把所需要暴露的.h都集中的放在这个.h文件中,这样这些原本需要暴露的文件就不需要暴露了,只需要将这个新建的.h文件暴露出来就可以了

相关文章

  • iOS静态库与动态库的区别与打包

    iOS静态库与动态库的区别与打包iOS静态库与动态库的区别与打包

  • iOS封装framework,包含xib,storyboard,

    0. 网络含有很多有关iOS封装framework .a静态库文章,本文推荐 iOS静态库iOS打包framewo...

  • cocoaPods 打包静态库 遇到的坑 and git

    cocoaPods 打包静态库 遇到的坑参考资料iOS 打包.a文件的那些事儿iOS-将自己的库支持CocoaPo...

  • iOS中的静态库 .a 和 .framework &&a

    一、iOS里静态库形式 二、.a 与 .framework有什么区别 三、为什么要使用静态库 四、如何打包 .a ...

  • iOS 静态库开发

    iOS 静态库开发 本文旨在说明静态库制作中的一些常见问题和特殊处理1. 打包静态库需要的相关问题和设置 静态库中...

  • iOS 静态库

    iOS 静态库 iOS 静态库

  • 使用XCode7打包动态库/静态库

    使用XCode7打包动态库/静态库 @(▶开发)[iOS,Xcode]文章同步在个人主页~ [TOC] iOS中的...

  • iOS 打包静态库

    最近项目需要静态库打包,看了几篇文章 。做个总结本文介绍的是.frameWork静态库制作方法 第一步:创建fra...

  • iOS 静态库打包

    一、简单介绍 什么是库 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。库分静态库和动态库两种。...

  • ios 打包静态库

    首先 先介绍一下什么是库.所谓库就是程序代码的集合,是共享程序代码的一种方式。库的分类分为开源库和闭源库 至于什么...

网友评论

      本文标题:iOS 静态库打包

      本文链接:https://www.haomeiwen.com/subject/uhmgqftx.html