zoukankan      html  css  js  c++  java
  • Framework静态库制作方法

    1、创建一个工程,或者在原有的工程上进行。不在列举。

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

    2.1、选择OS X 的Bundle。因为Xcode6.1中iOS里没有Bundle。

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

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

    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”:
    2016.2.29更新 :
    以上的设置方法对于Xcode 7+版本已经不适合。Dead Code Stripping、Link with Standard Libraries无需在设置成NO。Mac-O Type建议设置成静态库(Static Library),如果必须使用动态库(Dynamic Library),建议查阅Apple 开发文档。
    另外我发现一篇介绍IOS库的文章,非常好,很实用,我粘贴了过来,有兴趣朋友可以看下。
    http://www.tuicool.com/articles/VFFjmq6

    2.6、Target:Packaging 中,
    将 “Wrapper Extention” 改为“framework”:

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

    点开菜单,可以看到所有可管理的工程、静态库。
    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的导入,以便程序直接建立关系。

    在这之前 需把库文件放进工程中

    4、给静态库添加文件、xib、image....
    直接介绍其属性:
    1:不知道。没用过。等高手补充
    2:程序文件放的地方:(*.m 、*.mm等),需要压缩保护的代码,只要放在这里的文件,都将被静态库压缩。使用静态库的一方是无法看到源代码的。
    3:库文件放的地方,比如把其他的静态库、动态库压缩到这里。
    4:资源文件放的地方,图片、音视频、xib、Images.xcassets、甚至是Main.storyboard(故事板);只要放到这里,都将被压缩,使用方是无法编译或者看到源代的。
    5:对外接口。主要就是这里,展开后,会看到第一行(Public),不用介绍了吧,看英文应该就能猜到,何况这个单词是程序中常用的单词,公用吗!,只要是放到这里的文件,都将会暴露给使用方,建议把所有的*.h文件放到这里。

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

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


      
     

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

    7、选中模拟器或ios设备,分别command+B。

    会分别生成模拟器和真机使用的framework

    8、关于第三方库找不到文件的提示错误。简单补充下吧,别走弯路。
    首先你要确定这个错误产生的原因:大致分两种,
    一:你做的项目缺失文件,百度下,加入就解决了;
    二:你引入的第三方框架发生找不到文件错误:这样的结果分两种:
    二、一:开发第三方框架的程序人员没有做好自己的框架。尤其是在生成框架的时候,没有设置好自身属性。导致使用者用的时候出现找不到文件错误,最后迫使使用者不得不去改自己的工程配置。
    二、二:你在引入第三方框架的时候,少引用了文件。

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

    真机版和模拟器版的库合并解决方法在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、然后就是给新加的资源文件拖拽下。

    command+B 之后将文件复制出来 就可以使用了。

  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/zhangz-1511/p/5403761.html
Copyright © 2011-2022 走看看