iOS-工程和工作空间、静态库和框架之间的关系

使用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、静态库的相互结合。

时间: 2024-08-10 00:07:11

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

iOS开发拓展篇—静态库

iOS开发拓展篇—静态库 一.简单介绍 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的分类 根据源代码的公开情况,库可以分为2种类型 (1)开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking (2)闭源库 不公开源代码,是经过编译后的二进制文件,看不到具体实现 主要分为:静态库.动态库 二.静态库和动态库 1.静态库和动态库的存在形式 静态库:.a 和 .framework 动态库:.dylib 和 .framework 2.静态库和动

项目架构基础之二 ---- 工程中创建静态库文件(.a)库文件

步骤1.创建工程HLStaticTest 步骤2.创建静态库文件 步骤3. 关闭HLStatic,回到HLStaticTest Targets - >Build Phases ->Link Binary With Libraries 然后进入到  Targets -> Build Setting ->Header Search Paths 步骤 4. 进入AppDelegate 工程中创建静态库文件(.a)库文件 成功 版权声明:本文为博主原创文章,未经博主允许不得转载.

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

概述 在项目开发的过程中,经常使用静态库文件.例如两个公司之间业务交流,不可能把源代码都发送给另一个公司,这时候将私密内容打包成静态库,别人只能调用接口,而不能知道其中实现的细节. 库是一些没有main函数的程序代码集合.除了静态库,还有动态链接库,他们之间的区别是:静态库可以编译到我们的执行代码中,应用程序可以在没有静态库的环境中运行:动态库不能编译到我们的执行代码中,应用程序必须在有链接库文件的环境下运行.另外,动态库在AppStore里,很有可能被拒绝,上架不了. 因而,一般情况下,我们都

静态库链接时的依赖关系和先后顺序

1 静态库链接时的依赖关系 静态库之间是有依赖关系的,比如A.lib依赖于B.lib.C.lib.D.lib.E.lib,因为A会使用B.C.D.E中的函数. 2 使用静态库时的先后顺序 是不是B.C.D.E一定要放在A的后面?或者说,如果自己依赖于某个库,那么自己就要放在这个库的后面? 如果是的话,为什么会这样?是所有的链接器都是这样的吗? MSVC++12.0编译器是不管这个顺序的,gcc的未知. 3 使用静态库时必须注意依赖关系 也就是说,要使用一个lib时,要把它依赖的所有的lib都加上

【iOS开发-115】静态库的制作以及第三方框架iOS Universal Framework,DEBUG和RELEASE

(1)概念介绍 --我们平时在项目中用的最多的就是开源的第三方库,这种库是开源的,我们不仅能用,还能查看源代码甚至可以修改源代码. --与开源库对应的就是闭源,闭源库分为动态库和静态库.动态库就是.dylib或者.framework结尾的文件.就是苹果官方提供给我们用的那些库.开发者不能在项目中使用自制的动态库,否则无法上传到APPStore. --所以,对于闭源库,我们主要讨论的是静态库.静态库的样子就是用户拿到的文件有很多头文件.h+资源包+编译过的一个二进制文件.a(.framework)

iOS 工程套子工程,主工程和framework工程或.a静态库工程联调

一.主工程套Library(即.a)工程联调 1.新建一个主工程和一个Library工程,如何创建Library工程参照我另外一篇博客iOS 最新framework和.a静态库制作及使用全解但这个Library工程不需要编译成静态库 2.将静态库工程拖到主工程,我这里拖到下图箭头所指的UseA文件夹下(如果你要拖到其他目录,就要改Library Search Paths,下面我会介绍Search Paths路径相关知识) 3.将Library工程下Products目录下的.a文件拖入主工程的Li

iOS如何重新打包静态库,使得模拟器和真机都可以使用(以ZBarSDK为例)

ZBarSDK下载地址:https://github.com/bmorton/ZBarSDK http://zbar.sourceforge.net/iphone/index.html 1.创建工程 导入ZBar的SDK文件.即把ZBarSDK的目录拉入项目,然后选中copy选项 2.添加framework 3.添加代码 #import "ZBarSDK.h" #import "QRCodeGenerator.h" @interface yxpViewControl

ios开发中创建静态库的方法介绍

在进行iOS项目开发时,为了减少项目的编译时间,通常情况下会把项目中的私密内容打包成静态库,或者是把ios项目中变动较少一部分打包成静态库以便提高编译效率,很多iOS初学者对静态库与动态库的区别及创建使用,下面就一起来学习下: (一)iOS静态库.动态库与Framework静态库与动态库的区别: (1)什么是库? 库(Library)直白一点说就是一段编译好的二进制代码,加上头文件就可以供别人使用;(例如: iOS中Objective-C编译下的.h和.m文件,打包静态库后会变为.h和.a文件)

iOS开发,如何打包静态库.a文件

1.需求 我们在开发iOS的工作中可能会自己开发一些.a静态库或者打包一下别人的第三方类库包装成自己的.a文件.有时候我们引入一些C++编译的第三方文件时可能会出现编译的错误,但是我们如果打包成.a静态库时就很少会出现OC与C++混编的错误,原因很简单.a静态库文件是编译好的二进制文件,二进制文件与二进制文件互相混编当然没有什么问题.好那么接下来我们开始学习打包吧! 2.实例 接下来我们就以打包IOS开发中常用的网络请求库AFNetworking为实例. 1>我们需要准备好需要打包的AFNetw