欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Xcode中的Workspace、Target

程序员文章站 2022-04-05 16:10:29
...

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

Xcode中的Workspace、Target

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

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

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

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

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

Xcode中的Workspace、TargetXcode中的Workspace、Target

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

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

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

Xcode中的Workspace、Target

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

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

import Checkbox

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

Xcode中的Workspace、Target

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

设置多个Projects

参考:Multi Project Setups

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

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

Xcode中的Workspace、Target

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

Schemes and Targets

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

创建不同的build configuration

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

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

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

在project中,选择Xcoder

Xcode中的Workspace、Target
Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

点击加号,输入-DLITE_VERSION

Xcode中的Workspace、Target

-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

Xcode中的Workspace、Target

复制一个Xcoder,叫做Xcoder Lite

Xcode中的Workspace、Target

并将其Build Configuration改为Lite Version Release

Xcode中的Workspace、Target

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

5.控制台的输出如下:

LITE_VERSION

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

    #if LITE_VERSION
      fetchRequest.fetchLimit = 5
      #endif

设置不同的product bundle identifier 和 product name

Xcode中的Workspace、Target

创建不同的target

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

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

2.创建LITE_VERSION

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

4.使用不同的code和assert

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

Xcode中的Workspace、Target

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

Localization of Storyboard

国际化标题

1.如下创建一个新的Localization

Xcode中的Workspace、Target

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

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

Xcode中的Workspace、Target

将如下内容修改为中文

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

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

Xcode中的Workspace、Target