一个工程创建多个Targets通过宏定义来管理马甲包
1.Targets选中母包右键Duplicate 然后选择DuplicateOnly拷贝 然后点击新建的Targets进行修改名字
2.快捷键command+option+r 选择Manage Schemes进去后勾选新建的Targets并且修改名字
3.修改对应的plist文件进行名字的修改与app名字的修改
4.修改Bundle Identifier
5.新建Assets管理对应马甲包的图片库 以后新建文件时需要匹配对应的Targets,比如这边的新建2个Targets都勾选后那马甲包与母包都会读取这个文件里的内容,如想单独维护则注意母包所创建文件夹的Targets勾选事项!
6.创建马甲包的Icons与Launch images 记得在Targets中勾选
7.重点:新建对应宏管理马甲包 在preprocessor macros中母包和马甲包里各定义一个Debug和Release的宏定义用来区分项目
8.创建.h文件 比如需要区分图片时该怎么区分母包与马甲包的各种情况呢?
打个比方母包采用DefineColor.h来管理母包的颜色 DefineColorSpeed.h来管理马甲包的颜色,直接在.pch中判断引入哪个即可。
但要注意的事项是,2个管理颜色的.h文件必须要有相同的宏,不然编译会报错。
比如DefineColor.h有个宏 #define COLOR_FF7700 [UIColor colorWithHexString:@"FF7700"] 那么DefineColorSpeed.h中也必须要有该宏定义,马甲包的颜色管理.h文件可以根据UI的颜色替换模式进行更改色块,如母包 FF7700 马甲包为 E45038 时 修改马甲包的宏定义颜色即可 #define COLOR_FF7700 [UIColor colorWithHexString:@"E45038”]
如果遇到有些色块或代码不好区分 可以通过宏定义来区分
#if WalletTBase
signView.backgroundColor=KOrangeCheeseColor;
#elif WalletTSpeed
signView.backgroundColor = KOrangeCheeseColorSpeed;
#endif
9.如果遇到某个页面改动非常大 马甲包与母包控制器必须分开时先找到该控制器 然后再建立一个文件夹来区分 如这边建立了cs文件夹,然后再把那些控制器拷贝到cs文件夹里,再手动添加
添加对应文件即可 这种方式区分也需要注意 母包与马甲包的.h方法都必须拥有 否则编译会报错
因为单纯swift工程不支持这种在preprocessor macros中设置的宏定义,只能通过混编来解决!
别人的解说方式:
按照swift添加预编译宏的方式,在Preprocessor Macros中添加一个宏,然后在Other Swift Flags中添加-D,但是今天新建了一个工程之后发现代码中竟然无法使用这个宏。查了很多资料都没有找到确切的解释以及解决方案,一同事试了一上午,终于找到原因,这个宏必须是swift和OC混编才可以生效。也就是说必须得加入Project-Bridging-Header.h文件才可以。
以前看文档一直没理解swift不支持宏定义的说法,这次加了宏不生效才深刻理解了这句话,swift确实不支持,但是可以混编OC,把OC中的宏解释为全局变量来使用。所以说还是得好好的思考官方文档