iOS实用技能扩展-静态库的制作与简单使用

前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用。

1.关于库的简介:

  库可以分为2种类型

  1. 开源库

    1. 公开源代码,能看到具体实现
    2. 比如SDWebImage、AFNetworking
  2. 闭源库
    1. 不公开源代码,是经过编译后的二进制文件,看不到具体实现
    2. 主要分为:静态库、动态库

2.静态库的特点:.a+.h;

为什么制作闭源库

  1. 国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用 例如:百度地图,友盟,JPush等

    1. 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,也会提供静态库给程序员使用

      1. 静态库与动态库
      2. 静态库和动态库的存在形式
        1. 静态库:.a 和 .framework
        2. 动态库:.dylib(Xcode7.0之前) .tbd[Xcode7以后] 和 .framework
    2. 静态库和动态库在使用上的区别
      1. 静态库:链接时,静态库会被完整地复制到可执行文件中,被多个应用使用就有多份冗余拷贝(左图所示)
      2. 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存(下图所示)

         3.(可忽略,因为目前比较少使用xcode6了)需要注意的是:项目中如果使用了自制的动态库,在Xcode6之前不能被上传到AppStore,Xcode6以后可以上传AppStore。



3.静态库的简单制作

1>  新建Tools项目


2>  创建一个类方法,实现一个简单的加法

  • Tools.h文件
  + (double) sumNum1:(double) x andNum2:(double) y;
  • Tools.m文件
    + (double)sumNum1:(double)x andNum2:(double)y
     {
         return  x + y;
     }

3>  编译
  #   注意,在编译静态库时,需要编译两个版本 -> 真机(arm) | 模拟器(i386)

    • 查看文件导航栏->Product->libTools.a文件,如果为红色表示没有生成.a文件,如果是黑色表示生成了.a文件
    • 仅仅编译模拟器不会生成.a,需要在真机下编译才能生成.a文件
    • 选中.a文件->右击->showFinder 如图,生成两个.a文件,一个用于真机,一个用于模拟器

4>  测试生成的静态库

新建ToolsTest的iOS项目

  1. 将编译生成的模拟器的.a + .h拖到项目中使用
  2. 在ViewController.m导入Tools.h文件
  3. 使用调用类方法 + (double) sumNum1:(double) x andNum2:(double) y;
   - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
   double rs = [Tools sumNum1:10 andNum2:20];
   NSLog(@"%lf",rs);
}

输出结果:30



4.静态库中的资源包的使用

问题:有些第三方库会使用到一些图片素材,例如公司的logo等。但是由于Xcode默认在编译时会把所有的素材文件导入到mainBundle中,为了避免与使用静态库的程序冲突。在静态库中如果要使用图片素材,会利用bundle的手段.
步骤:
1>  建立bundle,并且向其中添加图片
2>  创建一个类方法,返回图片
3>  编译
4>  调用方如果需要使用,需要导入 .h + .a + XXX.bundle



5.静态库的合并(因为在模拟器与真机的运行架构不一样,所以两个平台不能通用)
把模拟器调整到iphone5,编译报错


# 检测.a的类型
$ lipo -info libCZTools.a
# 合并.a
lipo -create Debug-iphoneos/libTools.a Debug-iphonesimulator/libTools.a -output libTools.a

如何让生成.a文件支持i386?

时间: 2024-10-11 19:59:39

iOS实用技能扩展-静态库的制作与简单使用的相关文章

【iOS开发-115】静态库的制作以及第三方框架iOS Universal Framework,DEBUG和RELEASE

(1)概念介绍 --我们平时在项目中用的最多的就是开源的第三方库,这种库是开源的,我们不仅能用,还能查看源代码甚至可以修改源代码. --与开源库对应的就是闭源,闭源库分为动态库和静态库.动态库就是.dylib或者.framework结尾的文件.就是苹果官方提供给我们用的那些库.开发者不能在项目中使用自制的动态库,否则无法上传到APPStore. --所以,对于闭源库,我们主要讨论的是静态库.静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)

iOS实用技能扩展-集成支付宝

