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

现在众多公司都不只有一个项目,但众多项目中有些功能是一样的,所以功能模块化是大家通行的办法。在开发中,为了提高效率,我们可以将众多project 放到一个Workspace下,将模块化的功能打成.a静态库,并在Workspace下进行联调。具体步骤如下:

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 "TestStaticLibrary.h"
@interface TestStaticLibrary:NSObject
- (void)sayHello;
@end

对应的TestStaticLibrary.m中实现方法体

import "TestStaticLibrary.h"
@implementation TestStaticLibrary
- (void)sayHello{
NSLog(@"Hello! form Static Library Project");
}
@end

下面开始生成静态库文件,选择要暴露给外部的头文件,选中TestStaticLibrary项目的TargetsTestStaticLibrary在右侧的窗口中选择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文件变为黑色。

有时候,要重启 WorkSpace 工程才会变黑色.

接着在选择Build Phases分来,展开Link Binary With Libraries,点击下面的加号,添加停开库文件引用,如图:
点击Add按钮添加。

最后可以在ViewController.m文件中,引入静态库暴露出来的头文件,TestStaticLibrary.h,然后在viewDidLoad方法中添加如下代码进行测试。

- (void)viewDidLoad {  
  [superviewDidLoad];   
 [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设置为YESOK,这样就可以随心所欲的选择iphoneos和iphonesimulater进行构建




demo 下载








转自:http://www.jianshu.com/p/e768ead6c2a4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值