iOS址之Xcode中的 workspace, project, target, scheme、同一个workspace中创建多个project模块化协同工作、工程中引用另外一个工程

本文主要是介绍iOS址之Xcode中的 workspace, project, target, scheme、同一个workspace中创建多个project模块化协同工作、工程中引用另外一个工程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 workspace, project, target, scheme详细解答:https://www.jianshu.com/p/5740f41881d9

 

Xcode Project

Xcode中的 project里面包含了所有的源文件,资源文件和构建一个或者多个product的信息。project利用他们去编译我们所需的product,也帮我们组织它们之间的关系。一个project可以包含一个或者多个target。project定义了一些基本的编译设置,每个target都继承了project的默认设置,每个target可以通过重新设置target的编译选项来定义自己的特殊编译选项。

project包含了以下信息:

  • 源文件

    • 代码的头文件和实现文件
    • 静态库,动态库,
    • 资源文件(如文本,xml,plist等)
    • 图片资源
    • 界面资源文件(xib, storyboard等)
  • 在文件结构的导航中,采用group去组织文件(实际开发中,尽量使用实体文件夹)

  • project的编译级别配置文件如(debug, release)

  • target

  • 运行环境如:debug,test

project可以单独存在,或者存在于一个workspace中。

一个XCode project包含了两种设置:Project Settings 和 Target Settings。
它们之间的主要区别在于:Project settings应用于project里面的所有target;而Target settings只对target本身有效,不影响project中的其他target。
• 如果一个选项在project settings中和target settings中都被设定了(会以粗体字表示),那么target settings会覆盖project settings。
•如果一个选项在target settings中没有被设定(不会以粗体表示),那么它会继承project settings中的设置。如果它在project settings中也没有被设定(不会以粗体表示),就会继承XCode的默认设置。
建议一般情况下,配置target settings。在包含多个target的project中,如果需要在target之间使用相同的设定,配置project settings。
一个workspace可以包含若干个工程;
一个工程可以引用另外一个工程;

target

target定义了构造一个product所需的文件和编译指令。一个target对应于一个product。target说白了就是
告诉编译系统要编译的文件和编译设置。编译指令就是根据build settings and build phases来确定的。

target之间可以进行依赖。如果一个target的编译需要另外一个target作为他的输入,那么我们就可以说前者依赖于后者。如果这两个target在同一个workspace里面,Xcode可以发现他们的依赖关系,这种依赖称之为隐式依赖。当然你可以通过设置,明确他们的依赖关系。

workspace

workspace是Xcode的一种文件,用来管理工程和里面的文件,一个workspace可以包含若干个工程,甚至可以添加任何你想添加的文件。workspace提供了工程和工程里面的target之间隐式和显式依赖
关系,用来管理和组织工程里面的所有文件。

workspace中的工程共享一个编译目录

workspace中的工程默认都是在同一个编译目录下,也就是workspace的编译目录。由于每个工程中的文件都在workspace的编译目录下,所以每个工程之间的文件都是相互可以引用的。因此,如果workspace中的多个工程使用了同一个库的时候,我们就不需要给每个工程都拷贝一个。

Xcode会检查编译目录里面的所有文件去发现隐式的依赖关系。比如,一个工程用来编译成库给其他工程去引用,Xcode可以自动的先编译这个工程的库,然后再去编译其他的工程。虽然你没有在编译选项里面去设置这些依赖关系。当然如果你真的需要的话,你也可以去设置,提供一个显式的编译依赖关系。

workspace中每个工程依然都是独立的。如果你想单独的使用这个工程,并且不希望影响其他工程,或者被其他工程影响,你可以直接打开工程而不通过workspace。一个工程可以被多个workspace所拥有,在任意的组合中依然可以直接运行,而不需要去重新配置工程或者workspace。

Xcode Scheme

scheme定义了编译集合中的若干target,编译时的一些设置以及要执行的测试集合。我们可以定义多个scheme,但是每次只能使用其中一个。我们可以设置scheme保存在project中还是workspace中。如果保存在project中,那么任意包含了这个工程的workspace都可以使用。如果保存在workspace中,那么只有这个workspace可以使用。

 

*********同一个workspace中创建多个project模块化协同工作

1.打开XCODE,菜单栏-》file-〉new-》workspace,创建workspace;

2.双击打开workspace,菜单栏-》file-〉new-》project,

 

一个工程下创建多个target:

 

 

********工程中引入另外一个工程:(简化就是吧一个项目打成静态库,然后再另外一个项目中使用静态库)

   工程A中引用工程B的流程:

  • 1.将B工程(整个工程文件,包含.xcodeproj)拷贝到A工程目录下.

  • 2.点击A工程的工程文件名,然后add files to “xx”, 将B工程的.xcodeprj文件添加进来(注意只需要添加.xcodeprj文件,其他文件不需要添加。)

  • 3.选择A工程target,点击build setting选项,右上角搜索Header Search找到Header Search Paths双击,在弹出框里点有下角的+号,添加导入工程的路径$(SRCROOT)/项目名称

  • 4.因为A工程要包含B工程的静态库,假如B工程生成的静态库为xxxx.a, 在A工程的General选项中,拉到link frameworks and libraries项,点击+号,将B工程下的xxxx.a静态库添加上。

 

这篇关于iOS址之Xcode中的 workspace, project, target, scheme、同一个workspace中创建多个project模块化协同工作、工程中引用另外一个工程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017696

相关文章

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

Git打标签从本地创建到远端推送的详细流程

《Git打标签从本地创建到远端推送的详细流程》在软件开发中,Git标签(Tag)是为发布版本、标记里程碑量身定制的“快照锚点”,它能永久记录项目历史中的关键节点,然而,仅创建本地标签往往不够,如何将其... 目录一、标签的两种“形态”二、本地创建与查看1. 打附注标http://www.chinasem.cn

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

Python批量替换多个Word文档的多个关键字的方法

《Python批量替换多个Word文档的多个关键字的方法》有时,我们手头上有多个Excel或者Word文件,但是领导突然要求对某几个术语进行批量的修改,你是不是有要崩溃的感觉,所以本文给大家介绍了Py... 目录工具准备先梳理一下思路神奇代码来啦!代码详解激动人心的测试结语嘿,各位小伙伴们,大家好!有没有想

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据