iOS 静态类库项目的建立与使用

iOS 静态类库项目的建立与使用

新建 Xcode workspace

打开 Xcode , 选择 File -> New -> Workspace , 将 Workspace 命名为 Test.xcworkspace , 并选择合适的目录。

新建 Static Library 项目

选择 File -> New -> Project , 项目模板选择 Cocoa Touch Static Library , 项目名称命名为 MyLib.xcodeproj , 注意选中 Use Automatic Reference Counting 。

Xcode 会在项目中自动生成 MyLib.h 和 MyLib.m 文件, 单击 MyLib.h 文件, 添加下面的两个方法定义:


1

2

- (NSInteger) add:(NSInteger)a and:(NSInteger)b;

+ (NSString*) connect:(NSString*)str1 and:(NSString*)str2;

再打开 MyLib.m 文件, 添加刚刚定义两个文件的实现:

- (NSInteger) add:(NSInteger)a and:(NSInteger)b {
   return a + b;
}

+ (NSString*) connect:(NSString *)str1 and:(NSString *)str2 {
   return [NSString stringWithFormat:@"%@ %@", str1, str2];
}

现在, 最终的文件看起来是这样的:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

//

// MyLib.h

// MyLib

//

// Created by gdeic on 4/16/12.

// Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//

#import <foundation foundation.h="">

@interface MyLib : NSObject

- (NSInteger) add:(NSInteger)a and:(NSInteger)b;

+ (NSString*) connect:(NSString*)str1 and:(NSString*)str2;

@end

//

// MyLib.m

// MyLib

//

// Created by gdeic on 4/16/12.

// Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//

#import "MyLib.h"

@implementation MyLib

- (NSInteger) add:(NSInteger)a and:(NSInteger)b {

   return a + b;

}

+ (NSString*) connect:(NSString *)str1 and:(NSString *)str2 {

   return [NSString stringWithFormat:@"%@ %@", str1, str2];

}

@end</foundation>

选中 MyLib 项目, 在中间的编辑器窗口中选择项目的 Target , 选择 Build Phases 标签, 展开 Copy Headers 分组, 下面有三个子分组, 分别是 Public 、 Project 与 Private , 将 MyLib.h 拖拽到 Public 分组即可。

保存所有文件, 选择 Product -> Build , 进行编译, 生成 libMyLib.a 文件, 同时也会将 MyLib.h 文件复制到输出目录。

使用静态类库项目

选择 File -> New -> Project , 项目模板选择 iOS -> Application -> Single View Application , 项目名称命名为 MyApp , 注意勾选 Use Storyboards 和 Use Automatic Reference Counting 。

建好项目之后, 项目窗口如下如所示:

将 MyLib 项目拖拽到 MyApp 项目的 Frameworks 文件夹, 在弹出的对话框中选择 Create groups for any added folders , 然后点击 Finish 按钮。

选中 MyApp 项目, 在选择项目的目标 (Target) , 选中 Summary 标签页下找到 Linked Frameworks and Library 分组选项, 如下图:

点击下面的加号按钮, 将工作区的 libMyLib.a 添加进去。

接下来添加头文件搜索目录, 选中 Targets 上面的 Project , 选择 Build Settings 标签页,在搜索框内输入 header search 进行过滤, 找到 Header Search Paths , 添加一行, 输入 ../MyLib , 并选中递归复选框。

现在要先验证一下对 MyLib 的引用是否正确, 打开 MyApp 项目的 ViewController.m , 添加对 MyLib.h 的引用, 如下图所示, 并编译 MyApp , 如果编译成功, 则表示引用正确。

打开 MainStoryboard.storyboard 文件, 在生成的 ViewController 上添加两个 UITextField 、 两个 UIButton 以及一个 UILabel, 如下图所示:

并添加相应的 outlet 和 action , ViewController.h 如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//

// ViewController.h

// MyApp

//

// Created by gdeic on 4/19/12.

// Copyright (c) 2012 __MyCompanyName__. All rights reserved.

//

#import <uikit uikit.h="">

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *textField1;

@property (weak, nonatomic) IBOutlet UITextField *textField2;

@property (weak, nonatomic) IBOutlet UILabel *resultLabel;

- (IBAction)addButtonClick:(id)sender;

- (IBAction)connectButtonClick:(id)sender;

@end</uikit>

打开 ViewController.m 文件, 实现 addButtonClick: 和 connectButtonClick: 方法, 在 addButtonClick: 方法中调用 MyLib 的实例方法 add:and: , 在 connectButtonClick: 方法中调用 MyLib 的静态方法 connect:and: , 如下所示:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

