1、创建一个空的App Project
启动Xcode
点击 File
-> New
-> Project
选择 Single View Application
取名为TestMainApp
建立成功后关闭项目留待下一步使用
2、创建一个Static Project
启动Xcode
点击 File
-> New
-> Project
选择 Cocoa Touch Static Library
取名为TestStaticLibrary
,放在跟刚才的TestMainApp
项目同一级目录下
3、创建一个WorkSpace关联刚才的两个项目
启动Xcode
点击 File
-> New
-> WorkSpace
取名为 TestWorkSpace
创建成功打开后在左侧空空的导航栏中点击右键选择 Add Files to "TestWorkSpace"
选项在打开的目录中选择刚刚创建的Project
文件添加到WorkSpace
,如图所示:同理添加Static Library
项目到WorkSpace
, 完成以后是这个样子的:
4、开始配置项目依赖关系
在TestStaticLibrary
项目的TestStaticLibrary.h
中添加一个方法
#import <Foundation/Foundation.h>
@interface TestStaticLibrary : NSObject
- (void)sayHello;
@end
对应的TestStaticLibrary.m
中实现方法体
#import "TestStaticLibrary.h"
@implementation TestStaticLibrary
- (void)sayHello
{
NSLog(@"Hello! form Static Library Project");
}
@end
下面开始生成静态库文件,选择要暴露给外部的头文件,选中TestStaticLibrary
项目的 Targets
TestStaticLibrary
在右侧的窗口中选择 Build Phases
点击左上角的加号选择New Headers Phase
,如图:添加成功以后,展开Headers
有三个子分组Public
、Private
和 Project
,直接把 TestStaticLibrary.h
拖到 Public
分类下,如图 :再来添加TestMainApp
项目对TestStaticLibrary
的依赖,选中TestMainApp
项目,Target
选择TestMainApp
,右侧Build Settings
分类下,搜索 User Header Search Paths
,添加$(BUILT_PRODUCTS_DIR),
勾选递归搜索选项recursive
,如下图然后,按Command + B
键编译工程,看到下面红色的libTestStaticLibrary.a
文件变为黑色。
接着在选择Build Phases
分来,展开Link Binary With Libraries
,点击下面的加号,添加停开库文件引用,如图:点击Add
按钮添加。
最后可以在ViewController.m
文件中,引入静态库暴露出来的头文件,TestStaticLibrary.h
,然后在viewDidLoad
方法中添加如下代码进行测试。
- (void)viewDidLoad {
[super viewDidLoad];
TestStaticLibrary *test = [[TestStaticLibrary alloc] init];
[test sayHello];
}
编译运行项目,可以看到控制台打印的信息,证明成功了。
补充信息
Bundle打包和引用
WorkSpace
中的Bundle
类型target
不能自动引用,需要手动加入子项目中的目标Bundle
(注意为WorkSpace
相对路径)
另外一种办法是使用脚本拷贝到指定目录,未使用,不做详述。
头文件的引用问题
子项目的.a文件
默认放在$(BUILT_PRODUCTS_DIR)
下(Debug-iphoneos,Relese-iphoneos)
,
头文件默认放在$(BUILT_PRODUCTS_DIR)/include/$(PRODUCT_NAME)
目录下,
这样头文件就有两份,在不同的目录下,都是在*-iphoneos
目录下,而User Head Search Path
设置为$(BUILT_PRODUCTS_DIR)
,在切换iphonesimulater
编译时,就无法搜索到头文件。
(.a文件
的引用由Workspace
自动管理的,没有这问题)
解决办法:
-
首先修改头文件copy路径,原为:
/include/$(PRODUCT_NAME)
,修改为:../include/$(PRODUCT_NAME)
-
User Head Search Path
设置为$(BUILD_DIR)/include
,勾选recursive
循环搜索,Always Search User Path
设置为YES
。
OK,这样就可以随心所欲的选择iphoneos
和iphonesimulater
进行构建。
转自:http://www.softdevblog.com/2016/03/29/iosduo-gong-cheng-lian-he-bian-yi-bao-han-staticlibrary/