文档章节

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

hejunbinlan
 hejunbinlan
发布于 2016/07/20 13:48
字数 793
阅读 28
收藏 0
1、创建一个空的App Project

启动Xcode 点击 File -> New -> Project 选择 Single View Application新建App项目取名为TestMainApp取项目名字建立成功后关闭项目留待下一步使用

2、创建一个Static Project

启动Xcode 点击 File -> New -> Project 选择 Cocoa Touch Static Library创建静态库项目取名为TestStaticLibrary,放在跟刚才的TestMainApp项目同一级目录下

3、创建一个WorkSpace关联刚才的两个项目

启动Xcode 点击 File -> New -> WorkSpace 取名为 TestWorkSpace创建WorkSpace创建成功打开后在左侧空空的导航栏中点击右键选择 Add Files to "TestWorkSpace" 选项添加项目到WorkSpace在打开的目录中选择刚刚创建的Project文件添加到WorkSpace,如图所示:添加项目到WorkSpace同理添加Static Library项目到WorkSpace, 完成以后是这个样子的: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有三个子分组PublicPrivate 和 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,这样就可以随心所欲的选择iphoneosiphonesimulater进行构建。

本文转载自:http://softdevblog.com/2016/03/29/iosduo-gong-cheng-lian-he-bian-yi-bao-han-staticlibrary/

hejunbinlan
粉丝 41
博文 596
码字总数 21569
作品 0
浦东
高级程序员
私信 提问
IOS的framework解决方案

经过一系列评估,准备使用IOS-Universal-Framework来构建IOS的framework体系。初步测试还是相当好用。步骤如下: 1.了解 简介:An XCode project template to build universal frameworks (...

_huangbo
2015/02/20
7
0
一个静态库框架模板: iOS Universal Framework Mk 7

一个静态库框架模板: iOS Universal Framework Mk 7 分类: iPhone开发 2012-03-19 15:57 109人阅读 评论(0) 收藏 举报 项目地址: https://github.com/kstenerud/iOS-Universal-Framework...

晨曦之光
2012/05/28
4.9K
0
ArcGIS for iOS 开发系列(2) – 开发环境配置

我们已经掌握了一些基本知识,在动手编程之前,还需先配置下开发环境: 2.1 iOS 配置 1) Mac电脑(MacBook Air/ Pro、Mac mini和iMac都可以); 2) Snow Leopard(小版本10.6.2以上)、Lio...

长平狐
2012/11/28
1K
0
mac os安装xcode和ios sdk4.2版本

这两天刚刚使用mac系统,个人感觉比起windows7一个显著的优点就是关机速度特别快。当然在安装mac系统时,如果选择IT用户,很多开发系统也就自动安装好了,比如jdk、maven、svn,python的环境...

鉴客
2011/12/14
11K
3
xcode 制作静态库.a文件 详解

https://blog.csdn.net/pjk1129/article/details/7255163 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Andro...

壹峰
2018/05/10
62
0

没有更多内容

加载失败,请刷新页面

加载更多

【在 Nervos CKB 上做开发】Nervos CKB 脚本编程简介[3]:自定义代币

原文作者:Xuejie 原文链接:https://xuejie.space/2019_09_06_introduction_to_ckb_script_programming_udt/ Nervos CKB 脚本编程简介[3]:自定义代币 CKB 的 Cell 模型和 VM 支持许多新的用...

NervosCommunity
51分钟前
4
0
通过OAuth2.0 获取授权访问SF 用户数据

通过OAuth2.0 获取授权访问SF 用户数据 OAuth2.0 相关知识 深入了解 Salesforce 中的 OAuth 2.0(SF官方) OAuth 2.0 的一个简单解释(阮一峰大神) OAuth 2.0 的四种方式(阮一峰大神) GitHub OA...

在山的那边
56分钟前
7
0
编写程序:从键盘上接受一个三位数(首先要确保是三位数),计算出各位之和输出。

#include<stdio.h> int main() { int a,sum=0; printf("请输入一个三位数:\n"); scanf("%d",&a); sum=a/100+a%100/10+a%10; printf("这三个数的和:%d",sum); return 0; }......

201905021729吴建森
今天
7
0
如何离开/退出/停用Python virtualenv

我正在使用virtualenv和virtualenvwrapper。 我可以使用workon命令在virtualenv之间切换。 me@mymachine:~$ workon env1(env1)me@mymachine:~$ workon env2(env2)me@mymachine:~$ workon e......

技术盛宴
今天
7
0
成长之路 万事坚持难

任何事情开了头,想要更好的发展下去,不忘初心,就一定要坚持下去。 以前自己坚持了一些事情,比如早睡不吃东西,由于中途断了,没有及时止损,导致又接着恶习断了几天。所以 及时的反省和调...

T型人才追梦者
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部