本文转载至 http://blog.csdn.net/chen505358119/article/details/9190731

 

ios中我们写的代码有时不愿意让别人看到,可能对它进行封装,生成一个静态库如典型的.a,还有一种就是和

苹果自带的库一样的后缀名为.framework的库,个人推荐使用.framework,因为.a不仅要装其添加进去,还要

将对应的头文件添加到项目中。

1.新建一个静态库工程。file--new--project,弹出框中选择Ios--framework&library中的cocoa touch static library.点击NEXT。输入product name,这里为libZW.

2.删除向导所生成工程中的Target:

删除目标后工程状态

3.删除旧目标对应的工程文件夹:

删除前:

删除前,注意,此处删除会弹出提示框,要选择"只删除引用"

删除后如下图

4.删除旧目标对应的编译设置(Product菜单|Edit Scheme命令):

点击左下角的Manage Schemes按钮:删除后如下图

点击OK返回

5.增加一个新目标,点击下面的Add Target

在弹出的对话框中选择Mac OS X下的Bundle

如上图,给库取一个名字,保持默认的Framework(CoreFoundation),然后点击Finish.

6.修改新目标的工程设置.选中TARGETS中对应的目标,Build Setting页:在Architectures下将“Base SDK”

改为"Lastest iOS",然后将"Architectures"改为"Standard":

在Deployment下,将"Mac OS X Deployment Target"改成“Compiler Default”,将“Targeted Device Family”改成

需要的,此处改成了"iPhone/iPad",同时可以根据需要修改"iOS Deployment Target",此处改为了"iOS 4.3":

在 Linking 中,将 “Dead Code Stripping” 改为 “NO”,将 “Link with Standard Libraries” 改为 “NO”,将 “Mac-O Type” 改为 “Relocatable Object File”:

在 Packaging 中,将 “Wrapper Extention” 改为“framework”:

7、修改目标的 Info。点击 Info:

将 “Bundle OS Type Code” 改为 “FMWK”(Framework 的意思):

8、修改预编译头:

9.往项目中拖进工具类,或新建类具体的我就不多说了如图

10.导出相关文件。选中Target,点击Build Phases,然后点击右下角的"Add Build Phase"

在弹出的菜音中选择"Add Copy Header",添加完成后, 展开"Copy Headers",下面有Public、Priviate、Project三个子项:

然后点击下面的+号,从项目中选择头文件,点击Add按钮完成添加。此时,我们看到导出的头文件在

Project下,这样不能暴露给别人使用,将其拖动到Public下:

然后分别选择模拟器和iOS Device模式下编译,它会生成libZW.framework

可能有的人生在的是Debug模式下的,那你就应该把第四步中的build Configure改成release模式,再生成一次就行了,

这时模拟器的framework和iOS Device的framework是分开的,

怎样知道framework是支持模拟器的还是支持真机的呢可以用命令,先cd到libZW.framework里面,你会看到里面的libZW,然后执行lipo -info libZW

如果是i386表示支持真机

如果是armv7支持模拟器

那怎样将其合呢

执行命令命令lipo -create xxxx/libZW  xxxxx/libZW  -output  libZW

你会看到在Debug-iphoneOS同级目录下会有一个新的libZW,这个表示继支持模拟器又支持真机的,如果不信可以执行命令

lipo -info libZW你会看到里面既有armv7又有i386,然后将其替换Release-iphoneos里面的libZW.framework目录下的libZW,

此时的libZW.framework可以同时在真机和模 拟器中同时使用,好了就说这么多了

转地址:http://blog.csdn.net/fengsh998/article/details/8290687

