文章搬运来源:www.jianshu.com/p/c40b31400…html
做者:differ_iOS面试
对iOS开发感兴趣,能够看一下做者的iOS交流群:812157648,你们能够在里面吹水、交流相关方面的知识,群里还有我整理的有关于面试的一些资料,欢迎你们加群,你们一块儿开车xcode
本篇文章主要介绍多环境配置 & Mach-O与连接器 & Symbolmarkdown
多环境配置主要有如下几种形式:架构
- 经过多
Target
可对不一样的Target
设置不一样的Bundle ID
用于区分开发ID
或生产ID
- 也能够针对不一样的
Target
配置不一样的App Icon、App Display Name
- 还能够在
Build Phases
中针对不一样的Target
增减编译的源文件和资源文件
若是是OC
代码中使用DEV
预约义宏:app
若是是Swift
代码中使用DEV
预约义宏:iphone
其中-D的含义查看以下:(也就是将声明的变量设置为TRUE)oop
使用以下代码便可实现:测试
#if DEV
NSLog(@"DEV");
#else
NSLog(@"xxx");
#endif
复制代码
经过添加不一样的Scheme
对应不一样开发环境ui
Info.plist
中添加以下字段供外界调用:
使用代码以下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
复制代码
经过多
Scheme
也能够经过Build Settings
配置不一样的图标...
Pod 中引入的文件就是经过xcconfig
文件管理Build Settings
中的配置
建立本身的xcconfig
文件,并修改系统xcconfig
文件配置:
注意:
xcconfig
文件的命名须要以所在文件夹的名称做为前缀而后是项目名、环境名称
xcconfig
定义不一样环境的HOST_URL
Config-TestCode-debug.xcconfig
文件中添加:HOST_URL = http://192.168.1.100
Info.plist
中添加以下字段供外界调用:
使用代码以下:
NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);
复制代码
Config-TestCode-debug.xcconfig
文件中添加动态库的配置:OTHER_LDFLAGS = -framework "AFNetworking"
HOST_URL = 192.168.1.100
// ld
OTHER_LDFLAGS = -framework "AFNetworking"
复制代码
xcconfig
文件本质就是Key-Value
,能够配置Build Settings
中的绝大部分字段xcconfig
文件中对应Build Settings
中字段的缩写对应关系参考: Xcode Build Settings
若是使用本身建立的xcconfig
文件那么执行pod install
就会提示咱们pod
生成的xcconfig
文件可能不会产生效果。要解决这个问题就须要在咱们本身建立的xcconfig
文件中引入pod
生成的xcconfig
文件:
// 绝对路径、相对路径均可以
#include "Pods/Target Support Files/Pods-TestCode/Pods-TestCode.debug.xcconfig"
复制代码
本身建立的xcconfig
文件中存在pod
生成的xcconfig
文件中相同的字段,那么就会覆盖pod
中的字段,所以要想两个文件中的字段都生效须要使用继承标识:
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
复制代码
// 经过定义一个变量来解决
SLASH =/
HOST_URL = http:${SLASH}/192.168.1.100
复制代码
config=Debug
][sdk=iphonesimulator*
][arch=x86_64
] = $(inherited) -framework "AFNetworking"通过上述条件设置后AFNetworking
库仅会在Debug、模拟器、X86_64
架构下编译 [sdk=iphoneos*]表示真机