本篇来自转载,原创链接为:http://my.oschina.net/leejan97/blog/284193

摘要: 静态库文件可以有效的将功能封装和细节隐藏  ios 静态库 static library

在项目开发的过程中,经常使用静态库文件。例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节。

简介:

库是一些没有main函数的程序代码集合。除了静态库,还有动态链接库,他们之间的区别是:静态库可以编译到我们的执行代码中,应用程序可以在没有静态库的环境中运行;动态库不能编译到我们的执行代码中,应用程序必须在有链接库文件的环境下运行。

创建静态库的步骤如下所示,

1、创建Static Library,新建->Project,选择Static Library,如图,

点击Next,我将Static Library项目名称命名为TimeDate,因为这是我用于处理时间和日期的静态库工程,

2、静态库文件功能的实现细节

创建了静态库Static Library项目之后,Xcode自动为我们创建了TimeDate.h/.m文件,如下图所示,

这时候我们需要在这里面填充一些细节,这里,我想要实现的功能就是将时间戳NSTimeInterval转换成NSString的功能,那么代码的细节如下所示,

TimeDate.h文件

#import "TimeDate.h"
@interface TimeDate : NSObject
- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval;
@end TimeDate.m文件
@implementation TimeDate
- (NSString *)changeToStandardTime:(NSTimeInterval)timeInterval
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *time = [dateFormatter stringFromDate:[NSDate dateWithTimeIntervalSince1970:timeInterval]];
return time;
}
@end

上面的代码就是将NSTimeInterval转换成NSString,当然这样肯定有考虑不全面的地方,这不是本篇博客的中心内容,读者可以忽略;如果有好的建议请告诉我。

3、编译项目,生成对应的静态库.a文件

首先我们先来看一下编译(Command+B)之前的项目细节,如下图,

这里我们有两个细节需要注意的,①表明现在是选择的是名为pythonhater的真机Device;②libTimeDate.a文件是红色状态,表明这还不是一个实际存在的文件,我们不能在物理磁盘中找到它。只有在编译以后它才是一个实实在在的文件。

这时我们编译项目(Command+B),文件结构如下图,

这时候libTimeDate.a文件变为黑色状态了,表明编译过后它是一个真是存在于物理磁盘的文件,我们右键选择Show in Finder,如下图,出现了它的物理位置,

如图,libTimeDate.a文件隐藏的很深,我们只要知道它存在就好。现在有个问题,我选择的是pythonhater真机Device进行编译的,所以这个libTimeDate.a只能针对iOS真机Device进行使用,而不能在模拟器Simulator上面使用,为了解决这个问题,只要选择模拟器Simulator进行编译,就可以生成对应的模拟器运行需要的libTimeDate.a文件,如下图操作所示,

选择iPhone模拟器编译,然后右键Show in Finder,

上面的Debug-iPhones里面包含iPhone真机所需要的libTimeDate.a静态库文件,而下面的Debug-iPhoneSimulator里面包含的时iPhone模拟器所需要的libTimeDate.a静态库文件。

4、合并静态库

针对真机和模拟器的静态库文件只能在一个平台下面使用,好在我们可以将真机和模拟器上面的静态库文件合并成一个在真机和模拟器都可以使用的静态库文件,通过在终端输入命令即可完成该目的,

完整的命令就是:

lipo -create /Users/mini3/Library/Developer/Xcode/DerivedData/TimeDate-cthodjhjpplctjhfdbhmdcuhwnva/Build/Products/Debug-iphoneos/libTimeDate.a /Users/mini3/Library/Developer/Xcode/DerivedData/TimeDate-cthodjhjpplctjhfdbhmdcuhwnva/Build/Products/Debug-iphonesimulator/libTimeDate.a -output /Users/mini3/Desktop/libTimeDate.a

不过这个是相对自己的路径,读者可以直接将文件拖到终端即可识别完整的路径,如下图所示的方法,

最后在补充上- output /Users/用户名/Desktop/libTimeDate.a,这样就在桌面生成了一个合并过后的libTimeDate.a静态库文件,它可以再真机和模拟器上面同时使用。

5、使用静态库文件,

这时候我们就可以使用自己创建、编译生成的静态库文件了,将TimeDate.h文件和桌面上面的libTimeDate.a文件拖到想要使用的项目中,如下图的目录结构,

为了方便,我直接在AppDelegate中使用创建的静态库文件了,代码如下,

AppDelegate.m文件

#import "AppDelegate.h"
//导入头文件
#import "TimeDate.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
TimeDate *timeDate = [[TimeDate alloc] init];
NSTimeInterval timeInterval = ;
NSString *time = [timeDate changeToStandardTime:timeInterval];
NSLog(@"time is %@",time);
return YES;
}