ios 制作自已的framework的更多相关文章

  1. iOS制作自己的Framework框架

    1.新建工程选择iOS —> Cocoa Touch Framework 2.进入工程将工程自带的文件干掉 3.导入自己所需的文件 4.4.TARGETS —> Build Setting ...

  2. iOS静态库及Framework 创建

    本文转自cocoachina,尊重作者的汗水. 讲述的非常透彻,有需要的朋友可以阅读实践.转载请注明出处 //=================以下留着备份==================// 在 ...

  3. [iOS] 建立与使用Framework

    [iOS] 建立与使用Framework 前言 使用XCode开发iOS项目时,开发人员可以将可重用的程序代码,封装为Library或是Framework来提供其他开发人员使用.这两种封装方式在使用的 ...

  4. iOS+Swift: 使用MessageUI.framework发送短信

    在iOS中, 可以使用MessageUI.framework框架发送短信, 步骤如下: 代码下载http://git.oschina.net/yao_yu/swift_cnblogs_samples/ ...

  5. iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用

    iOS 中 .a 和 .framework 静态库的创建与 .bundle 资源包的使用 前言 开发中经常使用三方库去实现某特定功能,而这些三方库通常又分为开源库和闭源库.开源库可以直接拿到源码,和自 ...

  6. iOS 制作 framework 教程

    直接看步骤 废话不多说,哈哈! 1.新建一个静态库工程: 2:取自己喜欢的名字: 3.删除向导所生成工程中的 Target: 3.删除TestFrameWork对应的工程文件夹: 5:删除bulid ...

  7. WWDC2014之iOS使用动态库 framework【转】

    from:http://www.cocoachina.com/industry/20140613/8810.html JUN 12TH, 2014 苹果的开放态度 WWDC2014上发布的Xcode6 ...

  8. IOS静态库和Framework区别

    一.什么是库? 库是共享程序代码的方式,一般分为静态库和动态库. 二.静态库与动态库的区别? 静态库:链接时完整地拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复制,程序运行时由系 ...

  9. iOS 系统架构 && 常用 framework

    整理自互联网,感谢原文作者! 1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch lay ...

随机推荐

  1. 2017.11.21 postgre更新时需要联合其他表的信息

    现在需要更新t_user表,但是前台传来的参数 tenant_name 并不在这个表中,需要联合另一个表t_tenant. 要注意的一点是:set后面的字段不要写成 u.fd_validity,否则会 ...

  2. Python下opencv使用笔记(二)(简单几何图像绘制)

    简单几何图像一般包含点.直线.矩阵.圆.椭圆.多边形等等.首先认识一下opencv对像素点的定义. 图像的一个像素点有1或者3个值.对灰度图像有一个灰度值,对彩色图像有3个值组成一个像素值.他们表现出 ...

  3. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-PLC支持哪些PLC语言类型

    PLC的标准化语言,统称为IEC 61131-3,该规范下有五种不同的语言可以创建PLC程序,TwinCAT都支持. IL(指令列表): 每条指令都从一个新行开始并包含一个操作和一个或多个操作数,一条 ...

  4. SAP MM模块 经常使用函数

    1. MM_CURRENT_PRICE_DOCUMENT   2. ME_READ_HISTORY 获取採购行项目的历史记录   CALL FUNCTION 'ME_READ_HISTORY'     ...

  5. Appstore 提交时错误

      ERROR ITMS-9000:This boundle is invalid. New apps and app updates submitted to the App Store must  ...

  6. n皇后问题[分支限界法]

    问题: 如何能够在 n×n 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上. 分析: 我们可以用一串数字来表示问题 ...

  7. ubuntu cp(copy) command

    e.g. #cp –p –R  /opt/lampp/drv ~/test   Ubuntu_Linux命令:cp(copy)复制文件或目录 功能: 复制文件或目录   www.2cto.com  说 ...

  8. 10、驱动中的阻塞与非阻塞IO

        阻塞,就是在获取资源的时候,不能获取到,那么就会将当前的进程挂起(睡眠,也就是将当前进程从调度器拿走了,不会调度当前进程),直到满足条件为止再进行操作.相反,非阻塞,就是即使不能获取到资源,非 ...

  9. PHP,mysql,Linux,CI框架学习总结

    PHP,mysql,CI框架学习总结 PHP标记 1.Xml风格<?php ?> 2.简短风格 <? ?> 需在php.ini中开启short_open_tag 3.asp风格 ...

  10. unity, 显示像素图,以及iOS下像素图变模糊解决办法

    在PS里画了个16x16像素的图: 在webplayer下Filter Mode选为Point,显示效果为: 在ios下显示效果为: 是由于iOS下会将图片压缩为pvr所致,想得到清晰的效果,需将Fo ...