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

  一、静态库

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

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

  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. oracle 锁表的处理。

    最近系统每天经常锁表,进程杀死后,很快再次锁住这个表. (一)先贴出现场处理死锁的步骤. 另外:有时候通过PL/SQL执行kill session可能仍然无法解锁,此时需要登陆到Oracle服务器将进 ...

  2. Java-枚举介绍

    需求:今天遇到一个问题,就是返回某些固定的int值,要用到枚举. 下面开始介绍: 无参构造方法的枚举 enum Color{ YELLOW,BLUE,RED } 解析:首先Color本身是一个枚举,里 ...

  3. jQuery Mobile 学习

    jQuery Mobile 学习系列 http://blog.csdn.net/bao990423420/article/details/13995021

  4. Android中Edittext的属性

    //此为转载别人的,挺不错的 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true"  ...

  5. Python实现删除目录下相同文件

    让我们来分析一下这个问题:首先,文件个数非常多,手工查找是不现实的,再说,单凭我们肉眼,在几千张图片或文件里面找到完全相同的难度也是很大的.所以要用程序实现.那么用程序怎么实现呢?根据什么判断两个文件 ...

  6. 空指针错误 java.lang.NullPointerException

    使用基本的JAVA数据类型,变量的值要么已经是默认值,如果没有对其正常赋值,程序便 不能通过编译,因此使用基本的JAVA数据类型(double,float,boolean,char,int,long) ...

  7. “找回” Envi 快捷方式

      Envi+IDL文件夹挪到别的电脑,不用安装,直接可以使用.但是桌面和开始菜单没有了Envi,IDL,envi+idl的快捷方式,很不方便.   记录一下快捷方式命令行,备用: envi快捷方式 ...

  8. android:editable is deprecated: Use an <EditText> to make it editable

    问题:android:editable is deprecated: Use an to make it editable   意思:Android的:编辑是反对:使用<</span> ...

  9. Roboguice学习之视图注入

    Robuguide的使用 准备工作: 首先在项目中必须实现GreetingModule和RoboguiceDemoApplication GreetingModule.java import com. ...

  10. 一个好用简单的布局空间EasyUI

    之前项目中都是前端来新写的页面,对于很多后台管理系统来说,新写页面其实比较麻烦. 最近看到一款还是不错的开源页面框架EasyUi http://www.jeasyui.com/index.php 这是 ...