本文会分享以下内容:
- 通过开启或者关闭
module
相关的配置,查看Xcode
预处理操作 后的代码差异 - 预处理操作 失败的解决方案
一、 Enable Modules
Module
是 编译器用于解决头文件引用导致重复编译等问题的方案。
通过开启 Enable Modules
配置开关,可以大幅度的降低编译耗时
image
二、对源码进行预处理操作
本节会演示关闭 Enable Modules
配置开关后,下面几行简单的代码经过 预处理操作 后会变成什么
//
// SunFrameB.m
// SunFrame
//
// Created by 酷酷的哀殿 on 2021/3/1.
//
#import "SunFrameB.h"
#import <Foundation/NSString.h>
@implementation SunFrameB
@end
image
按照以下两种方式之一对 SunFrameB.m
文件进行 预处理 操作
预处理方案一
方案一:通过 Product
按钮,依次点击Perform Action
、Preprocess “SunFrameB.m”
image
预处理方案二
依次点击 Navigate to Related Items
、Preprocess
按钮
image
预处理操作 后的代码
经过 预处理操作 后的代码如下所示:
image
我们可以注意到,经过 预处理 操作 后, SunFrameB.m
文件膨胀到 31174
行
三、开启 Enable Modules
配置开关后进行预处理
在 Xcode
配置中开启 Enable Modules
配置
image
对 SunFrameB.m
进行预处理操作,预处理操作 后代码长度只有 41
行
image
对比两种方案,我们可以注意到开启 Enable Modules
配置开关后,预处理的源码可以大幅度的减少
四、预处理操作 失败的解决方案
很多朋友按照上面的方案对原源码预处理时,可能会遇到 Unable to Generate Content 的问题
image
对应的 预处理操作 报错信息如下所示:
'AppDelegate.m' is not a member of any targets in the current scheme that build for profiling
image
该问题背后的原因是 Xcode
无法找到合适预处理参数对源码进行预处理操作。对应的解决方案也很简单:
- 按照上次分享的 Xcode 小技巧:如何获取源码文件对应的 target? 找到源码文件对应的 target:
ImageView
image
- 切换
Target
image
- 重新进行 预处理操作
image
通过提供合适的 target
,我们可以让 Xcode
找到合适的参数对源码进行 预处理操作 了。