您的位置:首页 > 移动开发 > IOS开发

手动创建WorkSpace方式的iOS多工程联合编译包含Static Library

2016-06-30 15:19 393 查看

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  iOS workspace 工程依赖