输出的内容是,

2014-06-25 20:56:15.105 StaticLibrarySample[2517:390790] time is 1973-11-30 05:33:18

这时不管是真机还是模拟器都可以编译通过,正常运行。而使用者只能通过头文件知道我们提供的借口,却不知道实现文件中实现的细节,这有效地隐藏了自己的核心技术和机密内容。

总结:我们开发的就是iOS真机程序,所以可以选择不合并静态库,直接使用真机编译生成的静态库文件进行开发,没有必要为了兼容模拟器而合并静态库文件。当然,如果有强迫症或者公司设备不够,那么还是合并静态库文件吧。

iOS:创建静态库及其使用的更多相关文章

  1. iOS 创建静态库文件时去掉当中的Symbols

    在project中创建静态库文件时.默认会将一些Symbols加到静态库文件里.这样做有两个缺点: 1.假设引用静态库文件的project中发生了bug.就会直接跳转到静态库的源代码. 也许有人问:静 ...

  2. iOS: 创建静态库,实现自己的API私有使用

    一.介绍 在开发中经常使用到第三方的静态框架,格式基本上就是.framework和.a格式的.使用时,会发现我们只能使用无法修改,这就是静态框架的一个好处,私有性.内部实现的代码只有公开者本人知晓,对 ...

  3. 在iOS中创建静态库

    如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315).  =========================================== ...

  4. iOS xcode创建静态库封装自己的SDK及使用

    https://www.cnblogs.com/JustForHappy/p/5773039.html 一,静态库和动态库的区别在这里就不说了,个人感觉如果是自己封装提供别人下载的话应该是静态库比较方 ...

  5. ios中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)

    创建静态库可能出于以下几个理由: 1.你想将工具类代码或者第三方插件快捷的分享给其他人而无需拷贝大量文件.2.你想让一些通用代码处于自己的掌控之下,以便于修复和升级.3.你想将库共享给其他人,但不想让 ...

  6. iOS 元件组件-创建静态库static library

    概述 在项目开发的过程中,经常使用静态库文件.例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节. 库是一些没有mai ...

  7. Xcode 创建静态库和动态库

    1.linux中静态库和动态库区别: 库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 静态库:这类库的名字一般是libxxx.a:利用静态函数库编译成的文件 ...

  8. xcode6制作IOS .a静态库小记

    xcode6制作IOS .a静态库小记 创建iOS静态库 简单写个打印的代码 编码完成之后,直接Run就能成功生成.a文件了,选择 xCode->Window->Organizer-> ...

  9. iOS基础 - 静态库

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

随机推荐

  1. mongodb的集合操作

    MongoDB 创建集合 1.手动创建: 语法格式: db.createCollection(name, options) 参数说明: name: 要创建的集合名称 options: 可选参数, 指定 ...

  2. 多表查询与pymysql

    一.子查询 #1:子查询是将一个查询语句嵌套在另一个查询语句中. #2:内层查询语句的查询结果,可以为外层查询语句提供查询条件. #3:子查询中可以包含:IN.NOT IN.ANY.ALL.EXIST ...

  3. Ring0层创建事件,Ring3层接收

    在学习驱动过程中,一个很重要的内容就是Ring3层与Ring0层的通信,方法有很多种,互斥体,信号量,文件等等,用的比较普遍的,还是事件.所以在学习的过程中,做了一个简单的Demo,主要是体会一下方法 ...

  4. python面向对象进阶(上)

    一 .isinstance(obj,cls)和issubclass(sub,super) (1)isinstance(obj,cls)检查对象obj是否是类 cls 的对象,返回True和Flase ...

  5. XML解析代码

    import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.LinkedLi ...

  6. 可参考的js代码

    function addcompanyFinalBalance(){ var currentDate = new Date(); var currentYear = date.getFullYear( ...

  7. django一对多、多对多模型、自关联的建立

    # 原创,转载请留言联系 一对多模型 一对多的关系,例如员工跟部门.一个部门有多个员工.那么在django怎么建立这种表关系呢? 其实就是利用外键,在多的一方,字段指定外键即可.例如员工和部门,员工是 ...

  8. 厦门大学XMUNET+ ubuntu连接方法

    编辑连接 输入用户名和密码就好了 ubuntu16.04

  9. 理解Java中【包】的概念

    Java中用package关键字定义一个包,下面通过几个实验,理解Java中的包的概念和作用. 实验1:先看一个无包的情形 在G盘下新建一个Test.java,如图1: 写下面这些代码 <spa ...

  10. Centos7源码编译安装tengine1.5.1

    安装依赖包 yum install pcre pcre-devel openssl openssl-devel gcc make zlib-devel wget -y 下载和创建用户 mkdir /t ...