DO RUBY
  • Mobile
    • Modularization
      • 再谈移动端跨平台框架 Flutter 与 React Native
      • 打造工业级 App 开发流程 (JIRA+CI/CD)
      • 模块化设计-iOS团队协作开发
      • 剖析几种流行的 iOS 设计模式--MVC;MVVM;VIPER
    • iOS Foundation
      • ARC 与内存管理
      • 从头梳理内存与内存管理
      • 事件交付: 响应链
      • iOS 手势识别
      • iOS 手势操作详解
      • UIKit Class Hierarchy
      • iOS 13 兼容性适配检查
      • iOS 上的蓝牙框架 Bluetooth
    • Performance
      • App 启动优化之一:main.m 方法之前的优化
    • Debug
      • 在Xcode里,为项目定义不同的环境配置
      • 调试我们的 APP (iOS)
      • URLCache 设置不当引起的 App 故障
      • ASDebugger -- 超简单的 App 网络监控调试工具
    • Tips
      • Xcode 自动生成 Objective C SDK 文档
      • 无线分发应用--通过 Safari 安装 App
      • 智能的 App Banner - Smart App Banners
      • 点阴影区关闭 Modal View Controller
    • 3rd Party
      • MKNetworkKit Auto Caching
  • Computer Science
    • 重头梳理网络协议栈
  • Productivity
    • Git
      • Gitflow 在客户端开发中的实践
    • Security
      • 10 分钟将你的网站升级到 HTTPS
    • Others
      • FlexBox 使用向导
  • TECH MANAGER
    • Google VP 聊职场干货
    • 无身份建立影响力 Influence without Authority
Powered by GitBook
On this page

Was this helpful?

  1. Mobile
  2. Debug

在Xcode里,为项目定义不同的环境配置

PreviousDebugNext调试我们的 APP (iOS)

Last updated 5 years ago

Was this helpful?

有时项目经常需要配置不同的开发环境,比如Debug, QA, Release, Distribution等。每个环境下,会有各自不同的环境配置项,比如变量,常量,宏定义等。

我们最早的方法是先在Build Settings里先设定 Preprocessor Macros CONFIGURATION_$(CONFIGURATION)

这样我们就可以在代码根据该 Macro 来区分现在所处的环境。通过我们是定义在 Prefix.pch 文件里:


#ifdef CONFIGURATION_Debug
# import "ConfigDebug.h"
#else
# ...
#endif

现在想到的更好的方法是直接修改Prefix Header的引用路径

在 Project 里的 Build Settings 里设定 Prefix Header 文件的导入位置.

settingsPrefixHeader

比如: Test/Config/Test-Prefix-${CONFIGURATION}.pch

我们新建了一个Config目录,然后在里面添加了 Test-Prefix-Debug.pch , Test-Prefix-Release.pch 等不同的环境配置文件.

Test-Prefix-Debug.pch


import "ConfigDebug.h"
...

Test-Prefix-Release.pch

import "ConfigRelease.h"
...
TestMacroDef = 1

Release.xcconfig

TestMacroDef = 0

你可以在Build Settings中看到User-Defined一栏多了你自定义的Macro

我们还可以改变或添加系统默认的定义,比如上面在 Preprocessor Macros里定义的内容,可以这样写

GCC_PREPROCESSOR_DEFINITIONS = kShareKey=1 $(inherited) // inherited 是继承原有的定义

tips: 你可以选中settings的一栏copy, paste 到这个文件中,即可知道定义方法。

如果我们有一些公共的配置文件,可以创建一个 公共的 xcconfig 文件,然后 include 进来即可。

比如

Debug.xcconfig

#include "Shared.xcconfig"

关于各项环境配置应该放在哪儿比较好? 我们有时会定义一些自己的Macro, 通常我们也是象上面一样写在Preprocessor Macros 里。 实际上更好的方法是建立不同的 .xcconfig 文件, 然后将Target的配置指向它们 比如我们建立一个 Debug.xcconfig, Release.xcconfig 将 PROJECT Info => Configurations => target Based on Configuration File 指向不同环境下的config文件。 我们就可以在这个文件上定义自己的Macro了,比如 Debug.xcconfig

targetConfigurations