Xcode中的Workspace、Target

本文介绍了Xcode中多项目的管理方法,包括Workspace、Target的使用,如何将多个项目整合到一个Workspace中,以及如何设置不同项目的依赖关系。此外,还讲解了如何利用Schemes和Targets进行构建配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Xcode中的Workspace、Target

Workspaces and Framework

参考自Xcode Tips and Tricks - Workspaces and Frameworks

当你创建一个新的project的时候,会自动创建一个workspace,所以就可以将其它的project和document,添加到你的workspace中,这样你就可以访问其它project中的模块

把一个project添加到workspace中,并不会duplicate复制它,workspace仅仅是持有project在disk上的位置的引用

当第一次创建一个project的时候,也会自动创建一个target。target包含了build一个app所需指令,也可以创建多个target

之间的关系

那,为什么要在一个workspace中使用多个project呢?

framework和project编译的单一结果称为module,你可以将这些module添加到workspace。如果类型声明为public,则每个module可以使用其它module的相关代码。

UIKit就是一个module,在你需要使用UI的地方,导入UIKit即可

例如,当新创建一个project的时候,那么这个project就被given一个workspace,只是说这个workspace是被嵌在project的包里面的,你看不见而已

如下,在.xcodeproj右键->显示包内容,可查看其中的workspace

显示包内容 workspace

在本例子中介绍的例子是,有个Checkbox模块,在Xcoder项目中使用

1.Checkbox模块中的要共用的类,设为public

2.在Xcoder项目中,右键->”Add Files to Xcoder”

Add Files to Xcoder

需要注意的是,添加的时候,不用使用Xcode打开Checkbox模块,否则添加进来的模块,前面没有展开的三角形符号。也不要勾线Copy items into…

如下选择Checkbox.xcodeproj,添加之后的效果如下:

添加之后的效果

3.添加Checkbox模块到Xcoder项目中的target,拖动Checkbox.frameworkEmbedded Binaries

添加到target

4.在需要使用到Checkbox类的地方,导入Checkbox模块

import Checkbox

5.如果在Storyboard中使用了Checkbox模块中类,需要指定模块,否则会报错

storyboard中指定模块

如何将一个project导入到另一个project中,还可以参考:

设置多个Projects

参考:Multi Project Setups

此文章在一个workspace中添加多个project

注意将project添加到workspace时,要注意选择如下的内容:

选择对应的workspace

至于project之间依赖的方式,与上面类似

Schemes and Targets

在Xcode中创建一个project的时候,会自动创建一个target、一个scheme,2个configuration

target

target用来build最后的product
scheme用来执行action,如下所示,列出了依赖的列表,所以Checkbox framework会在Xcoder build之前build:

scheme

如下所示,可将build configuration从release改为debug

build configuration从release改为debug

project、scheme、build configuration、target之间的关系如下:

project、scheme、build configuration、target之间的关系

创建不同的build configuration

build configuration在设置不同的flag和运行script方面非常有用

如下的例子,创建一个新的target,发一个新的Xcoder的app

1.先创建一个新的build congfiguration,如下所示,复制一个release的build configuration

在project中,选择Xcoder

在project中,选择Xcoder
创建build configuration

2.选择Target->Build Setting,基于新的build configuration文件定义一个新的自定义的setting,通过other swift 过滤,如下:

通过other swift过滤

点击加号,输入-DLITE_VERSION

DLITE_VERSION

-D告知Swift,LITE_VERSION是一个flag

现在就有了个叫做Lite Version Release的build configuration,它里面有个叫做LITE_VERSION的flag。默认创建的Debug和Release build configuration并没有这个flag

现在就需要编辑scheme来使用这个Lite Version配置,来运行这个app

3.选择Manage Scheme

Manage Scheme

复制一个Xcoder,叫做Xcoder Lite

复制一个Xcoder

并将其Build Configuration改为Lite Version Release

这里写图片描述

这里写图片描述

4.检验是否是运行的Lite Version

AppDelegate中的didFinishLaunchingWithOptions launchOptions: 方法中,添加代码

根据Lite Version标志位flag是否存在,则编译不同的代码

    #if LITE_VERSION
        print("LITE_VERSION")
        #else
         print("FULL_VERSION")
        #endif

如果在build的时候提示”No such module….”,可参考Swift frameworks do not work with build configurations named other than ‘Debug’ or ‘Release’: No such module

Build Settings中的Framework Search Path,添加$(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME),并使它non-recursive

非递归

5.控制台的输出如下:

LITE_VERSION

这样之后,就可以根据LITE_VERSION这个flag,来自定义一些代码,如:

    #if LITE_VERSION
      fetchRequest.fetchLimit = 5
      #endif

设置不同的product bundle identifier 和 product name

设置不同的product bundle identifier 和 product name

创建不同的target

创建不同的target,不同的target,可以有不同的assets和不同的代码文件

1.在Target下的Xcoder,右键选择Duplicate

Duplicate

在弹出的提示框中,选择Duplicate Only

Duplicate Only

此时自动创建了一个名为Xcoder Copy的target,也创建了一个名为Xcoder Copy的Scheme。现在将它们的名称都改为Xcoder Lite

Xcoder Lite

2.创建LITE_VERSION

步骤与上面类似,为Debug和Release,创建LITE_VERSION标志位

LITE_VERSION

3.为不同的target设置不同的Bundle idetifier

Bundle idetifier

4.使用不同的code和assert

如下所示,选择某一个代码文件,在右侧的Target Membership 中,可查看其属于的target

Target Membership

所以可以选择每个target使用的code,即可以选择哪个code在哪个target里

Localization of Storyboard

国际化标题

1.如下创建一个新的Localization

Localization

勾选

2.在Manage Scheme中再duplicate一个Xcoder,名字叫做Xcoder Chinese

Xcoder Chinese

Run->Options中,并将Application Language改为对应的语言

Application Language

3.在Main.storyboard下就有Main.strings文件了

Main.strings

将如下内容修改为中文

/* Class = "UINavigationItem"; title = "Keyboard Shortcuts"; ObjectID = "Y9b-Gg-7Lv"; */
"Y9b-Gg-7Lv.title" = "快捷键";

界面显示效果如下,就有中文显示了:

界面显示效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值