文档章节

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

hejunbinlan
 hejunbinlan
发布于 2016/07/20 13:48
字数 793
阅读 27
收藏 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
博文 586
码字总数 21569
作品 0
浦东
高级程序员
iOS开发之Xcode打包framework

下文是转载,本人觉得这个打包framework还是一个比较重要的功能,可以用来做一下事情: (1)封装功能模块,比如有比较成熟的功能模块封装成一个包,然后以后自己或其他同事用起来比较方便。...

阿里阿力
2014/01/28
0
0
xcode合并模拟器和真机静态库的编译

最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的...

AmoyAI
2013/03/02
0
1
xcode 制作静态库.a文件 详解

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

壹峰
05/10
0
0
IOS工程自动打包并发布脚本实现

作者:webfrogs 转载请注明出处。 前言 IOS的开发过程中,当需要给测试人员发布测试包的时候,直接使用xcode来做的效率是非常低下的。尤其是当有一点小改动需要重新出包时,那简直是个折磨的...

孙哲
2015/03/26
0
6
IOS7开发~Xcode5制作framework

IOS7开发~Xcode5制作framework 相关链接:IOS开发~Cocoa Touch Static Library(静态库) 一、Framework 简介(Introduction to Framework Programming Guide) Mac OS X 扩展了 framewor......

cbliu
2014/05/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

用户体验要素——以用户为设计中心

一、用户体验是什么 产品会与外界发生联系,人们如何去使用产品,人们使用产品无非解决两种问题,一,提高效率;二娱乐。而用户体验兼顾着功能和界面两个方面,为的是“提高人们的工作效率”...

铸剑为犁413
53分钟前
0
0
学习设计模式——代理模式

1. 认识代理模式 1. 定义:为其他对象提供一种代理以控制对这个对象的访问。 2. 组织结构: Proxy:代理对象,要实现与目标代理对象的相同的接口,这样就可以使用代理来代替具体的目标对象,...

江左煤郎
今天
1
0
java JDK动态代理

本篇随笔是对java动态代理中的JDK代理方式的具体实现。 首先需要定义一个接口,为其定义了两个方法:   public interface UserService { public void add(); public void delete(); } 然后需...

编程SHA
今天
2
0
轻松理解Dubbo分布式服务框架

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的...

别打我会飞
今天
3
0
TypeScript基础入门之JSX(一)

转发 TypeScript基础入门之JSX(一) 介绍 JSX是一种可嵌入的类似XML的语法。 它旨在转换为有效的JavaScript,尽管该转换的语义是特定于实现的。 JSX在React框架中越来越受欢迎,但此后也看到了...

durban
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部