iOS-开发进阶01:多环境配置

文章搬运来源:www.jianshu.com/p/c40b31400…html

做者:differ_iOS面试

对iOS开发感兴趣,能够看一下做者的iOS交流群:812157648,你们能够在里面吹水、交流相关方面的知识,群里还有我整理的有关于面试的一些资料,欢迎你们加群,你们一块儿开车xcode

本篇文章主要介绍多环境配置 & Mach-O与连接器 & Symbolmarkdown

1、多环境配置

多环境配置主要有如下几种形式:架构

  • Project: 包含了项目的全部的代码、资源文件、全部信息...
  • Target: 对指定代码和资源文件的具体构建方法
  • Scheme:对指定Target的环境配置
  • xconfig:将配置写到对应的文件中
一、建立多Target

  • 经过多Target可对不一样的Target设置不一样的Bundle ID用于区分开发ID生产ID
  • 也能够针对不一样的Target配置不一样的App Icon、App Display Name
  • 还能够在Build Phases中针对不一样的Target增减编译的源文件和资源文件
应用场景:仅在开发Target下测试一个功能

若是是OC代码中使用DEV预约义宏:app

若是是Swift代码中使用DEV预约义宏:iphone

其中-D的含义查看以下:(也就是将声明的变量设置为TRUE)oop

使用以下代码便可实现:测试

#if DEV
    NSLog(@"DEV");
#else
    NSLog(@"xxx");
#endif

复制代码
二、建立Scheme

经过添加不一样的Scheme对应不一样开发环境ui

应用场景:不一样的开发环境配置不一样的HOST

Info.plist中添加以下字段供外界调用:

使用代码以下:

NSString *infoPath = [NSBundle.mainBundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *infoDic = [[NSDictionary alloc] initWithContentsOfFile:infoPath];
NSLog(@"%@",infoDic[@"HOST_URL"]);

复制代码

经过多Scheme也能够经过Build Settings配置不一样的图标...

三、经过xcconfig文件管理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

2、xcconfig文件冲突解决

若是使用本身建立的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"

复制代码

3、xconfig文件使用中的问题

一、URL变量中存在//,后面的字符串会被当作注释
// 经过定义一个变量来解决
SLASH =/
HOST_URL = http:${SLASH}/192.168.1.100

复制代码
二、使用变量时 {}和 ()包括变量做用相同
三、条件设置
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64] = $(inherited) -framework "AFNetworking"

通过上述条件设置后AFNetworking库仅会在Debug、模拟器、X86_64架构下编译 [sdk=iphoneos*]表示真机

相关文章
相关标签/搜索