手动创建WorkSpace方式的iOS多工程联合编译包含Static Library
来源:互联网 发布:剑网3捏脸数据 编辑:程序博客网 时间:2024/05/22 04:58
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/
- 手动创建WorkSpace方式的iOS多工程联合编译包含Static Library
- 创建WorkSpace方式的iOS多工程联合编译包含Static Library
- iOS开发中 workspace 与 static lib 工程的联合使用
- VC++6.0创建一个含gdiplus的Win32 Static Library工程编译时报错解决办法
- iOS制作Static Library(静态库),实现多工程的连编
- iOS (static library)静态库的创建与使用
- Gradle 编译多个工程(包含多Library库工程依赖)指导
- Gradle 编译多个工程(包含多Library库工程依赖)指导
- [iOS开发]创建并使用static library
- iOS 创建静态库static library
- Hibernate工程的手动创建
- Eclipse workspace包含哪些工程的配置存放位置
- Eclipse workspace包含哪些工程的配置文件在什么地方?
- Eclipse workspace包含哪些工程的配置文件在什么地方?
- 请选择【Use MFC in a Static Library】创建工程
- iOS中静态库的创建和使用、制作通用静态库(Cocoa Touch Static Library)
- IOS的 Cocoa Touch Static Library制作
- IOS的 Cocoa Touch Static Library制作
- Linux正则表达式与文件格式化处理
- oracle11g for linux 启动/停止服务
- json解析+接口+网络请求+历史的今天
- 初学Java反射之简单明了的反射例子。
- Map(键-值)
- 手动创建WorkSpace方式的iOS多工程联合编译包含Static Library
- tensorflow从0开始(7)——利用tensorflow进行开发的准备工作(续1)
- C#控制台 for循环的标准格式
- java文件IO,关闭顺序
- sql数据库中怎么根据存储过程名字,查出存储过程的内容?
- 十进制和二进制快速转换
- AsyncTask的代码
- Android Studio系列教程4 (Gradle基础)
- iOS笔记 常用代码