XCode启动参数和环境变量
Posted iOS开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XCode启动参数和环境变量相关的知识,希望对你有一定的参考价值。
来源 | CSDN-Leo的专栏
前言
Options
Argument Passed On Launch
启动参数用来覆盖NSUserDefaults中的默认值。
语言
AppleLanguages可以用来设置启动的语言。
-AppleLanguages (zh-Hans)
English (U.S.) en
English (UK) en-GB
English (Australian) en-AU
English (Indian) en-IN
French fr
Spanish es
Portuguese pt
German de
Italian it
Chinese (Simplified) zh-Hans
Chinese (Traditional) zh-Hant
Japanese ja
Korean ko
Russian ru
本地化
-NSDoubleLocalizedStrings YES
-NSShowNonLocalizedStrings YES
开启这个参数,运行项目,对于没有本地话的字符串,会打印出log,并且在英文环境下,没有被本地话的字符串会变成全部是大写的:
2018-06-09 17:16:23.899756+0800 LaunchArgumentDemo[1592:42786] [strings] ERROR: FlZ-Ch-fUI.text not found in table Main of bundle CFBundle 0x7ffd464002e0 …/Bundle/Application/43466A60-F706-4CCE-A3D5-064C05CD04C6/LaunchArgumentDemo.app> (executable, loaded)
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Leo'Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FlZ-Ch-fUI">
<rect key="frame" x="278" y="626.5" width="77" height="20.5"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
Core Data
log等级分为1到3,越高越详细
-com.apple.CoreData.SQLDebug 3
Log如下
CoreData: sql: pragma cache_size=1000
CoreData: sql: SELECT ...
-com.apple.CoreData.MigrationDebug
Environment Variable
对比启动参数,环境变量的作用域更广一些,它更像是App的全局变量,在应用内任何地方都可以访问到。
[[NSProcessInfo processInfo] environment]
dyld
DYLD_PRINT_STATISTICS
DYLD_PRINT_STATISTICS_DETAILS
Total pre-main time: 823.29 milliseconds (100.0%)
dylib loading time: 226.83 milliseconds (27.5%)
rebase/binding time: 391.41 milliseconds (47.5%)
ObjC setup time: 72.95 milliseconds (8.8%)
initializer time: 131.81 milliseconds (16.0%)
slowest intializers :
libSystem.dylib : 12.17 milliseconds (1.4%)
Foundation : 45.39 milliseconds (5.5%)
libMainThreadChecker.dylib : 74.21 milliseconds (9.0%)
DYLD_FRAMEWORK_PATH
DYLD_FALLBACK_FRAMEWORK_PATH
DYLD_VERSIONED_FRAMEWORK_PATH
DYLD_LIBRARY_PATH
DYLD_FALLBACK_LIBRARY_PATH
DYLD_VERSIONED_LIBRARY_PATH
DYLD_PRINT_TO_FILE
DYLD_SHARED_REGION
DYLD_INSERT_LIBRARIES
DYLD_FORCE_FLAT_NAMESPACE
DYLD_IMAGE_SUFFIX
DYLD_PRINT_OPTS
DYLD_PRINT_ENV
DYLD_PRINT_LIBRARIES
DYLD_BIND_AT_LAUNCH
DYLD_DISABLE_DOFS
DYLD_PRINT_APIS
DYLD_PRINT_BINDINGS
DYLD_PRINT_INITIALIZERS
DYLD_PRINT_REBASINGS
DYLD_PRINT_SEGMENTS
DYLD_PRINT_STATISTICS
DYLD_PRINT_DOFS
DYLD_PRINT_RPATHS
DYLD_SHARED_CACHE_DIR
DYLD_SHARED_CACHE_DONT_VALIDATE
Zombie
开启Zombie,当对象被释放后,他们仍然在内存里,只不过视图访问僵尸对象会报错,可以用于调试EXC_BAD_ACCESS。
NSZombieEnabled YES
MallocDebug
内存相关的bug是很难调试的,幸运的是XCode为我们提供了一系列工具,这组工具就是malloc debug。
MallocStackLogging
MallocScribble
原理:以OC对象为例,对象被释放后,内存被标记为回收,但是在第二次写入前,内存还是之前的OC对象;这就导致了即使对象被释放了,只有内存被覆盖后的野指针访问才会crash。
MallocGuardEdges
这个环境变量用处比较少,起码我写了这么久的代码,还没有遇到过MallocGuardEdges帮我找到的内存问题。
MallocGuard
DYLD_INSERT_LIBRARIES /usr/lib/libgmalloc.dylib
举例:
int * array = malloc(sizeof(int) * 10);
for (int index = 0; index < 20; index ++) {
array[index] = index;
}
自定义
NSDictionary * environments = [[NSProcessInfo processInfo] environment];
BOOL logOn = [[environments objectForKey:@"Network_Log_Enabled"] isEqualToString:@"YES"];
参考
[2]https://github.com/LeoMobileDeveloper/Blogs/blob/master/iOS/What%20happened%20at%20startup%20time.md
[3]https://developer.apple.com/library/archive/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html
[4]http://nshipster.cn/launch-arguments-and-environment-variables/
推荐↓↓↓
长
按
关
注
以上是关于XCode启动参数和环境变量的主要内容,如果未能解决你的问题,请参考以下文章