前奏 现在随着移动开发的快速发展,移动支付变得越来越流行与必不可少.最近做了一个关于支付宝支付功能的应用,在使用支付宝的过程中,遇到一些不必要的弯路,因此,写了这篇文章总结一下关于iOS中如何开发使用支付宝.iOS中支付宝的集成相对于微信支付集成和银联的集成会比较复杂,有一些需要注意的地方列举出来,希望对大家有益. 签约(已完成的可略过此步) 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller) 参照支付宝开放平台的操作即可:https://doc.open.a

iOS开发笔记--静态库的制作与使用

一.iOS项目中库的使用 1.开源库 * 公开源代码,能看到具体实现 *比如SDWebImage.AFNetworking 2.闭源库 * 不公开源代码,是经过编译后的二进制文件,看不到具体实现 * 主要分为:静态库.动态库(注意自己制作的动态库不能上传到appStore) 二.本文首先讲的的是静态库的制作以及使用 1.新建静态库项目 新建静态库项目选择cocoa Touch Static Library 然后编写核心代码 2.分别在真机和模拟器下编译生成对应环境的静态库 (注意真机文件夹下得静

iOS开发拓展篇—静态库

iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking (2)闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 二.静态库和动态库 1.静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 2.静态库和动

静态库的制作详解

静态库的制作 1   静态库的存在形式: .a 和.framework 动态库的存在形式:.dylib 和.framework 2   静态库和动态库的区别: 静态库在链接的时,会被完整的复制到可执行文件中,被使用多次,就由多份拷贝. 动态库则不会被复制,只有一份,程序运行时,动态加载到内存,系统只加载一次,多个程序共用 但是:程序中如果使用自己的动态库是不允许上架的. 3   使用静态库,可以保护核心代码,将MRC的项目打包成静态库,就可以在ARC环境下直接使用. 4   静态库的特点: .a

静态库的制作与使用

静态链接库与动态链接库都是共享代码的方式.如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的.ExE文件中了.但是若使用动态链接库,该动态链接库则不必被包含在最终的EXE文件中,EXE文件执行时可以“动态”的引用和卸载这个与EXE独立的动态链接库文件.静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他动态链接库或者静态库,而在动态链接库中还可以包含其他的动态或静态链接库.本次就针对静态库的制作和使用进行讲解. 首先静态库有两种,一种是对函数产生的静态库,

Linux中的静态库的制作和使用

一.整体大纲 二.静态库的制作 1)命名规则        lib + 库的名字 + .a        例如:libmytest.a2)制作步骤:        1). 生成对应的.o文件 -- .c --> .o   -c        2). 将生成的.o文件打包  ar rcs + 静态库的名字(libMytest.a) + 生成的所有的.o3)发布和使用静态库:        1). 发布静态库        2). 头文件4)优缺点: 三.静态库的打包 详细制作示例可看博客:http

ios 静态库的制作

废话不多说直接上操作 原理在后面 在平时开发中,可能几个公司合作一个项目,但又不想让另一个公司看到自己的源代码,怎么办.这时我们就可以制作自己的静态库. 如何制作.a 新建项目:选择cocoa touch static library 把你需要制作静态库的源码添加到工程中 选择你要公开的.h 文件 点击build Phases ->左边那个"+" ->new headers phases后将你要公开的.h 文件拖入到public 中 编辑edit scheme,选择是rel

iOS中静态库的制作——使用创建静态库项目的方式创建静态库

最近公司要求写SDK,我就想把它弄成静态库的方式 我的理解:所谓静态库,就是把所有的.m文件打包成一个.a文件,这样使分享代码的时候更加简洁,重要的是别人也不会看到你.m文件中的傻B代码了 环境是Xcode6.2 iOS8.2 首先,创建一个静态库项目 删掉Xcode自动创建的同名文件,然后导入你需要做成静态库的文件 在这里我导入一个简单的输出字符串的文件 然后选择运行的设备进行编译,这里我有不理解的地方:在Xcode6.2中,当我首先选择模拟器,然后编译文件的时候,.a文件依然是红色的,说明静