Xcode中的Workspace、Target

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_第1张图片

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

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

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

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

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

Xcode中的Workspace、Target_第2张图片 Xcode中的Workspace、Target_第3张图片

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

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

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

Xcode中的Workspace、Target_第4张图片

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

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

Xcode中的Workspace、Target_第5张图片

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

Xcode中的Workspace、Target_第6张图片

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

import Checkbox

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

Xcode中的Workspace、Target_第7张图片

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

  • How to Import One Project to Another One in Xcode

设置多个Projects

参考:Multi Project Setups

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

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

Xcode中的Workspace、Target_第8张图片

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

Schemes and Targets

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

Xcode中的Workspace、Target_第9张图片

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

Xcode中的Workspace、Target_第10张图片

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

Xcode中的Workspace、Target_第11张图片

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

Xcode中的Workspace、Target_第12张图片

创建不同的build configuration

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

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

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

在project中,选择Xcoder

Xcode中的Workspace、Target_第13张图片
Xcode中的Workspace、Target_第14张图片

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

Xcode中的Workspace、Target_第15张图片

点击加号,输入-DLITE_VERSION

Xcode中的Workspace、Target_第16张图片

-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_第17张图片

复制一个Xcoder,叫做Xcoder Lite

Xcode中的Workspace、Target_第18张图片

并将其Build Configuration改为Lite Version Release

Xcode中的Workspace、Target_第19张图片

Xcode中的Workspace、Target_第20张图片

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_第21张图片

5.控制台的输出如下:

LITE_VERSION

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

    #if LITE_VERSION
      fetchRequest.fetchLimit = 5
      #endif

设置不同的product bundle identifier 和 product name

Xcode中的Workspace、Target_第22张图片

创建不同的target

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

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

Xcode中的Workspace、Target_第23张图片

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

Xcode中的Workspace、Target_第24张图片

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

Xcode中的Workspace、Target_第25张图片

2.创建LITE_VERSION

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

LITE_VERSION

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

Xcode中的Workspace、Target_第26张图片

4.使用不同的code和assert

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

Xcode中的Workspace、Target_第27张图片

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

Localization of Storyboard

国际化标题

1.如下创建一个新的Localization

Xcode中的Workspace、Target_第28张图片

Xcode中的Workspace、Target_第29张图片

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

Xcode中的Workspace、Target_第30张图片

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

Xcode中的Workspace、Target_第31张图片

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

Xcode中的Workspace、Target_第32张图片

将如下内容修改为中文

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

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

Xcode中的Workspace、Target_第33张图片

你可能感兴趣的:(iOS,证书,Xcode)