- (IBAction)addButtonClick:(id)sender {

   // 获取用户输入的两个数字

   NSInteger num1 = [self.textField1.text integerValue];

   NSInteger num2 = [self.textField2.text integerValue];

   // 初始化一个新的 MyLib 实例

   MyLib* myLib = [[MyLib alloc] init];

   // 调用实例方法相加

   NSInteger result = [myLib add:num1 and:num2];

   // 显示结果

   self.resultLabel.text = [NSString stringWithFormat:@"%d + %d = %d", num1, num2,result];

}

- (IBAction)connectButtonClick:(id)sender {

   // 获取用户输入的两个字符串

   NSString* str1 = self.textField1.text;

   NSString* str2 = self.textField2.text;

   // 调用 MyLib 的静态方法连两个字符串

   NSString* result = [MyLib connect:str1 and:str2];

   // 显示结果

   self.resultLabel.text = result;

}

点击添加按钮时, 效果如下图所示:

点击 Connect 按钮时, 效果如下图所示:

时间: 2024-07-29 09:30:29

iOS 静态类库项目的建立与使用的相关文章

iOS 静态类库 打包 C,C++文件及和OC混编

iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编 基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码: 因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用 如下示例: 一:静态库打包 C 代码

[IOS] 静态库项目之间的相互引用

公司有不同的SDK,SDK之间也是相互引用,很多为了省事直接打包静态库发布 这就需要 静态库 之间相互引用,被引用的项目 为 DestationKit ,项目为 SourceKit 在Xcode6.1 下直接将 DestationKit 项目拖到 SourceKit 的项目中即可,不要拖到项目 的文件中去,添加搜索路径,为了方便管理项目直接将DestationKit 项目放在SourceKit 的项目下,详情如图 拖项目: 文件件结构: 搜索路径设置: "${SRCROOT}/../Destat

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

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

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.

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

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

ios静态库的使用

ios静态库的使用 2014-03-11 22:24 3906人阅读 评论(0) 收藏 举报 ios的静态库文件是*.a,如果需要使用它,我今天学的简单的方法,可通过,简单说说,如果有一个A手机项目,一个B的静态库项目,A想使用B.a,按以下的步骤: 1.在A项目里面拖进B项目.在B的product下面会看见红色的B.a,表示还没有编译通过(在工程设置里添加上你需要导出的.m文件). 2.选择好需要编译的对象,B下的某模拟器或者是B下的真机上进行编译(模拟器上生成的静态库和真机上生成的不能混用)

C#实现的Redis缓存公共类库项目

Redis在当下的互联网项目当中的普及率我想都不用多说了,本文要介绍的這个项目是基于我对Redis理解程度的基础上写的一个公共类库项目,希望对各位童鞋有所帮助,也欢迎各位对我都内容提出更好的意见. 由于本文使用了自定义配置相关的只是,如有不了解的童鞋,可以先去了解一下這方面的知识然后再来看相应的代码,這样可能想过会更好,下面正式进入正题(初次写這个东西,语言组织不合理请大家谅解). 项目概览: 该项目主要分成两部分,配置和业务扩展两部分组成,具体项目结构如下: 自定义配置:建立配置项的目的主要是

iOS 静态库,动态库与 Framework

iOS 静态库,动态库与 Framework 静态库与动态库的区别 首先来看什么是库,库(Library)说白了就是一段编译好的二进制代码,加上头文件就可以供别人使用. 什么时候我们会用到库呢?一种情况是某些代码需要给别人使用,但是我们不希望别人看到源码,就需要以库的形式进行封装,只暴露出头文件.另外一种情况是,对于某些不会进行大的改动的代码,我们想减少编译的时间,就可以把它打包成库,因为库是已经编译好的二进制了,编译的时候只需要 Link 一下,不会浪费编译时间. 上面提到库在使用的时候需要

iOS 8:【转】封装iOS静态库注意事项

源地址:http://fann.im/blog/2014/01/12/ios-static-library/ 做一个 iOS 静态库需要注意的东西: namespace 冲突.静态库用了某第三方库,项目也用了同样的第三方库,在编译的时候就会有 duplicate symbol 错误,因为有两份同样的第三方库.解决办法就是把用到的第三方库加上自定义前缀,包括类名.delegate 协议.常量名,尤其需要注意 Category 的方法名要修改. 封装静态库的时候应尽量避免引入重量级第三方库,多自己进