iOS开发>学无止境 - 全面了解 iOS 静态库开发

简介

在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟、百度地图等第三方的sdk)

静态库和动态库的存在形式

  • 静态库:.a 和 .framework
  • 动态库:.dylib 和 .framework

静态库和动态库的区别

  • 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝
  • 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统只加载一次,多个程序共用,节省内存

注意:项目中如果使用了动态库,会苹果拒接

静态库文件的版本(4种)

  • 真机-Debug版本
  • 真机-Release版本
  • 模拟器-Debug版本
  • 模拟器-Release版本

Debug(调试)版本

  1. 含完整的符号信息,以方便调试
  2. 不会对代码进行优化

Release(发布)版本

  1. 不会包含完整的符号信息
  2. 的执行代码是进行过优化的
  3. 的大小会比Debug版本的略小
  4. 在执行速度方面,Release版本会更快些(但不意味着会有显著的提升)

所以我们一般开发中都打包Release(发布)版本,提供外界

设备的CPU架构简介(补充知识)

模拟器:

  • 4s~5 : i386
  • 5s~6plus : x86_64

真机:

  • 3gs~4s : armv7
  • 5~5c : armv7s (静态库只要支持了armv7,就可以跑在armv7s的架构上)
  • 5s~6plus : arm64

制作静态库 - Debug版

1.新建项目

2.添加静态库并命名

3.需要打包到进静态库的代码,放在这个文件夹内

4.重新创建测试类(HSCalculate),提供外界计算两个数和的方法

HSCalculate.h

@interface HSCalculate : NSObject

+ (NSInteger)sumNum1:(NSInteger)num1 num2:(NSInteger)num2;

@end

HSCalculate.m

#import "HSCalculate.h"

@implementation HSCalculate

+ (NSInteger)sumWithNum1:(NSInteger)num1 num2:(NSInteger)num2

{

return num1 + num2;

}

@end

5.需要暴露给外界的文件(接口)

6.打包支持模拟器和真机的静态库(分别选择真机和模拟器运行,就会生成对应的静态库)

7.查看打包好的静态库

两个文件夹,里面的.a文件就是打包好的静态库

  • Debug-iphoneos : 真机
  • Debug-iphonesimulator:模拟器

可用下面命令查看静态库支持的cpu架构(可查看上面描述的cpu架构类型)

lipo -info xxx.a

分别查看打包好的模拟器与真机的静态库所支持的cpu架构

你会发现模拟器的静态库少了4s~5 : i386架构

原因:

下面Debug:Yes表示只编译选中模拟器对应的架构,No则为编译所有模拟器支持的cup架构(Debug的Yes状态改为No即可)

修改完后,重新编译:

8.在本项目对该静态库进行调试,ViewController.m导入HSCalculate.h,测试运行,你会发现报错了

#import "ViewController.h"

#import "HSCalculate.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

NSInteger result = [HSCalculate sumWithNum1:23 num2:25];

NSLog(@"result: %d", result);

}

@end

报错:

原因:

需要导入静态库(编译即可运行成功)

9.同时支持真机与模拟器的静态库(需要合并)

真机和模拟器的静态库,是不一样的,不能同时适用在真机和模拟器上,但要满足这要求的话,要对编译好的两个静态库进行合并

合并好坏:

  • 好:开发过程中既可以在真机上调试,也可以在模拟器上调试
  • 坏:如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的

合并产生新的静态库:

lipo -create Debug-iphoneos/xxx.a Debug-iphonesimulator/xxx.a -output xxx.a

10.把合并好的静态库和外界访问的文件拉入到新工程,即可使用(inc文件自己建立的)

新建工程测试:

制作静态库 - Release版

跟Debug版步骤一样,只不过在编译时,改下面的选项即可

制作静态库 - .framework版

步骤跟制作.a静态库,基本一致,但要注意的下面几点:

1.选择framework

2.编译时,默认制作成动态库,要在下面选择

3.合并静态库时,是选.framework文件里的libstaticlib文件

合并:

删除libstaticlib,libCalculateTool拉入libstaticlib.framework项目中,libstaticlib.framework静态库制作完成

