目的
优先于Masonry的编译定义宏
使用场景
由于项目原因, 必须使用动态库, 所以Podfile文件中添加了use_frameworks!
. 在使用use_frameworks!后, Masory的编译链接优先于PCH, 所以导致就算在PCH中加上了这个宏#define MAS_SHORTHAND也无法使用Masonry提供的精简写法
场景补充1
use_frameworks!
- 用
CocoaPods导入swift框架到swift项目和OC项目都必须要use_frameworks! - 使用
dynamic frameworks,必须要在Podfile文件中添加use_frameworks!
场景补充2
只要添加了#define MAS_SHORTHAND这个宏,就不用带mas_前缀
只要添加了#define MAS_SHORTHAND_GLOBALS这个宏,equalTo就等价于mas_equalTo
所以项目中一般这么写
// 只要添加了这个宏,equalTo就等价于mas_equalTo 不用@()
#define MAS_SHORTHAND_GLOBALS
// 这个头文件一定要放在上面两个宏的后面
#import <Masonry/Masonry.h>
Masonry源码

源码
解决方法
podspec提供了相应的配置
GCC预编译头参数GCC_PREPROCESSOR_DEFINITIONS
#pod中的macro
s.pod_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'MAS_SHORTHAND_GLOBALS=1'}
#项目中的macro
s.user_target_xcconfig = { 'GCC_PREPROCESSOR_DEFINITIONS' => 'MAS_SHORTHAND_GLOBALS=1'}