xocde7标准Framework静态库制作方法,工程转Framework

题记:程序员求打赏买个包子吃,谢谢各位

方法比较老  但是实践证明还是很实用的

1.创建一个工程,或者在原有的工程上进行。

2.在原有工程上添加一个静态库


2.1选择OSX 的Bundle。因为Xcode7 中iOS里没有Bundle。


2.2、修改Bundle的属性,一是让他能用在iOS上。二是改变Bundle成为Framework

选中要修改的Bundle


2.3、Target:并选择Build Settings- > Architectures -> Base SDK 改为Latest iOS(iOS9)


2.4、Target:在 Deployment 下,

将 “Mac OS X Deployment Target”改成”Compiler Default”,

将 “Targeted Device Family”改成”iPhone/iPad”,根据自己的需要改。如果你只想在iPhone上用,那选iPhone就行

将  “iOS Deployment Target”,改成 “iOS 7.0”:也就是说这个静态库支持7.0以上版本。



2.5、Target:在 Linking 下,

将 “Dead Code Stripping” 改为 “NO”,

将 “Link with Standard Libraries” 改为 “NO”,

将 “Mac-O Type” 改为 “Relocatable Object File”:


2.6、Target:Packaging 中,

将 “Wrapper Extention” 改为“framework”:


2.6、Target:返回Info 标签。

将 “Bundle OS Type Code” 改为 “FMWK”(Framework )


2.7、Target:返回Build Phases 标签。加入Copy Headers,后边会用到。


3、返回目录,可以看到设置好的 Framewor文件。红色代表还没有这个静态库,需要你生成一下。后边会讲到。


3.1、如何管理静态库:


点开菜单,可以看到所有可管理的工程、静态库。

3.2:LineChart(App图标样式)是App 工程文件,选中这个运行(command+R 或command+B)意思是让工程导出或者测试运行可发布的应用程序(就是上线文件)。对应功能就不一一介绍了。

3.3:PZGLineChart(Bundle图标样式)是静态库。选中这个运行(只能运行command+B,不能运行command+R)意思是导出静态库,也就是自己的封装代码,用于共享给其他人。如果选中iOS Device运行(command+R),将会导出真机版本的静态库,如果选中iOS Simulator以下其他任何版本运行(command+R),将会导出模拟器的静态库版本。至于为什么这样,是因为真机的iOS和Mac系统中的虚拟iOS目录结构是不一样的,如果导错了,编译器会报错,“找不到指定文件。”

3.4:选中:Edit Scheme…:在这里管理所有工程文件、静态库、测试、发布等等的程序关系。

在这里,我们把刚才加入Framewor的导入,以便程序直接建立关系。


成为这样:


3.5:选中:Manage Scheme…:、这里的添加删除、会改变


。主要是方便开发者测试使用。

如果希望测试菜单中测试其他工程、静态库等等东西,在这里添加就行,比如下边的这个。Show对勾都勾选上后,菜单就会出来这两个选项。去掉对勾会隐藏。


4、给静态库添加文件、xib、image....

直接介绍其属性:

1:不知道。没用过。等高手补充

2:程序文件放的地方:(*.m 、*.mm等),需要压缩保护的代码,只要放在这里的文件,都将被静态库压缩。使用静态库的一方是无法看到源代码的。

3:库文件放的地方,比如把其他的静态库、动态库压缩到这里。

4:资源文件放的地方,图片、音视频、xib、Images.xcassets、甚至是Main.storyboard(故事板);只要放到这里,都将被压缩,使用方是无法编译或者看到源代的。

5:对外接口。主要就是这里,展开后,会看到第一行(Public),不用介绍了吧,看英文应该就能猜到,何况这个单词是程序中常用的单词,公用吗!,只要是放到这里的文件,都将会暴露给使用方,建议把所有的*.h文件放到这里。

现在就把你想要管理的文件一个一个往里拖拽吧。就不在一个一个介绍。


6、首先测试,程序部分是否运行正常。我新增加了一个MyViewController(带.xib),在MyViewController.m里简单写了个打印。


还有我拖拽完就是这个样子:


7:生成静态库:大家看到了,都是红色,意思是Xcode找不到文件,别慌,我们都给他跑一边。


7.1、选中以下,分别command+B。


黑了吧,


选中PZGLineChart.framewor文件,鼠标右键,Show in Finder。

看到了吧,成功了,就这么简单。现在生成的是真机版本,如果需要模拟机使用的静态库,选中模拟后,再分别command+B一下。


模拟机版本:

模拟机版本的就选择:Debug-iphonesimuator文件夹下。如果没有Debug-iphonesimuator文件夹,那你选择


后再command+B。


8、关于静态库引用文件

如果希望你的工程能在未来能导出成静态库,那么在你编写的时候要遵循静态库引用原则,使用这种方式。

