使用Xcode创建的工程Project是单独分开的,如果想要几个工程同时存在,可以通过创建工作空间Workspace。工作空间是对各工程的集合,工程文件名的后缀为.xcodeproj,工作空间文件名的后缀为.xcworkspace。

静态链接库

在公司中有些核心代码,我们不能提供源代码,而又需要复用给其它公司、团队等使用,这时候就需要将此部分的代码封装成静态链接库。 库是没有main函数程序代码的集合,除了静态链接库还有动态链接库,它们的区别是静态链接库可以编译到执行代码中,应用程序可以在没有静态链接库的环境下运行;动态链接库不能编译到执行代码中,应用程序必须在有链接库文件的环境下运行。

在Xcode中创建静态链接库的过程为:在Xcode中选择菜单File->New->Project…,
在打开的对话框中选择【Framework & Library】中的【Cocoa Touch Static Library】
如下图:

 
 

需要在【Build Phases】中的Headers中将.h文件暴露出来。
使用静态库需要给使用者提供.a 和 .h 文件,如有需要,还需配置环境变量。

框架

为了方便使用,苹果提供了框架,Framework是资源的集合,是将静态库和其头文件包含到一个结构中,让Xcode可以方便地把它纳入到你的项目中。

在Xcode中创建静态链接库的过程为:在Xcode中选择菜单File->New->Project…,
在打开的对话框中选择【Framework & Library】中的【Cocoa Touch Framework】
如下图:

 
 

需要在【Build Phases】中的Headers中将.h文件暴露出来。
如果是制作静态库,需要在在【Build Setting】的【Linking】 中【Mach-O Type】选择静态库Static Library。

工作空间

工作空间是多个工程的集合。我们可以把静态库、Framework、工程一起集成到一个工作空间中。

创建工作空间的流程是:在Xcode中选择菜单File->New->Workspace…

将工程添加进工作空间,在Xcode中选择菜单File->Add Files to "xxx"... 如下图:

 
 

添加的框架进工作空间需要引用一下,在【Build Phases】中的Link Binary With Libraries 添加Framework。如下图:

 

如果在使用Framework的时候,提示如下错误:

dyld: Library not loaded: @rpath/DemoFramework.framework/DemoFramework
Referenced from: /var/containers/Bundle/Application/3B829604-B6E1-4C68-966C-83AEB20833A7/Demo.app/Demo
Reason: image not found

是因为Framework设置成了动态库,在【Build Setting】的【Linking】 中【Mach-O Type】选择静态库Static Library。

 
 

有些复杂的项目需要用到模块开发,就需要工程和Framework、静态库的相互结合。

iOS-工程和工作空间、静态库和框架之间的关系的更多相关文章

  1. iOS开发拓展篇—静态库

    iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 ...

  2. 【转】iOS开发拓展篇—静态库

    原文网址:http://www.cnblogs.com/wendingding/p/3893095.html iOS开发拓展篇-静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码 ...

  3. iOS 元件组件-创建静态库static library

    概述 在项目开发的过程中,经常使用静态库文件.例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节. 库是一些没有mai ...

  4. iOS制作Static Library(静态库),实现多工程的连编

    在iOS开发中,我们会发现一些偏底层或基础代码是直接可以复用的,当我们换一个项目,改变的只需要是偏上层的业务逻辑代码,所以我们可以把这部分基础代码制作为一个静态库static library,并不断扩 ...

  5. iOS开发中使用静态库 .a 文件

    ​​iOS开发中,在使用一些第三方库时,可能是一个静态库(比如GPUImage).这种情况下,需要编译出静态库文件(.a) ,然后配合响应的头文件(.h 文件)使用. 编译静态库,直接在Xcode中编 ...

  6. iOS实用技能扩展-静态库的制作与简单使用

    前言:此文是关于静态库的概念描述,如何制作及简单调试使用,不同版本的说明与场景使用. 1.关于库的简介: 库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetw ...

  7. iOS开发之*.a静态库注意事项

    以*.a静态库的形式引入工程的(比如:libUploadLib.a),*.a里面的class有category形式实现时,除了在工程Target的 Build Phases里面的 Link Binar ...

  8. iOS中打包.a静态库

    1.新建.a静态库工程 需要选择Static Library静态库工程模板新建工程,如下图: 新建静态库工程 实现需要打包的类,如下图: 实现需要打包的类 2.设置需要暴露的头文件 添加Headers ...

  9. iOS - 编译WebRTC.a静态库

    编译WebRTC.a静态库 编译的方式,我看了几个帖子,什么方法都有,这里我根据我的需求,说说我的做法.我的主要目的是因为网上找不到.a模式的webrtc的静态库,都是framework,所以我才自己 ...

随机推荐

  1. JavaScript-变量的作用域面试题

    块级作用域 -      在其他的语言中,任何一对花括号中的语句都属于一个块,在这之中定义的所有变量在代码块外是不可见的 -      JavaScript中没有块级作用域 //这里只有函数中定义的变 ...

  2. WP8.1小梦词典开发2:百度翻译API使用

    原文出自:http://www.bcmeng.com/api2/ 小梦昨天和大家分享了WP8.1金山词霸API使用方法,今天继续分享windows phone 8.1中百度翻译API的使用方法.和昨天 ...

  3. C++11右值引用和std::move语句实例解析

    关键字:C++11,右值引用,rvalue,std::move,VS 2015 OS:Windows 10 右值引用(及其支持的Move语意和完美转发)是C++0x将要加入的最重大语言特性之一.从实践 ...

  4. [原创]HBase学习笔记(3)- Java程序访问HBase

    这里介绍使用java api来访问和操作HBase,例如create.delete.select.update等操作. 1.HBase配置 配置HBase使用的zookeeper集群地址和端口. pr ...

  5. C#实现GridView导出Excel

    using System.Data;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System. ...

  6. Appium 解决手势密码 java

    if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...

  7. Redis基础学习(四)—Redis的持久化

    一.概述      Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方 ...

  8. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  9. AOP学习笔记一

    软件开发的目的是为了解决各种需求,包括业务需求和系统需求.目前,业界通过使用面向对象的编程思想,已经可以对业务需求等普通关注点进行很好的抽象与封装,并且使之模块化.但是对于系统需求一类的关注点来说,情 ...

  10. Statistical Models and Social Science

    1.1 Statistical Models and Social Reality KEY: complex society v.s statistical models relationship,d ...