iOS开发——打包静态库与Framework
最近老是需要做接口给别的客户,就顺便把打包的过程也写一下吧!
一、静态库
静态图里面只能是纯文件,里面不能再有第三方打包的静态库,也就是说,静态库不能打包静态库。这个用的比较多,一般自己公司写出来的东西都可以用这个。
打包的文件随便多少文件夹,没影响。
1.Cocoa Touch Static Library,找到这个,新建。不同的xcode,位置有所不同。
2.要打包的源文件扔进去,不能有第三方的静态库。
3.在Build Phases—>左上角的➕—>New Headers Phase,把需要暴露的.h文件加进去。
4.分别在模拟器和真机的环境编译一下,command+B,会分别生成对应的.a文件。
5.左侧的文件目录Products里面,.a文件编译后由红转黑。这就是编译好了,拿到这两个.a文件
6.在终端里面合成两个.a文件:lipo -create 1.a的路径 2.a的路径 -output 3.a的路径,1.a和2.a生成3.a,3.a就是我们需要的.a文件。
eg:lipo -create /.../lib1.a /.../lib2.a -output /.../lib3.a
7.给别人使用,就是给合成的.a文件和暴露的头文件。
二、Framework
Framework这个功能更强大,这里只是跟静态库做区分,它可以打包静态库。
打包的文件并列的放里面,不要文件夹,这点我是从网上看的,还没验证过,谁要是验证了,可以跟我说一下。
1.Cocoa Touch Framework,找到这个,新建。跟Cocoa Touch Static Library的位置在一起,取名为:MyFramework。
2.要打包的文件扔进去。
3.在Build Phases里面的Headers里,把需要暴露的头文件拖到Public里面。
4.在创建是生成的.h文件中,即MyFramework.h中,里面有两个FOUNDATION_EXPORT,在最下面加上你要暴露的头文件名字。比如#import “handle.h”
5.新建target:File—>New—>Target,找到Aggregate,取名,比如MyTarget,然后Next。
6.选择MyTarget—>Build Phases—>左上角的➕—>New Run Script Phase。
7.在Run Script中,加入脚本:
# 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}"
8.在xcode最上面那一排,更换成我们新建的target,然后编译,command+B。
9.会自动弹出生成的Framework文件所在的地方。
10.给别人使用只需要给这个Framework文件就可以了。
11.如要使用Framework中的handle.h文件,只需导入#import <MyFramework/MyFramework.h>即可。
注:将Framework直接拖到项目中,该加的地方加上,就跟拖文件到项目中一样,xcode会自动做添加的操作。如果报错:
dyld: Library not loaded: @rpath/MyFramework.framework/MyFramework
Referenced from: /var/containers/Bundle/Application/14A1BFBF-FA45-4684-8E33-22A54F006AA0/Demo_test999.app/Demo_test999
Reason: image not found
网上有很多文章的解决办法是:
iOS开发——打包静态库与Framework的更多相关文章
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
- iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...
- 李洪强iOS开发之静态库的打包一
李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...
- iOS开发中静态库制作 之.a静态库制作及使用篇
iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...
- 【转】 iOS 开发之静态库.a和动态库详解 -- 不错
原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...
- 李洪强iOS开发之静态库
iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...
- 【iOS开发之静态库、动态库】
什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...
- iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库
编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...
- iOS开发之静态库(四)—— 静态框架framework制作
前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...
随机推荐
- cakephp2.3.0 lib中的Model.php有一个bug
1. cakephp2.3.0 lib中的Model.php有一个bug, 加上 !empty($db->config['prefix']) 这个判断更好.有时候会少进行一次 new PDO() ...
- linux sort 用法
sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式: sort [-bcfMnrtk][源文件][-o 输出文件]补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数: ...
- Linux下安装php开发框架yaf
yaf框架中文手册:http://yaf.laruence.com/manual/index.html yaf手册:http://www.php.net/manual/en/book.yaf.php ...
- java 子类与父类继承关系
People.java public class People { int age,leg = 2,hand = 2; protected void showPeopleMess() { System ...
- 关于c中的inline
在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数.栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的 ...
- mysql 查询 45 道题
一. 设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...
- mytest 截图
- 转 json数组对象和对象数组
一.Json的简单介绍 从结构上看,所有的数据最终都可以分成三种类型: 第一种类型是scalar(标量),也就是一个单独的string(字符串)或数字(numbers),比如“北京”这个单独的词. 第 ...
- RTC-高效率实现TimerTicker编解码
源:RTC-高效率实现TimerTicker编解码 嵌入式系统中时间是很重要的,在以往的系统中设计者常常使用一种叫RTC的专用芯片来维持时间,这种芯片种类很多接口形式也很多,如常用的DS1302.PC ...
- USB的八个问题和答案(转)
http://www.amobbs.com/thread-901041-1-1.html 问题一:USB的传输线结构是如何的呢? 答案一:一条USB的传输线分别由地线.电源线.D+.D-四条线构成,D ...