时间: 2024-10-08 01:53:00

iOS开发>学无止境 - 全面了解 iOS 静态库开发的相关文章

iOS开发——装逼技术精选&全面了解 iOS 静态库开发

全面了解 iOS 静态库开发 简介 在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,不想被外界知道,所以会把核心代码打包成静态库,只暴露头文件给程序员使用(比如:友盟.百度地图等第三方的sdk) 静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 静态库和动态库的区别 静态库:链接时,静态库会被完整地复制到可执行文件中,被多次使用就有多份冗余拷贝 动态库:链接时不复制,程序运行时由系统动态加载到内存,供程序调用,系统

android开发 NDK 编译和使用静态库、动态库

在eclipse工程目录下建立一个jni的文件夹. 在jni文件夹中建立Android.mk和Application.mk文件. Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(

iOS开发,创建自己的静态库

为什么要创建自己的静态库?嗯,是为了装13.好,作为一名优秀的程序猿,我是不会放过任何一个装13的技能的,今天就再分享一个技能--自己生成静态库. 不开玩笑了,下边正式开始. 一.用Xcode新建一个工程,如下: 看清楚啦,一定要选中"static library"这个. 二.给你的静态库命名,这一环节我就略过了.下图是我创建出来的工程 2.1.在头文件中,将你想公开出去的方法名写在这里,如图(示例方法是输入一个千分位表示的金额字符串,转化为整型数) 2.2.将实现部分写在.m文件中.

iOS——为Xcode编译POCO C++静态库

一.POCO C++ library简介 POCO C++ library是一个C++编写的跨平台库,主要实现网络连接.数据库管理以及服务器,适用于跨平台.嵌入式. 二.为Xcode编译POCO C++ 静态库 1.确定需要编译的版本 要想使POCO C++在iOS的各个平台上运行,那么需要针对各个平台的不同架构进行编译,因此我们需要了解iOS各个平台的架构,主要分为iPhone模拟器.iPhone真机以及运行Xcode电脑本身的架构. (1)iPhone模拟器 目前iPhone模拟器架构分为两

ios打包支持所有指令集的静态库

1,第一步图片说明: 2,第二步图片说明: 3,第三步,编译,然后生成的.a文件就包含了这几种指令集.前提是工程必须是静态库的工程:

android开发 NDK 编译和使用静态库、动态库 (转)

在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(使用

Cocos开发中Visual Studio下libcurl库开发环境设置

我们介绍一下win32中Visual Studio下libcurl库开发环境设置.Cocos2d-x引擎其实已经带有为Win32下访问libcurl库,Cocos2d-x 3.x中libcurl库文件所在位置是<工程目录>\cocos2d\external\curl\prebuilt\win32目录中,头文件在<工程目录>\cocos2d\external\curl\include\win32目录中.首先,我们需要配置头文件搜索路径,选中HelloCpp工程,打开菜单"项

iOS开发&gt;学无止境 - 6个iOS图片文本设计的小技巧

英文:TOPE 作者:星夜暮晨 网址:http://www.jianshu.com/p/88263196fdf0 设计师们似乎拥有着我们这些开发者所没有的“魔力”,他们知道如何让一个应用的界面看起来非常得舒适,以至于有时让我们有了迫不及待将其复现的冲动. 然而,几天过去了,我们仍然还停留在设计稿的第一个界面,写下大段大段的代码,可是界面却不是我们想要的那个样子,这无疑是非常让人恼火的一件事情. 好消息是设计师们的“魔力”并不是我们想象中的那么神奇,有一些关于设计的小技巧.只要掌握了它们,我们就能

IOS使用纯C语言创建静态库

1.首先是准备好要编译的.h文件和.c文件. 2.在Xcode中建立library的工程. 3.将.h和.c文件拷贝进入项目中,并删除项目的原本代码. 4.编译项目,在product目录下会得到.a文件. 5.使用:新建一个项目,添加刚才.h文件. 然后在这个工程的Build Phases的Link Binary With Library里面添加我们刚才拷贝出来的那个.a文件. 版权声明:本文为博主原创文章,转载请注明来源