xcode汽车中对于文件函数使用的配置?

self.life(&iOS developer&)
Xcode 常用编译选项设置
乍一看,这些设置可能太麻烦,其实它真的可以节省许多调试应用的时间,在xcconfig文件中指定即可。用标准库连接LINK_WITH_STANDARD_LIBRARIES = YES如果激活此设置,那么编译器在链接过程中会自动使用通过标准库的链接器。Info.plist 输出编码INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的输出编码(默认情况下,输出与输入的编码保持不变),这个输出编码能指定“binary”或者“XML”。生成调试符号GCC_GENERATE_DEBUGGING_SYMBOLS = NO当启用的时候,详情等级能够通过build的'Level of Debug Symbols'设置去控制。隐藏内联方法GCC_INLINES_ARE_PRIVATE_EXTERN = YESObjective-C GCGCC_ENABLE_OBJC_GC = Unsupported优化级别GCC_OPTIMIZATION_LEVEL = Fastest, Smallest
[-OS]None: 不做优化使用这个设置,编译器的目标是减少编译成本,使调试产生预期的结果。Fast:优化编译将为大函数占用更多的时间和内存使用这个设置,编译器将尝试减少代码的大小和执行时间,不进行任何优化,需要大量编译时间。Faster:编译器执行几乎所有支持的优化,它不考虑空间和速度之间的平衡与“Fast”设置相比,该设置会增加编译时间和生成代码的性能。编译器不进行循环展开、内联函数和寄存器变量的重命名。Fastest:开启“Faster”支持的所有的优化,同时也开启内联函数和寄存器变量的重命名选项Fastest,smallest:优化代码大小这个设置启用“Faster”所有的优化,一般不增加代码大小,它还执行旨在减小代码大小的进一步优化。C语言方言GCC_C_LANGUAGE_STANDARD = C89警告检查Switch语句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES隐藏局部变量GCC_WARN_SHADOW = YES隐式转换成32位的类型GCC_WARN_64_TO_32_BIT_CONVERSION = YES未完成的Objective-C协议GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES抑制所有的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO初始化时没有完整的括号GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a没有完全的括号,b有):int a[ 2 ][ 2 ] = { 0, 1, 2, 3 };?
int b[ 2 ][ 2 ] = { { 0, 1 }, { 2, 3 } };不匹配的返回类型GCC_WARN_ABOUT_RETURN_TYPE = YES缺少括号GCC_WARN_MISSING_PARENTHESES = YES例子:{
}在结构体初始化时缺少字段GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES缺少函数原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES在文件结尾缺少新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES选择了多个定义的类型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO严格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES把缺少函数原型当作错误GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES把所有的警告当作错误GCC_TREAT_WARNINGS_AS_ERRORS = YES未定义的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES未初始化的自动变量GCC_WARN_UNINITIALIZED_AUTOS = YES未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES未使用的函数GCC_WARN_UNUSED_FUNCTION = YES未使用的标签GCC_WARN_UNUSED_LABEL = YES未使用的参数GCC_WARN_UNUSED_PARAMETER = YES未使用的值GCC_WARN_UNUSED_VALUE = YES当一个语句计算的结果显式的未使用的时候发出警告未使用的变量GCC_WARN_UNUSED_VARIABLE = YES警告-所有过时的函数GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YESoffsetof宏未定义使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YES
没有更多推荐了,Xcode 常用编译选项设置【推荐】
我的图书馆
Xcode 常用编译选项设置【推荐】
Xcode 常用编译选项设置【推荐】
作者: 发布于: 21:47 Saturday
Xcode 常用编译选项设置
在xcconfig文件中指定即可。
用标准库连接
LINK_WITH_STANDARD_LIBRARIES = YES如果激活此设置,那么编译器在链接过程中会自动使用通过标准库的链接器。&
Info.plist 输出编码
INFOPLIST_OUTPUT_FORMAT = binary指定Info.plist文件的输出编码(默认情况下,输出与输入的编码保持不变),这个输出编码能指定“binary”或者“XML”。&
生 成调试符号GCC_GENERATE_DEBUGGING_SYMBOLS = NO当启用的时候,详情等级能够通过build的’Level of Debug Symbols’设置去控制。&隐藏内联方法GCC_INLINES_ARE_PRIVATE_EXTERN = YES&Objective-C GCGCC_ENABLE_OBJC_GC = Unsupported&优化级别GCC_OPTIMIZATION_LEVEL = Fastest, Smallest & [-OS]
C 语言方言GCC_C_LANGUAGE_STANDARD = C89&警告&检查Switch语句GCC_WARN_CHECK_SWITCH_STATEMENTS = YES&隐藏局部变量GCC_WARN_SHADOW = YES&隐式转换成32位的类型GCC_WARN_64_TO_32_BIT_CONVERSION = YES&未完成的Objective-C协议GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = YES&抑制所有的警告GCC_WARN_INHIBIT_ALL_WARNINGS = NO&初始化时没有完整的括号GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES例子(a没有完全的括号,b有):&
不匹配的返回类型
GCC_WARN_ABOUT_RETURN_TYPE = YES&缺少括号GCC_WARN_MISSING_PARENTHESES = YES例子:
在结构体初始化时缺少字段
GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES
&缺 少函数原型GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES&在文件结尾缺少新行GCC_WARN_ABOUT_MISSING_NEWLINE = YES&选择了多个定义的类型(@Selector)GCC_WARN_MULTIPLE_DEFINITION_TYPES_FOR_SELECTOR = NO&严格的Selector匹配GCC_WARN_STRICT_SELECTOR_MATCH = YES&把缺少函数原型当作错误GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES&把所有的警告当作错误GCC_TREAT_WARNINGS_AS_ERRORS = YES&未定义的SelectorGCC_WARN_UNDECLARED_SELECTOR = YES&未初始化的自动变量GCC_WARN_UNINITIALIZED_AUTOS = YES&未知的Pragma指令GCC_WARN_UNKNOWN_PRAGMAS = YES&未使用的函数GCC_WARN_UNUSED_FUNCTION = YES&未使用的标签GCC_WARN_UNUSED_LABEL = YES&未使用的参数GCC_WARN_UNUSED_PARAMETER = YES&未使用的值GCC_WARN_UNUSED_VALUE = YES当一个语句计算的结果显式的未使用的时候发出警告&未使用的变量GCC_WARN_UNUSED_VARIABLE = YES&警告-所有过时的函数GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES&offsetof宏未定义使用的警告GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = YESiphone 常用的&app&-info.plist设置
Application requires iPhone environment如 果应用程序不能在ipod touch上运行,设置此项为true;&
Application uses Wi-Fi如果应用程序需要wi-fi才能工作,应该将此属性设置为true。这么做会提示用户,如果没有打开wi-fi的话,打开wi-fi。为了节省 电力,iphone会在30分钟后自动关闭应用程序中的任何wi-fi。设置这一个属性可以防止这种情况的发生,并且保持连接处于活动状态&
Bundle display name这用于设置应用程序的名称,它显示在iphone屏幕的图标下方。应用程序名称限制在10-12个字符,如果超出,iphone将缩写名 称。&
Bundle identifier这个为应用程序在iphone developer program portal web站点上设置的唯一标识符。(就是你安装证书的时候,需要把这里对应修改)。&
Bundle version这个会设置应用程序版本号,每次部署应用程序的一个新版本时,将会增加这个编号,在app store用的。
&Icon already includes gloss and bevel effects默认情况下,应用程序被设置了玻璃效果,把这个设置为true可以阻止这么做。&
Icon file(这个不用多说了)设置应用程序图标的。&
Main nib file base name应用程序首次启动时载入的xib文件 这个基本用不到。
&Initial interface orientation&确定了应用程序以风景模式还是任务模式启动&
Localizations多语言。应用程序本地化的一列表,期间用逗号隔开,例如 应用程序支持英语 日语,将会适用 English,Japanese.&Status bar is initially hidden&设置是否隐藏状态栏。你懂的。
&Status bar style选择三种不同格式种的一种。
&URL types应用程序支持的url标识符的一个数组。
用URL Scheme进行程序跳转
打开info.plist,添加一项URL types
展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme
展开URL Scheme,将Item1的内容修改为myapp
其他程序可通过myapp://访问此自定义URL
参考:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
IOS后台播放音乐
OS后台播放只是在IOS4.0以后的版本支持。
1,设置后台播放会话
AVAudioSession *session = [AVAudioSession sharedInstance];
[session setActive:YES error:nil];
[session setCategory:AVAudioSessionCategoryPlayback error:nil];
2,在info.plist里面添加
&key&UIBackgroundModes&/key&
&string&audio&/string&
静态库没法包含category/分类?
如果你导入一个objc静态库,发现很多objc的category 不能调用,可以尝试在主工程中加入linker选项:
-all_load 加入这个一般就够了
让程序最小化再开启时,从头开始:
按下 “Home” 键以后程序可能并没有退出而是转入了后台运行。如果您想让应用直接退出,最简单的方法是:在 info-plist 里面找到 Application does not run in background 一项,勾选即可。
程序退出后任务栏还是有图标,但是程序原来的所有运行状态全部丢失,点击任务栏图标也不过相当于再次启动程序;如果允许后台运行,点击任务栏图标后会恢复程序中断时的界面。
本地化字符串:
在infoPlist.strings里面写
“string1″=”水果”
代码里面写 myLabel.text = NSLocalizedString(@”string1″, nil);
本地化的Bundle display name:
1)创建一个空文件,取名为InfoPlist.strings
2)对InfoPlist.strings进行本地化(Get Info&&-& Make Localization),然后设置需要的语言(如中文zh)
3)编辑不同的InfoPlist.strings文件,设置显示名字
CFBundleDisplayName = “名字”;&
4)(这步不做貌似也可以)编辑Info.plist,添加一个新的属性Application has localized display name, 设置其类型为boolean,并将其value设置为选中状态
default图片的衔接问题:
程序开始后,手动加载default图片,然后进行过渡效果即可。
遍历目录:
NSString *appDocDir = [[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] relativePath];NSArray *contentOfFolder = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:appDocDir error:NULL];for (NSString *aPath in contentOfFolder) { NSLog(@"apath: %@", aPath); NSString * fullPath = [appDocDir stringByAppendingPathComponent:aPath]; BOOL isD if ([[NSFileManager defaultManager] fileExistsAtPath:fullPath isDirectory:&isDir] && !isDir) { [fileList addObject:aPath]; }}IB:
不论写不写property的retain,由IBOutlet都会为对象加一个retainCount,所以只要连接了,就需要在viewDidUnload与dealloc中release并适当置为nil。
预先在IB里面加载好的文件(比如图片),即使释放了Controller,IB中的文件也不会被释放,直至内存警告,解决办法是较大的资源用代码加载。
UIWebView:
用代码加载UIWebView的内容,navigationType是UIWebViewNavigationTypeOther
CAAnimation:
一定要记得[self.view.layer removeAllAnimations];因为CAAnimation会retain它的delegate
设备型号识别,可通过审核:
+ (NSString*)getDeviceVersion{ size_ sysctlbyname("hw.machine", NULL, &size, NULL, 0); char *machine = (char*)malloc(size); sysctlbyname("hw.machine", machine, &size, NULL, 0); NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; free(machine);}输出:
//@”iPad1,1″&
//@”iPad2,1″&
//@”i386″
逗号后面数字解释:(i386是指模拟器)
2-GSM/WCDMA 3G版
AppleTV(2G) (AppleTV2,1)
iPad&(iPad1,1)
iPad2,1 (iPad2,1)Wifi版
iPad2,2 (iPad2,2)GSM3G版
iPad2,3 (iPad2,3)CDMA3G版
iPhone&(iPhone1,1)
iPhone3G (iPhone1,2)
iPhone3GS (iPhone2,1)
iPhone4 (iPhone3,1)
iPhone4(vz) (iPhone3,3)iPhone4 CDMA版
iPhone4S (iPhone4,1)
iPodTouch(1G) (iPod1,1)
iPodTouch(2G) (iPod2,1)
iPodTouch(3G) (iPod3,1)
iPodTouch(4G) (iPod4,1)
判断ipad/iphone
12UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPadUI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone或者
1[[[UIDevice currentDevice] model] isEqualToString:@"iPad"];判断设备是否有摄像头
1[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; 标签:
BLOG: Air Jordan Shoes 04:49
BLOG: toms shop 03:07
BLOG: Inter Milan Jersey 02:50
BLOG: ray ban sunglasses sale 23:07
BLOG: Ralph Lauren UK 23:07
BLOG: 整形 12:07
BLOG: hermes replica handbags 11:55
BLOG: toms coupons 11:52
BLOG: louis vuitton replica luggage bags 03:45
BLOG: cheap apple ipad 09:35
BLOG: fake tory burch shoes 18:27
BLOG: louis vuitton fake 17:52
BLOG: toms s 17:14
BLOG: toms shoes 14:02
BLOG: toms shoes in stores 08:52
BLOG: oakley sunglasses 03:05
BLOG: CHANEL HANDBAGS 01:10
BLOG: QuMgrFNU 00:31
BLOG: where can i buy toms 14:45
BLOG: Mulberry Handbags For Sale 21:15
BLOG: Wedding Dresses 2013 21:15
BLOG: hermes replica 15:55
BLOG: Handbags Chanel 19:23
BLOG: Handbags Hermes 07:21
BLOG: dress herve leger 10:23
BLOG: Nike 5.0 Free 22:19
BLOG: herve leger sale 05:54
BLOG: chanel wallet 05:53
BLOG: chanel purses 05:53
BLOG: christian louboutin shoes 18:44
BLOG: 整形美容 20:55
BLOG: Pig 00:34
BLOG: Cheap Louis Vuitton Bags 05:11
BLOG: Discount Ray ban Sunglasses 05:11
BLOG: louis vuitton outlet 17:46
BLOG: Prada Bags 17:42
BLOG: Cheap Ray Ban Sunglasses,fake ray ban sunglasses,Replica ray ban sunglasses 09:44
BLOG: CHRISTIAN LOUBOUTIN OUTLET 01:21
BLOG: burberry bags 17:56
BLOG: CHEAP IPHONE 5 10:59
BLOG: coach bags 10:58
BLOG: txGUvbAQ 20:13
BLOG: 拉拉用品 19:16
蓝鸥iOS开发者联盟在线:http://www.lanou3g.com
发表评论:
邮件地址 (选填)
个人主页 (选填)
喜欢该文的人也喜欢主题 : Xcode和object-c里面设置环境变量
级别: 新手上路
可可豆: 61 CB
威望: 61 点
在线时间: 3(时)
发自: Web Page
来源于&&分类
Xcode和object-c里面设置环境变量&&&
最近做一个项目的时候,遇到了环境变量方面的问题,比如,export PATH=“”之类的环境变量的设置&&&具体说明如下:&&&在Xcode里面设置环境变量,分为两种情况,&&&一种是只在Xcode运行环境里面生效(单独打开App文件运行,环境变量不起作用)&&&一种是在Xcode运行环境里面和单独打开App文件运行都有效&&&&&第一种情况:只在Xcode运行环境里面生效&1、从工具条上面,选择你的工程名字,下拉菜单里面打开“Edit Scheme”,选择“Arguments”, 在 Environment Variables 里面添加即可&&&第二种情况:在Xcode运行环境里面和单独打开App文件运行都有效&1、用到了函数 int setenv(const char *name,const char * value,int overwrite);&函数说明如下:&参数 name为环境变量名称字符串。&参数 value则为变量内容。&参数 overwrite用来决定是否要改变已存在的环境变量。如果overwrite不为0,则改变环境变量原有内容,原有内容会被改为参数value所指的变量内容。如果overwrite为0,且该环境变量已有内容,则参数value会被忽略。&返回值 执行成功则返回0,有错误发生时返回-1。&这个函数可以放到main函数里面或是你认为合适的地方&&&这样环境变量就设置成功了&&&
级别: 新手上路
可可豆: 8 CB
威望: 8 点
在线时间: 0(时)
发自: Web Page
Xcode和object-c里面设置环境变量
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版在Xcode中使用C++与Objective-C混编
有时候,出于性能或可移植性的考虑,需要在iOS项目中使用到C++。
假设我们用C++写了下面的People类:
//& People.h&
//& MixedWithCppDemo&
//& Created by Jason Lee on 12-8-18.&
//& Copyright (c) 2012年 Jason Lee. All rights reserved.&
#ifndef __MixedWithCppDemo__People__&
#define __MixedWithCppDemo__People__&
#include &iostream&&
class People&
&&& void say(const char *words);&
#endif /* defined(__MixedWithCppDemo__People__) */&
[cpp] view plaincopy
//& People.cpp&
//& MixedWithCppDemo&
//& Created by Jason Lee on 12-8-18.&
//& Copyright (c) 2012年 Jason Lee. All rights reserved.&
#include &People.h&&
void People::say(const char *words)&
&&& std::cout && words && std::&
然后,我们用Objective-C封装一下,这时候文件后缀需要为.mm,以告诉编译器这是和C++混编的代码:
//& PeopleWrapper.h&
//& MixedWithCppDemo&
//& Created by Jason Lee on 12-8-18.&
//& Copyright (c) 2012年 Jason Lee. All rights reserved.&
#import &Foundation/Foundation.h&&
#include &People.h&&
@interface PeopleWrapper : NSObject&
&&& People *&
- (void)say:(NSString *)&
[cpp] view plaincopy
//& PeopleWrapper.mm&
//& MixedWithCppDemo&
//& Created by Jason Lee on 12-8-18.&
//& Copyright (c) 2012年 Jason Lee. All rights reserved.&
#import &PeopleWrapper.h&&
@implementation PeopleWrapper&
- (void)say:(NSString *)words&
&&& people-&say([words UTF8String]);&
最后,我们需要在ViewController.m文件中使用PeopleWrapper:
PeopleWrapper *people = [[PeopleWrapper alloc] init];&
[people say:@&Hello, Cpp.\n&];&
[people release], people =&
结果发现编译通不过,提示&iostream file not found&之类的错误。
这是由于ViewController.m实际上也用到了C++代码,同样需要改后缀名为.mm。
修改后缀名后编译通过,可以看到输出&
Hello, Cpp.Xcode基本操作
招聘信息:
2.偏好设置通过“command+,”快捷键或”Xcode|Preferences”菜单呼出偏好设置。(1)主题及字体(Preferences->Fonts & Colors)选中一种主题(theme),例如“Midnight”,然后shift选择Source Editor/Console中的所有项,点击Fonts设置字体。Xcode默认字体为menlo,可选Consolas、Monaco等其他等宽字体。(2)文本编辑配置(Preferences->Text Editing)Editing:Show Line Numbers:在gutter中显示行号。Code folding ribbon:显示折叠ribbon。Page guide at column:显示一行最多支持80个字符的提示分割线。Indentation:Prefer indent using:Spaces(为保持一致的视觉呈现和行末注释对齐,建议使用空格)Tab width:4 spaces(tabexpand,1个tab=4个空格)Indent width:4 spaces(自动缩进步长=4个空格)(3)SCM(Preferences->Source Control)Enable Source Control:启用/禁用XCode自带Source Control Manager(SCM)。(4)SDK/Simulator(Preferences->Downloads)Downloads->Components:可下载SDK和Simulator。(5)构建输出目录(Preferences->Locations->Locations)当选择为Default时,Derived Data的目录为~/Library/Developer/Xcode/DerivedData。当选择为Relative时,Derived Data的目录为当前.xcodeproj所在的目录。当选择为Custom时,Derived Data的目录需自定义。不建议使用绝对路径,因为写死之后,换环境或换平台,又要重新修改路径,建议使用相对路径(Relative)。3.代码阅读(1)View Navigatorcommand+0:Show/Hide left tool panelcommand+1-8:Project/Symbol/Find/Issue/Test/Debug/Breakpoint/Log Navigatoroption+command+0:Show/Hide right tool paneloption+command+1/2:show the file/quick help inspector(2)View Editor Organizationcontrol+1:Show Related Items(例如Superclasses/Subclasses、Callers/Callees、Protocol Implementor/Implemented、Includes/Included By)。可输入实时搜索匹配。control+2/3:Show Previous/Next History。可输入实时搜索匹配。control+4:Show Top Level Items。control+5:Show Group Files(当前文件夹内的所有文件)。可输入实时搜索匹配。control+6:Show Document Items(当前文件的Symbols)。可输入实时搜索匹配。可直接选中符号,然后“Navigate->Reveal in Symbol Navigator”,打开该接口的符号列表。(3)Focus Switchcommand+J:焦点切换(Move Focus),可配合鼠标和方向键。带‘+’的“Move focus to a new assistant editor”可以快速在辅助编辑窗口中打开头文件(*.h)/实现文件(*.m,*.mm)。shift+command+J:在项目导航中定位当前文件(Reveal in Project Navigator)。(4)Symbol Jumpcontrol+command+↑/↓:切换头文件/实现文件(switch between a source file (.m,*.mm,*.cc) and the associated header file(.h))。shift+command+O:Open Quickly,可快速查找文件、符号。command+点击Editor中选中的符号:跳转到符号定义(jump to definition)。control+command+J:跳转到指定符号的定义处或实现处(Go to Declaration/Definition)。有时工程正在Loading、Indexing或Processing files时,“command+点击”无法响应,此时可试试control+command+J。在Project Navigator中选中文件右键或通过菜单“File->Show in Finder”:在Finder中定位该文件。(5)Symbol Navigatorcommand+点击Editor中选中的非单一层次定义符号:Show in Symbol Navigator:filter0:底部输入符号(show symbols with matching name)= filter1 result+filter3 resultfilter1:show only class and protocol symbols (hide other global symbol types),包括project和system层次。filter2:show only project-defined symbols,过滤显示当前工程中的符号。filter2的结果是filter1的子集,较常用。filter3:show only containers(hide members),过滤显示包含该单词的符号。(6)Helpoption+点按:查看选中符号的帮助提示(Quick Help for Selected Item)。option+双击:打开选中符号的帮助文档。4.代码编辑(1)File | Newcontrol+command+N:File | New | Workspaceshift+command+N:File | New | Project(2)Text Editingcommand+[/]:向前/向后缩进option+command+[/]:Move Line Up/Downcommand+/:注释选中的代码Parentheses/Brackets/Braces Matching:双击某个分隔符(如()、[]、{} 等),Xcode会选中匹配代码块。(3)Eidtor Window/Tab Switchcommand+shift+[/]:切换标签页单指左右滑动(control+command+←/→):在单标签页打开的多个文件间切换(4)Code Foldingoption+command+←/→:折叠当前代码块option+shift+command+←/→:折叠该文件内所有代码块(方法/函数)(5)Console & Schemeshift+command+Y:显示控制台(Show/Hide the debug area)option+command+R:编辑配置(Edit Scheme)(6)Gutter & Ribbon焦点列:灰色深度与代码嵌套深度相关,鼠标悬停可突出显示右侧相应代码块,鼠标单击可折叠右侧相应代码块(Code Folding)。说明:从左到右,依次是“导航窗格(Navigator)->边列(Gutter)->焦点列(FocusRibbon)->代码编辑窗口(Standard Editor)”。(7)Auto Completionesc(command+.):就当前输入上下文呼出/隐藏AutoCompletion提示:上下方向键在提示中选择选项,enter(return)选中,tab可一截一截匹配;tab可在各个占位符之间移动。输入Objective-C对象及 ],自动完成中缀符(infixnatation)包围。(8)Find & Replacecommand+F:当前文件查找。option+command+F:当前文件替换。Find:可指定查找内容(Text/References/Definitions/Regular Expression);放大镜:下拉可查看最近查找历史;In Project:查找范围(可指定Group);Text:匹配规则(可指定Containing,Matching,Starting with,Ending with);Case:是否区分大小写(可指定 Matching/Ignoring)。shift+command+F(command+3):全局查找。也可以在选择符号后,右键(control+点击)->Find Selected Text in workspace...option+shift+command+F:全局替换。Replace:逐个替换;All:所有替换;Done:替换完成。5.辅助编辑(Assistant Editor)Assistant Editor有点类似VC中的Code Definition Window。option+command+enter:打开Assistant Editor。command+enter:关闭Assistant Editor。使用快捷键进行切换或跳转动作时,若同时按下option可以在辅助编辑窗口中打开相应文件或符号(For optional navigation (Option-clicking or Option-choosing a file), opens the file in a new Assistant editor pane.)。若在辅助窗口中操作,则在主窗口(Standard Editor)中打开。option+点击Project Navigator中选中的文件:在辅助编辑窗口中打开选中文件。option+command+点击Editor中选中的符号:在辅助编辑窗口中打开符号定义(jump to definition in assistant editor)。option+control+command+↑/↓:在辅助窗口中打开对应的头文件(*.h)/实现文件(*.m,*.mm,*.cc)。点击查看shift+command+O、shift+command+F(command+3)选中的文件或符号时,可同时按下option在辅助编辑窗口中打开。在control+1~6中打开选择结果时,均可同时按下option在辅助编辑窗口中打开。若在按下option的同时按下shift通常会出现一个导航窗格,可选择在new window/tab/assistant-editor显示打开。ForOption-Shift navigation (Option-Shift-click or Option-Shift-choose a file), Xcode displays a graphical navigation chooser showing the current layout. The chooserprompts you to open the file in anyopen editor pane in any window and tab, or to open the file in anew editor pane, window, or tab.6.环境变量(Build Setting Macros)(1)查看环境变量宏命令行进入HelloWorld工程目录,执行xcodebuild命令并带上“-showBuildSettings”参数:$ xcodebuild -project HelloWorld.xcodeproj -target HelloWorld -configuration Debug -showBuildSettings > xcodebuild_showBuildSettings.txt则xcodebuild_showBuildSettings.txt中保存了Build settings for action build and target "HelloWorld”,其中dump了所有的环境变量。(2)Xcode5(Mac OS X 10.9)的部分环境变量约定1:~=当前账户的HOME目录,例如“/Users/faner”。约定2:build构建基础路径:BUILD_PATH = ~/Library/Developer/Xcode/DerivedData/Build。可通过“File->Project Settings”查看Derived Data Location。约定3:环境变量宏(Build Setting Macros)引用格式:${MACRO},同Build Phases Run Script中的语法。下面是摘选自xcodebuild_showBuildSettings.txt的部分常用环境变量。(a) ARCH & PLATFORM & SDKARCHS = i386CURRENT_ARCH = i386PLATFORM_DIR = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platformPLATFORM_NAME = macosxSDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdkSDK_DIR = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdkSDK_NAME = macosx10.9(b) PROJECT & SOURCEPROJECT = HelloWorldPROJECT_DIR =~/Projects/Learn Objective-C/HelloWorldPROJECT_FILE_PATH =${PROJECT_DIR}/HelloWorld.xcodeprojPROJECT_NAME = HelloWorldSOURCE_ROOT =${PROJECT_DIR}SRCROOT =${PROJECT_DIR}(c) BUILD & CONFIGURATIONBUILD_DIR =BUILD_PATH/ProductsBUILD_ROOT =BUILD_PATH/ProductsBUILT_PRODUCTS_DIR =BUILD_PATH/Products/DebugCONFIGURATION = DebugCONFIGURATION_BUILD_DIR =BUILD_PATH/Products/DebugCONFIGURATION_TEMP_DIR =BUILD_PATH/Intermediates/HelloWorld.build/Debug(d) PRODUCT & TARGETPRODUCT_NAME = HelloWorldPRODUCT_TYPE = com.apple.product-type.tool// Project Template: Command Line ToolTARGET_BUILD_DIR =BUILD_PATH/Products/DebugTARGET_NAME = HelloWorld(3)设置环境变量Product -> Edit Scheme(option+command+R)->Arguments->Environment Variables中可以添加自定义环境变量(Name为名称,Value为值)。7.运行调试(1)Consoleshift+command+Y:显示控制台(Show/Hide the debug area)shift + command + K:清除控制台(Clean)(2)BuildProduct -> Edit Scheme(option+command+R)->Info->Build Configuration:选择生成版本(Debug or Release)command + B:构建(Buid)(3)Target一个Target是指在一个Project中构建的一个产品,它包含了构建该产品的所有文件,以及如何构建该产品的配置。一个定义好构建过程的Target成为一个Scheme,可在Scheme中定义Target的六种构建过程:Build/Run/Test/Profile/Analyze/Archive。Product -> Edit Scheme(option+command+R)->Manage Schemes可对Scheme的六种构建过程进行配置(可配置项包括Info、Arguments、Options)。在Project Navigator中选中某个xcodeproj(例如QQ.xcodeproj),将进入Project Setting页面,可点击左侧图标show/hide project and targets list:点击targets项可分别设置各target的Build Settings;右击可对target进行delete。(4)Issue & Errors编译错误(error)和警告(warning)过多时,只显示编译错误:点击底端的感叹号,即可只显示编译错误,忽略编译警告:(5)Runcommand + R:运行(Run),可能会先编译。若按下control直接运行上次build的product(Run Without Building)。command + .:停止运行(Stop)(6)Breakpointcommand + \:当前行设置/取消断点;通过鼠标点击蓝色断点来启用/禁用当前行断点。command + Y:全局激活或禁用所有的断点,激活进入调试模式(此时断点蓝色可见)。边列(Gutter)中的断点/警告可右键呼出Reveal in Breakpoint/Issue Navigator。trick:编辑断点(Edit Breakpoint):Condition:设置断点的触发条件,例如“i==3”(注意不能有空格)表示当i等于3时该断点才会被触发。Ignore:设置断点需要被忽略多少次才会中断,若设置成5则表示第6次遇到该断点时才触发。Action:设置断点触发时的动作,可以为Debugger Command、Log Message、Shell Command或Sound。例如可设置以下Debugger Command:(1)读取std::string sig的内存buffer值:mem read sig.c_str() -c sig.size();(2)打印NSData实例sig:po sig(7)DebugF6:下一步(Step Over),逐过程单步调试,不进入函数体。(fn+)F7:进入(Step Into)函数体。可能与多媒体键有冲突,故需要fn辅助。(fn+)F8:跳出(Step Out)函数体。可能与多媒体键有冲突,例如呼叫iTunes,故需要fn辅助。control+command+Y:逐断点(continue)继续执行。trick:移动指令指针(Move the instruction pointer):断点调试运行时,可以将绿色指针箭头(Line 47)移动到其他行(Line 49)或其他断点(Line 51)实现跳转执行。(8)Watchshift+command+M:Debug Workflow->View Memory。command+K:Debug Workflow->Clear Console。Debug Workflow->ShowDisassembly When Debugging,可进行汇编指令级调试。trick:修改变量内存值():调试运行时,可以在底部的调试窗口(Debug Area,可通过Shift+Command+Y呼出)右键某个变量,除了可以进行View Memory/View Value As之外,还可以选择Edit Value运行时编辑内存变量的值。这种手动设置指定值,在调试某些难以复现的bug或进行边界测试非常有用,可以避免在验证某个问题时反复改值重新编译。(9)lldb调试命令:n/next:step over;s/step:step into;finish:step out;c/continue:goto next breakpoint;expr/expression:Evaluate a C/ObjC/C++ expression(动态执行C/ObjC/C++表达式);p/print/expr/expression:print as a C/C++ basic variable;po/expr -O/expression -O:Print as an Objective-C object;call:调用。其实上述p/po后接表达式(expression)也有调用的功能,一般只在不需要显式输出,或是无返回值时使用call,用于动态调试插入调用代码。& & 例如可以在viewDidLoad:里面设置断点,然后在程序中断的时候输入以下命令:&&&&call&[self.view&setBackgroundColor:[UIColor&redColor]]继续运行程序,view的背景颜色将变成红色!bt(backtrace),打印当前调用堆栈(crash堆栈),“bt all”可打印所有thread的堆栈(相当于command+6的Debug Session Navigation)。image:可用于寻址,有多个组合命令,比较实用的一种用法是寻找栈地址对应的代码(行)位置。例如某个UITableView总共有2个section,当其引用的currentSection.index≥2时将会引起[UITableView rectForHeaderInSection:]调用异常,可使用expr动态改值制造crash场景模拟调试。此时crash时的控制台bt显示异常出现在应用层代码“0x00d055b8 - [FACategoryTableView FACategorySectionHeaderDidTouched:] + 744”处(其中0x00d055b8为当前栈(代码段)偏移量,744为偏移量——PC指针相对函数入口的偏移)。那么具体是FACategoryTableView.m文件哪一行代码调用引起的异常呢?此时通过“image lookup --address”后接bt的call stack中的代码段偏移地址(0x00d055b8)即可定位出异常调用的代码行位置。x/memory read:dump指定地址的内存(Read from the memory of the process being debugged),后接起止地址或-c指定count加起始地址。可help mem read查看帮助:Syntax:& & &memory read[]Command Options Usage:& & size指定内存块(block/item)的大小,默认为1byte。& & --size):The size in bytes to use when displaying with the selected format.& &count指定内存块(block/item)的个数,可配合起始地址使用。& &-c( --count):The number of total items to display.& &format指定内容显示格式,格式符同print:c-char,s-string,d-decimal,x-hex。& &-f( --format):Specify a format to be used for display.Command Samples:& &(a)起止地址&&(lldb)mem read 0x10b88f0c 0x10b88f0c+9& & 0x10b88f0c: 39 38 37 36 35 34 33 32 31 & & & & & & & & & & & & &(b)起始地址+内存块count& &(lldb)mem read 0x10b88f0c -c 9& & 0x10b88f0c: 39 38 37 36 35 34 33 32 31 & & & & & & & & & & & & (c)起始地址+内存块size+内存块count(dump hex format)& &(lldb)memory read -s 1 -f x -c 9 0x10b88f0c& &0x10b88f0c: 0x39 0x38 0x37 0x36 0x35 0x34 0x33 0x32& &0x10b88f14: 0x31& (d)起始地址+内存块size+内存块count(dump char format)& (lldb)memory read -s 1 -f c -c 9 0x10b88f0c& 0x10b88f0c: & (e)起始地址+内存块size+内存块count(dump string format)& (lldb)mem read 0x10b5cf2c -f s -c 1& &0x10b88f0c: ""& (f)起始地址+内存块size+内存块count(dump int format)& (lldb)memory read -s 4 -f x -c 3 0x10b88f0c& &0x10b88f0c: 0xxx109f0031memory write:改写指定地址的内存(Write to the memory of the process being debugged)。可help mem write查看帮助:& &Syntax: memory write[[...]](10)启用NSZombieEnabled调试EXC_BAD_ACCESS当你对已释放的对象发送消息(90%的可能是对引用计数为0的对象再release)或release那些autorelease对象时,就会出现报EXC_BAD_ACCESS这样的错误。默认设置下 Xcode不会给你定位具体是哪一行代码不该去使用已释放的对象,或者release用错了。Product -> Edit Scheme(option+command+R) -> Diagnostics ,勾选“Objective-C”之后的“Enable Zombie Objects”。设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie;设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不只是报EXC_BAD_ACCESS Crash,还会放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失, 因此我们可以找到具体或者大概是哪个对象被错误的释放或引用了。注意:NSZombieEnabled只能在调试的时候使用,千万不要忘记在产品发布的时候去掉,因为NSZombieEnabled不会真正去释放dealloc对象的内存,一直开启后果自负!参考《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》《》(via:)
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量4849点击量4404点击量3835点击量3456点击量3217点击量3180点击量3133点击量2980点击量2812
&2016 Chukong Technologies,Inc.
京公网安备89

我要回帖

更多关于 xcode汽车 的文章

 

随机推荐