使用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. Spring-boot中使用@ConditionalOnExpression注解,在特定情况下初始化bean

    想要实现的功能: 我想在配置文件中设置一个开关,enabled,在开关为true的时候才实例化bean,进行相关业务逻辑的操作. 具体实现: 1:要实例化的bean 2. 配置类 代码: 想要实例化的 ...

  2. Json 与GeoJson

    1.JSON介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后 ...

  3. 分享几个不错的Android开源音视频播放器

    整理了一下Github上几个开源的音视频播放器项目,有兴趣的同学可以clone代码去研究学习.   UniversalMusicPlayer https://github.com/googlesamp ...

  4. 大数据量场景下storm自定义分组与Hbase预分区完美结合大幅度节省内存空间

    前言:在系统中向hbase中插入数据时,常常通过设置region的预分区来防止大数据量插入的热点问题,提高数据插入的效率,同时可以减少当数据猛增时由于Region split带来的资源消耗.大量的预分 ...

  5. Idea Maven 建本地仓库-导入本地JAR包

    需求 IDEA 很方便集成了Maven,但是也有相应的问题,比如使用Maven仓没有包的时候不太方便,这时我们需要建立自已的本地仓库来实现 实现 找到Idea的安装目录下面的Maven,我的在 C:\ ...

  6. jQuery习题

    1.在div元素中,包含了一个<span>元素,通过has选择器获取<div>元素中的<span>元素的语法是? 答:$("div:has(span)&q ...

  7. 10 分钟学会Linux常用 bash命令

    目录 基本操作 1.1. 文件操作 1.2. 文本操作 1.3. 目录操作 1.4. SSH, 系统信息 & 网络操作 基本 Shell 编程 2.1. 变量 2.2. 字符串替换 2.3. ...

  8. webService请求方式快速生成代码 (Postman)

    Postman 这个东西只能在外网下载,是Goole一个插件. 1.FQ到外网,这里就不具体介绍怎么FQ了 2.上到谷歌浏览器,找到更过工具--->扩张程序--->获取更多扩张程序 3.在 ...

  9. 在程序加载过程中显示ProgressDialog 对话框

    private ProgressDialog mProgressDlg = null; @Override protected void onCreate(Bundle savedInstanceSt ...

  10. 最小函数值 洛谷P2085

    题目描述:          有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Ai*x^2+Bi*x+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个( ...