Xcode上手之编译方案

Xcode技巧系列:http://www.jianshu.com/notebooks/7639304/latest

1 什么是编译方案

编译方案:一系列编译设置的集合,包括了构建项目时的编译配置,以及当启动项目时所使用的运行环境。
项目创建,系统会自动创建出一个编译方案,默认和项目名称相同,如下:

屏幕快照 2017-01-22 下午11.03.14.png

图中BLE就是系统自动创建的编译方案。

2 编辑管理编译方案

上图中,我们点击Manage Schemes...就可以进入管理界面,如图:

屏幕快照 2017-01-22 下午11.05.56.png

可以看到当前项目所有的编译方案,查看相关信息等。

2.1 创建新的方案

点击“+”号,出现创建表单:

屏幕快照 2017-01-22 下午11.08.29.png

填入创建方案所链接的对象Target和名称Name,即可创建。
编译方案需要和对象绑定一起,因此必须要选择要绑定的对象。

屏幕快照 2017-01-22 下午11.13.02.png

同时,也可以选择New Scheme...来创建。

2.2 方案排序,复制,导入、导出,删除

1.排序,直接在管理界面拖动即可
2.复制,选择要复制的方案,点击左下角齿轮,弹出菜单选择Duplicate,便会复制出方案
3.导入、导出,点击方案,点击齿轮,Export即为导出,Import导入
4.选中要删除的方案,点击“-”即可。
删除对象时,对应的方案并不会删除,需要手动删除!

2.3 方案管理

屏幕快照 2017-01-22 下午11.21.12.png

Container即为容器。一个项目的情况下,是默认的当前项目。如果包含多个项目的工作区,可以选择将方案关联到工作区或者其他项目。

Shared:方案共享开关。单人开发无需关心该功能。多人开发,如果不需要别人看到自己的编译方案,不勾选即可。

左上角Autocreate schemes复选框:表示创建对象时,是否自动创建编译方案,默认勾选。

右上角Autocreate Schemes Now:立即为当前对象创建默认的编译方案。

2.4 编辑方案

选择Edit Scheme即可进入编辑方案界面


屏幕快照 2017-01-22 下午11.31.53.png

1.左上角可以选择和切换需要编辑的方案。
2.底部有复制方案按钮。
3.管理方案按钮可以切换到管理界面。
4.可以开启共享。
5.左侧列表可以切换操作列表

2.4.1编译操作Build

编译操作是项目运行、分发前必须要做的,编译优先于其他所有操作。编译操作设置:

屏幕快照 2017-01-22 下午11.40.38.png

Parallelize Build:并行编译,允许Xcode并行编译多个独立的对象,即不依赖于其它对象可单独运行的对象。

Find Implicit Dependencies:允许Xcode自动寻找依赖,某些情况下,某个对象依赖于另一个对象才能运行时,Xcode可自动找出此类依赖。上述两个选项保持默认勾选即可。

下方列表列出了当前方案所要编译的全部对象。每个对象右侧有多个复选框,控制对应操作运行之前,是否要编译该目标。一般来说,都是需要编译的。

如果发现Xcode不能确定依赖关系,这时需要开发者自己通过“+”添加选择一个对象。如果对象编译顺序十分重要的话,需要取消并行编译选项。

2.4.2 运行操作Run

运行操作指定运行过程中需要的可执行文件、调试器、运行环境等选项。


屏幕快照 2017-01-22 下午11.54.22.png

1.info信息:如上图
Build Configuration:编译配置,选择运行时所使用的配置(debug调试,release发布),默认调试配置。

Executable:可执行文件,选择运行的可执行文件,也可以选择在运行时手动指定。如果改为没有包含在本方案中的对象,该对象会自动添加到编译方案中。没有可执行文件的对象的可以行文件设置是None。

Debug executable:调试可执行文件,指定是否对当前选定的可执行文件执行调试操作,如不执行,调试操作无作用。

Debug Process as:允许开发者以自身账号或者根用户的身份运行,如果开发者要调试某些需要权限才能运行的应用,则必须使用根用户。该选项只有MAC程序可以勾选。

Launch:启动,表示发起运行操作是自动执行可执行文件还是需要开发者自行启动。

屏幕快照 2017-01-23 上午12.04.20.png

2.Arguments参数:如上图
开发者可以控制启动参数和环境变量

Arguments Passed on Launch:启动时传递的参数,可以使用“+”添加启动时所需要传递的特定参数,这些参数一般情况下可以用在命令行程序上。

Environment Variables:环境变量,可以添加或覆盖当前应用环境中存在的环境变量。

Expand Variables Based ON:指定扩展Xcode所提供的变量时,要使用哪个可以行文件的特定环境变量。

屏幕快照 2017-01-23 上午12.10.19.png

