最近老是需要做接口给别的客户,就顺便把打包的过程也写一下吧!

  一、静态库

  静态图里面只能是纯文件,里面不能再有第三方打包的静态库,也就是说,静态库不能打包静态库。这个用的比较多,一般自己公司写出来的东西都可以用这个。

  打包的文件随便多少文件夹,没影响。

  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

  网上有很多文章的解决办法是:

1、在Xcode中的Build Phases中的Copy Files项中,将你要引用的framework拖到“Linked Frameworks and Libraries“中【如果已经添加了,跳过这一步】
2、把Build Phases 里framework后边的选项,修改成为Optional就可以了
  你试过之后,发现然并卵,第一个方法,一般拖进项目的时候,xcode自动帮你加了,第二个方法更扯淡,就是不加载这个framework,肯定不会报错啦!
  
  正解:在Xcode中的Build Phases中的Copy Files项中,将framework拖到Copy Files中即可

iOS开发——打包静态库与Framework的更多相关文章

  1. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  2. iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

  3. 李洪强iOS开发之静态库的打包一

    李洪强iOS开发之静态库的打包一 //静态库一般做一下几种事情 //1 工具类 算法逻辑 新建工具类LHQTools 定义类方法 + (NSInteger)sumWithNum1: (NSIntege ...

  4. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  5. 【转】 iOS 开发之静态库.a和动态库详解 -- 不错

    原文网址:http://blog.csdn.net/lxl_815520/article/details/52154331 一, 简单介绍 1.什么是库 库是程序代码的集合,是共享程序代码的一种方式 ...

  6. 李洪强iOS开发之静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  7. 【iOS开发之静态库、动态库】

    什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式,库一般分两类:开源库和闭源库.github中共享一般是开源库:闭源库分为:静态库和动态库,闭源库不开放源代码,是经过编译的二进制文件,一 ...

  8. iOS开发之静态库(三)—— 图片、界面xib等资源文件封装到.a静态库

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 新建工程:File -> Ne ...

  9. iOS开发之静态库(四)—— 静态框架framework制作

    前面介绍过,虽然苹果公司禁止在iOS开发中使用动态库,而且也从XCode中移除了创建静态框架的功能,但我们还是可以通过对XCode进行小小的改动来创建静态框架. 编译环境:Macbook Air + ...

随机推荐

  1. Encoding filter 编码过滤器

    1.首先编写过滤器,实际上就是继承了filter接口的一个类,实现其中的init  doChain  和destroy方法 package com.util; import java.io.IOExc ...

  2. 转 oracle 如何停下oracle 服务

    设置SET ORACLE_SID=ORCL ORCL--实例名称 --停止oracle实例服务 C:\Users\Administrator>net stop oracleserviceORCl ...

  3. HTML day03表格与表单

    1.表格 一般格式: <table> <thead><!--表格头--> <tr> <th></th> </tr>& ...

  4. java方法:flush()

    flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道. 同理很多流都有一个这样的池子,专业术语叫缓冲区,当 ...

  5. java内部类继承--构造函数传参

    /: innerclasses/InheritInner.java // Inheriting an inner class. class WithInner { class Inner {} } / ...

  6. 将所需要的图标排成一列组成一张图片,方便管理。li的妙用

    我在做一个网站的header 但是视频教学里面将电话图标,微信图标,以及每一个英文字母右边的小点拼成一副图. (图片的名字是top_ioc.png)拼成的整个图片作为li的背景.通过移动就可以分别将每 ...

  7. Linux学习 -- 系统管理

    1 进程管理 判断服务器健康状态 top [选项] 查看系统中所有进程 ps aux      BSD格式 ps -le        Linux格式 pstree [选项] -p   显示PID - ...

  8. KNN邻近分类算法

    K邻近(k-Nearest Neighbor,KNN)分类算法是最简单的机器学习算法了.它采用测量不同特征值之间的距离方法进行分类.它的思想很简单:计算一个点A与其他所有点之间的距离,取出与该点最近的 ...

  9. nested query for "pat2" table

    mysql> select t.appln_id, t.filing_date, t.appln_kind, t.people, GROUP_CONCAT(pu.publn_kind) from ...

  10. mysql 远程连接不上 %用户已经添加了

    修改mysql的配置文件/etc/mysql/my.conf,将bind-address后面增加远程访问IP地址或者禁掉这句话就可以让远程机登陆访问了. 记得要重启mysql服务哦 service m ...