创建及使用静态库(.a)的步骤整理
来源:互联网 发布:92kaifa 域名秀 编辑:程序博客网 时间:2024/06/04 00:46
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。
如果你作为iOS开发者已经有一段时间,可能会有一套属于自己的类和工具函数,它们在你的大多数项目中被重用。
重用代码的最简单方法是简单的 拷贝/粘贴 源文件。然而,这种方法很快就会成为维护时的噩梦。因为每个app都有自己的一份代码副本,你很难在修复bug或者升级时保证所有副本的同步。
这就是静态库要拯救你的。一个静态库是若干个类,函数,定义和资源的包装,你可以将其打包并很容易的在项目之间共享。
一.创建.a静态库
1.
2.添加自己的源代码 将公开的接口置于.h文件中 实现置于.m文件
3.在.a库的showinfindjr中可以找到 include 和 对应的 .a文件
4.默认情况下,库文件只会为当前的架构构建 所以要使用通用二进制 来使支持多个平台
4.1 通用二进制是一种特殊的二进制文件,它包含对应多个架构的结果代码。为了创建通用二进制库,需要使用一个名为lipo的系统工具 lipo是一个命令行工具,它允许在通用文件上执行操作(类似于创建通用二进制, 列出通用文件内容等等)。本教程中使用lipo的目的是联合不同架构的二进制文件到单个输出文件中。你可以直接在命令行中使用lipo命令,但在本教程中你可以让Xcode执行一段创建通用库的命令行脚本来为你做这件事。
4.2
4.3
在工程导航视图中选中ImageFilters,然后选择UniversalLib目标。切换到Build Phases标签;在这里设置构建目标时将要执行的动作。
点击Add Build Phase按钮,在弹出的菜单中选择Add Run Script,如下图:
4.4 原理 :;
现在你需要设置脚本项。展开Run Script模块,在Shell行下粘贴如下代码:
- # define output folder environment variable
- UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
- # Step 1. Build Device and Simulator versions
- xcodebuild -target ImageFilters ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
- xcodebuild -target ImageFilters -configuration ${CONFIGURATION} -sdk iphonesimulator -arch i386 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"
- # make sure the output directory exists
- mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
- # Step 2. Create universal binary file using lipo
- lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a"
- # Last touch. copy the header files. Just for convenience
- cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/include" "${UNIVERSAL_OUTPUTFOLDER}/"
代码并不十分复杂,它是这样工作的:
UNIVERSAL_OUTPUTFOLDER 包括了通用二进制包将要被存放的文件夹:“Debug-universal”
Step 1. 第2行执行了xcodebuild并命令它构建ARM架构的二进制文件。(你可以看到这行中的-sdk iphoneos参数)
下一行再次执行了xcodebuild命令并在另一个文件夹中构建了一个针对Inter架构的iPhone模拟器的二进制文件,在这里关键参数是-sdk iphonesimulator -arch i386。(如果感兴趣,你可以在man page了解更多关于xcodebuild的资料)
Step 2. 现在已经有了2个.a文件分别对应两个架构。执行lipo -create,用它们创建出一个通用二进制。
最后一行的作用是复制头文件到通用构建文件夹的外层。(用cp命令)
你的Run Script窗口应该看起来如下:
4.5 现在你已经准备好构建一个静态库的通用版本
5 在应用中使用静态库
有两种办法可以将静态库引入到工程中:
方法 1: 直接引用头文件和库二进制文件(.a)
方法 2: 将库工程作为子项目
方法 1: 头文件和库二进制文件
1.用showinfound开自己创建的静态库 将里面的.h 和 .a 文件赋值到新项目的实体文件中去 再通过下面的方法来设置路径来实现对静态库的调用
注意: 标准的Unix引入惯例是一个include文件夹,用来存放头文件,一个lib文件夹用来存放库文件(.a)
2.添加头文件的搜索路径Header Search Path
双击Header Search Paths项,弹出一个浮动窗口,点击+按钮,输入:
- $SOURCE_ROOT/include
$SOURCE_ROOT是一个Xcode环境变量,指向工程根文件夹。Xcode会使用包含你工程的实际文件夹代替此变量,这意味着即使你把工程移动到其它文件夹或驱动器,它仍然可以指向最新的位置。
3.添加包含类实现的库文件
该链接尝试更高效的只包含需要的代码,而有时会排除静态库代码。使用该标识,库中的所有Objective-C类和类别都将被适当的加载。你可以从苹果的Technical Q&A QA1490了解详细信息。
4.在 Other linker Flags 增加-ObjC链接标识
方法 2: 将静态库作为子项目添加到新的项目中
1.将自建的库工程文件的.xcodeproj文件,拖拽它到新工程左侧的导航栏中
2.为工程添加依赖关系
3.设置静态库工程链接到应用
4.在 Other linker Flags 增加-ObjC链接标识
0 0
- 创建及使用静态库(.a)的步骤整理
- 静态库的创建及使用
- linux静态库的创建及使用
- Xcode6.4创建以及使用iOS.a的静态库
- Git/.a静态库的介绍:创建和使用
- 创建和使用静态库.a 文件
- ios开发之静态库(.a)的生成及使用
- linux动静态库的创建及使用
- linux下动态链接库.so文件 静态链接库.a文件创建及使用
- ios .a静态库和framework静态库的创建以及使用
- 创建静态库.a
- iOS开发:打包.a静态库文件的步骤
- 使用dojo创建应用程序的步骤及小sample
- 在Linux中静态库.a和动态库.so 的创建和使用
- 创建真机和模拟器都能使用的静态库.a文件
- iOS创建.a和.framework静态库,以及Bundle资源文件的使用
- xcode创建静态库.a
- iOS打包.a静态库步骤
- java 集合 HashMap
- imageBeffer绘制图形
- 程序员不可不知的英文词汇(4)
- 匿名内部类
- 知名App第三方库汇总2014.10
- 创建及使用静态库(.a)的步骤整理
- token和deviceId
- 创建自己的通用静态库 --- 很详细
- java调用shell脚本,并获得结果集的例子
- [Tools]Windows 7(64)系統下提取 deb 文件中的某个文件的一种方法
- JAVA GC新时代 老年代
- swift继承
- 概念:静态库/动态库/静态链接库/动态链接库
- 内部类