3.Options选项
Core Location:定位模拟相关设置。allow location simulation:允许模拟器运行时模拟设备的地理位置。default location:定义模拟器启动时,首选的地理模拟位置,也可以往项目中添加GPX地理位置来自定义地理模拟位置。

Application Data:允许开发者从项目中事先将数据放置到应用程序中,需要application data package(应用程序数据包)的支持,如果当前工作区中不存在该数据包,则不可以进行数据预加载操作。

Routing App Coverage File:设置用于导航、交通相关的应用,开发者可以在项目中指定一个GeoJSON文件,详细说明应用所覆盖的地理区域。

GPU Frame Capture:为OpenGL之类的使用GPU的应用程序提供调试支持,Xcode可以捕获CPU绘制出来的每个帧画面,供开发者调试。其中:
屏幕快照 2017-02-20 下午9.17.24.png
  • Automatically Enabled:自动启用,Xcode根据应用代码推断是否提供此功能。也可以单独针对Metal、OpenGL ES框架来进行调试,或者关闭该调试功能。
  • Metal调试开发者还可以选择是否开启Metal的API验证功能,让Xcode检测Metal的API是否能够实现预期的效果。

Background Fetch:后台获取,允许开发者启用后台获取功能,开启后,应用将不会在前台自动显示,会在后台根据相关代码进行后台数据获取操作。需要实现后台获取代码和开启Xcode的权限才能使用。

Localization Debugging:本地化调试,在调试过程中,选择是否输出未经本地化操作的字符串。

Application Language:应用程序语言,选择应用程序运行时所在的平台或者所在的环境的语言,通过该选项,可以模拟应用在不同的国家,不同的语言环境下所工作的情况,默认情况下使用系统语言和区域。

Application Region:应用程序区域,效果同上Application Language。

XPC Services:XPC服务,XPC是OS X处理多进程之间通信的服务,如果使用了该服务,则对其进行调试。

Queue Debugging:队列调试。

4.Diagnostics诊断选项卡

屏幕快照 2017-02-20 下午9.47.51.png

选项卡指定了一些用于测试和调试应用相关设置。
Runtime Sanitization:运行时处理。

  • Address Sanitizer:检测一些内存方面的错误。
  • Thread Sanitizer:检测多线程方面的错误。
  • Pause on Issues:依次查看运行时的问题。

Memory Management:开启一些内存管理相关的服务,这些工具会在控制台调试区域输出:

  • Malloc Scribble:内存涂抹,向分配的内存中填充0xAA,向已经销毁的内存中填入0x55。
  • Malloc Guard Edges:边缘保护,分配大容量的内存前后添加保护。
  • Guard Malloc:动态内存分配保护,使用libgmalloc来捕获常见的内存问题,比如缓冲区溢出。
  • Zombie Objects:僵尸对象,僵尸对象表示已经被销毁的对象,开启后,如果向该对象发送消息,运行时便会输出错误,并可追踪到调用语句。

Logging:设置调试过程中,输出的日志包含的内容。

  • Malloc Stack:动态内存分配栈,记录分配内存和释放内存时相关栈的信息。
  • Dynamic Linker API Usage:记录动态链接相关API的调用信息。
  • Dynamic Library Loads:库加载信息,记录动态链接相关API的调用信息。
2.4.3测试操作Test

指定当前方案使用的单元测试包,如图:

2.4.4剖析操作Profile

决定了我们使用剖析操作时,Xcode会执行何种命令。

2.4.5分析操作Analyze

对编译操作中指定的对象运行静态分析器。

2.4.6打包操作Archive

打包应用程序时进行的一些个性化设置。

2.5额外操作

点开操作旁边的三角形,会出现:

屏幕快照 2017-02-20 下午10.40.41.png
  • Pre-actions:操作启用之前所完成的工作。
  • Post-actions:操作启用之后所完成的工作。

选中其中一项,然后可以添加脚本或者添加一个发送邮件的操作。


屏幕快照 2017-02-20 下午10.43.54.png

我们添加一个编译完成后,发送邮件的动作和执行脚本的动作:

屏幕快照 2017-02-20 下午10.47.02.png

3 运行目标

指定应用在哪一个设备上运行。

屏幕快照 2017-02-20 下午10.49.20.png

还可以设置目标架构和SDK版本。通过Window->Devices进入设备管理界面:

屏幕快照 2017-02-20 下午10.52.27.png

很多朋友想添加老版本SDK的模拟器,可以通过下方添加按钮添加:

屏幕快照 2017-02-20 下午10.53.58.png

点开如果发现没有你想要的SDK版本,点开OS Version,选中下载更多版本即可进入如下界面:

屏幕快照 2017-02-20 下午10.54.50.png

下载你要的SDK版本即可。

如果是真机,显示的数据更模拟器比起来会有所不同。

屏幕快照 2017-02-20 下午10.59.14.png

真机可以通过View Device Logs查看真机保存的调试日志,Take Screenshot可以截取当前设备上的画面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容