//! Project version number for LZDUtility.
FOUNDATION_EXPORT double LZDUtilityVersionNumber;
//! Project version string for LZDUtility.
FOUNDATION_EXPORT const unsigned char LZDUtilityVersionString[];
如果创建一个名为 LZDUtility 的动态库,Xcode 会帮我们自动创建跟库同名的 umberlla header,里面会写着这样两行代码。
容易发现 FOUNDATION_EXPORT 定义
#if defined(__cplusplus)
#define FOUNDATION_EXTERN extern "C"
#else
#define FOUNDATION_EXTERN extern
#endif
#define FOUNDATION_EXPORT FOUNDATION_EXTERN
#define FOUNDATION_IMPORT FOUNDATION_EXTERN
本质就是 extern,这只是变量声明,那么 versionNumber 和 versionString 的定义在哪呢?
一直没找到相关文档,直至偶然发现编译日志中出现了 LZDUtility_vers.c,于是我搜了一下 _vers.c,果然发现了答案:
原来是 Xcode 为自动生成版本号的库创建这个 _vers.c 文件,这个文件里定义了这两个变量,它的值当然也是这里给的了。
在下面这篇文章里搜 _vers.c 可找到相关段落