注意:这种引用方式必须在你的Products下静态库成黑色时候,才能编译通过。


9、新建一个工程,把你做的静态库Add进来。对接好,然后直接Command+R。是不是成功了。其实就这么简单。

关于找不到文件的报错:直接看下边。我有介绍,


跑成功的工程,一切正常。


10、关于第三方库找不到文件的提示错误。简单补充下吧,别走弯路。

首先你要确定这个错误产生的原因:大致分两种,

一:你做的项目缺失文件,百度下,加入就解决了;

二:你引入的第三方框架发生找不到文件错误:这样的结果分两种:

二、一:开发第三方框架的程序人员没有做好自己的框架。尤其是在生成框架的时候,没有设置好自身属性。导致使用者用的时候出现找不到文件错误,最后迫使使用者不得不去改自己的工程配置。

二、二:你在引入第三方框架的时候,少引用了文件。

好了,你分析完后就好办了,我们做的这个静态库没有设置自己的兼容属性,所以就照成了这种错误。在iPad Retina的模拟器上跑就正常,换成其他的模拟设备就报错。所以改下其属性就能解决。

Target: -> Build Settings ->  Architectures -> Build Active Architecture Only 全改成NO;

分析原因:


在我们生成静态库的时候,我们选择的是iPad Retina。也就是说这个静态库在引用的时候,必须也是iPad Retina。否则Xcode编译器会找不到文件所在。

大家可以实验下,在iPad Retina下导出静态库,在其他工程使用的时候,如果用iPad Retina跑就没有错误。如果选择其他设备就会提示找不到文件。

兼容全部设备解决方法:改下静态库的兼容属性。Target: -> Build Settings ->  Architectures -> Build Active Architecture Only 全改成NO;

Build Active Architecture Only

这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本,所以会报错编译不到文件,出错("_OBJC_CLASS_$_xxxxxx", referenced from:)

而设置为no时,会编译所有的版本,这样就解决编译出错的问题了。

这个是设备对应的architecture:

armv6:iPhone 2G/3G,iPod 1G/2G

armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G

armv7s:iPhone5, iPod5

arm64:iPhone5s

编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。

真机版和模拟器版的库合并解决方法:在framework文件夹下,你会看到一个白板文件,这个文件名和的的framework静态库名相同,只是没有后缀名。 这个文件在被引入到其他工程时候是看不见的。只有在Show In Finder下能看到。

打开终端,输入命令:中文换成你的真实目录。

lipo -create “……真机/目录/那个白板文件“ "……/模拟器/目录/那个白板文件" -output “…..另保存的/目录/文件”

合并好的新文件,覆盖掉原来的framework中的文件即可。这个framework就会支持所有设备和真机、模拟器全部版本。

其实这个方法就是用*.a文件的合并方法。在framework一样有效。framework中的白板文件就好像*.a文件一样。

9、关于xib的引用。同样根上边创建framework的方法一样,只是设置不同。我加了一个名字为:Resource.bundle静态资源文件。

这个样子


Target:并选择 Build Settings ->  Architectures -> Base SDK  改为Latest iOS(ios 8.1)

Target:在 Deployment 下,

Target:将 “Mac OS X Deployment Target”改为”Compiler Default”,

Target:将 “Targeted Device Family”改”iPhone/iPad”,

Target:将 “iOS Deployment Target”,改为 “iOS 7.0”:

9.1、在MyViewController.m文件中编写下。别忘了在*.h里写上接口。


9.2、然后就是给新加的资源文件拖拽下。


为了方便查看,我把MyViewController.xib背景涂成了蓝色,加了个红按钮。直接:command+R。一切运行正常。


9.3、然后把这两个文件都复制出来。


放到其他工程里,运行。是不是很简单。


10、加个图片。怎么加不解释来。先加一个不用管理器管理的图片。

工程command+R。。一切正常。


10.1、其他工程引用静态库,再跑。正常。嘿嘿,是不是多了个图片文件。


10.2、提高难度,我们在Images.xcassets图片管理器里加图片。我加了个矩阵图片,并设置了矩阵属性。


在xib里加个按钮。全设备匹配按钮。我没有写一行代码,只是在xib里拉个按钮。然后设置了下背景。系统自动识别图片。关于这个大家可以度娘下。


不管三七二十一,直接把Images.xcassets拉到资源库。


工程跑,OK。没问题。


引入静态库。OK。没问题。有没有发现。多了一个不明的文件:Assets.car。这个就是Images.xcassets管理,里边所有的图片都被封装了,也就是说被Images.xcassets管理的图片竟然也被加密保护了起来。疯狂吧。狂叫吧。呵呵,“码农”一族们。快转变思维吧,不然很快被Apple淘汰了。



补个图片。关于制作静态库兼容多版本的设置。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容