新建 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 按钮时, 效果如下图所示:

张志敏所有文章遵循创作共用版权协议,要求署名、非商业 、保持一致。在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处。

本博客已经迁移到 GitHub , 围观地址: http://beginor.github.io/

本文转自张志敏博客园博客,原文链接:http://www.cnblogs.com/beginor/archive/2012/04/20/2459244.html,如需转载请自行联系原作者

iOS 静态类库项目的建立与使用相关推荐

  1. iOS - iOS ,Mac 开源项目以及库,知识点

    https://github.com/trending 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与Toast 对话框 其他UI 动画 ...

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

    自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常 ...

  3. ios 静态库合成_iOS生成静态库方法-iOS集成静态库-iOS合并静态库

    在iOS的开发过程中,我们常常用到第三方的库.尤其是QQ.百度地图.广告等. 那么,如何制作自己的库文件呢? 如果,将自己写的功能类编译成库文件,分发给其他人来使用呢? 静态库的优点 编译静态库的好处 ...

  4. iOS静态库和动态库

    iOS静态库和动态库 静态库和动态库是什么,以及它们的区别,详细介绍可参考博文:iOS里的动态库和静态库,里面讲的很详细. 静态库动态库的区别 内容来源自:iOS动态库与静态库 静态库和动态库是相对编 ...

  5. Android和iOS静态代码扫描工具

    Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android,检查范围广 否 是 ...

  6. WPF 设置类库项目为启动项,设置窗体跟随。

    原文:WPF 设置类库项目为启动项,设置窗体跟随. 1.添加用于启动的类Program.cs,需要一个静态的Main函数入口. using System; using System.Windows; ...

  7. ios 静态库冲突的解决办法

    参考:http://www.cnblogs.com/machao/p/5288460.html ios 静态库冲突的解决办法 最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的 ...

  8. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  9. IOS静态库生成及测试

    目录: 1 生成静态库(.a文件) 2 测试静态库文件 1 生成静态库文件: 1.1创建静态库项目static_library 1.2  添加方法: - (int)getMax:(int)a b:(i ...

最新文章

  1. c++中把一个函数中的语句复制到另一个语句中报错_从底层看前端(十一)—— JavaScript语法:脚本,模块和函数体。...
  2. j90度度复数运算_看得懂的复数
  3. TensorFlow 笔记1--基本用法
  4. 12 | 套路篇:CPU 性能优化的几个思路
  5. 牛客网_PAT乙级_1017打印沙漏(20)
  6. SQL Server里PIVOT运算符的”红颜祸水“
  7. 315 后,等待失业的程序员
  8. 572.另一个树的子树(力扣leetcode) 博主可答疑该问题
  9. 计算机0表示负数,计算机原码反码补码_0
  10. 新浪股票数据接口获取
  11. 华为以“平台应变”之道角逐数字化转型“深水区”
  12. SAP Hana 数据库游标使用方法示例
  13. linux 显示bin 文件格式,bin文件扩展名,bin文件怎么打开?
  14. BZOJ 1615: [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机 bfs
  15. v-model的底层原理
  16. 《Adobe Fireworks CS6中文版经典教程》——导读
  17. 国内外MCU厂商及产品线最全盘点
  18. 寻一款带有记事本+闹钟的桌面便签小软
  19. 如何设置 穿山甲广告GroMore中banner的广告位置
  20. mysql 修改主键约束_MySQL---约束及修改数据表

热门文章

  1. Android Stability test occured SWT restart issue
  2. JEECG微云快速开发平台
  3. ASP.NET MVC and jqGrid 学习笔记 2-如何从本地获得数据
  4. 《Android/OPhone 开发完全讲义》样章和目录下载
  5. sql语句查询性能的优化思想(个人理解)
  6. 关于ie,火狐,谷歌浏览器滚动条的隐藏以及自定义样式
  7. 构建布局良好的windows程序
  8. 云计算、大数据、物联网等IT技术发展趋势
  9. caffe中的学习率的衰减机制
  10. 【原创+整理】简述何为调用约定,函数导出名以及extern C