如何针对特定构建配置排除Objective-C包中的部分代码?
直接在包目标中配置预处理器宏
每个Objective-C包都是独立的构建目标,主项目的宏设置不会自动同步到包。找到包对应的target,进入Build Settings,搜索Preprocessor Macros,针对目标构建配置(比如Release)设置DEBUG=0,Debug配置保留DEBUG=1,这样包内的#if DEBUG分支就能根据当前构建配置正确生效。按构建配置管理编译文件
给包内需要区分的代码文件添加标识后缀,比如Debug专属文件命名为xxx_Debug.m,Release专属文件命名为xxx_Release.m。进入包的target的Build Settings,找到Compile Sources列表,针对不同构建配置勾选对应文件:Debug配置勾选xxx_Debug.m并取消xxx_Release.m的勾选,Release配置则反向操作,实现不同配置下编译不同代码。自定义专属宏避免冲突
放弃使用默认的DEBUG宏,在包的Build Settings里针对不同构建配置定义专属宏,比如Debug配置设PACKAGE_DEBUG=1,Release配置设PACKAGE_DEBUG=0。然后修改包内代码:#if PACKAGE_DEBUG something 1 #else something 2 #endif这样完全由包自身的构建配置控制代码分支,不会和主项目的宏产生冲突。
拆分代码文件+条件引入
将需要区分的代码拆分为两个独立文件,比如DebugLogic.h/DebugLogic.m和ReleaseLogic.h/ReleaseLogic.m,然后在包的核心文件中通过条件编译引入对应文件:#if PACKAGE_DEBUG #import "DebugLogic.h" #else #import "ReleaseLogic.h" #endif配合包的构建配置设置
PACKAGE_DEBUG的值,实现不同配置下加载不同逻辑代码。
内容的提问来源于stack exchange,提问作者Rick Huang

