发现一个更好的思路,这是马甲包的一部分,市面上有些工具这方面处理的很好,值得借鉴。
更多详细的内容,可以参看马甲包制作指南,这可是可以套现的技能。
使用脚本批量重命名Objective-C类
代码已开源 FDTops 。网上也没发现现成的,自己写一个吧。
由来
批量给类增加前缀,替换前缀。
我是不是与这种事有缘啊,批量重命名类,改个前缀,加个前缀,Xcode自带的Refactor是好用,但是同时只能更改一个类的名字,不能批量操作。于是就有了这么个脚本。
之前用shell 写过一个简单的脚本,主要原理就是调用苹果自带的命令行工具tops,重新捡起来发现确实是不太习惯,于是用Python3 重新写了一个。这个命令就是用来批量重命名方法名,类等,使用过程中碰到一个问题,它不会自动把文件名改掉,自然也不会把文件头中的 #import “className.h”给替换掉。不知道是工具本身就不支持,还是我没有设置好某个参数,反正遍寻man中的介绍,最终也没有找到。只能用脚本暴力重命名文件,替换。
如何使用
cd到FDTops.py脚本所在目录,苹果自带的Python版本是2.7,你首先得安一个Python3
1
2
3
4
5
6
python3 FDTops.py(脚本命令位置) /Users/yiche/Code/yiche/yiche4iOS/autoPrice/App/Mine/MessageCenter(目标类所在目录) replace(操作符,目前只支持replace 和add) YC(原始前缀名) FD(目标前缀名)
python3 FDTops.py /Users/yiche/Code/yiche/yiche4iOS/autoPrice/App/Mine/MessageCenter replace YC FD
python3 FDTops.py /Users/yiche/Code/yiche/yiche4iOS/autoPrice/App/Mine/MessageCenter add FD(增加的前缀)
使用技巧
- 尽量选择大一些的目录,这样子脚本能抓取到很多的类名,在类的文本中就能替换的更彻底
- 有报错可以把错误文本,以及替换的原始文件夹内容发我一份,可能是脚本有逻辑漏洞
原理
-
递归便利目标目录下的文件, 通过文件名获得类名
-
用tops 命令替换
-
全文替换一些关键字格式文本,持续增加中 ,这一块可以考虑替换成正则表达式。例如:import 进来的的类名 “{classname}.h” ,
在这一环节基本的原则是,尽量少做,但是务必精准,不能多做。
-
重命名目标目录下的.h. 和 .m文件
待优化
随着项目的进展,暴露了一些之前没有考虑的问题
- 文件夹里面,有些类是有前缀的,有些是没有前缀的,能不能统一处理
- 没有考虑到 category的重命名的场景
语言相关
- 因为对Python 不太熟悉,PyCharm 也用得不太熟,全程有很多warning没有解决。
- 为了代码结构逻辑清晰,递归遍历了好多次,熟了再优化吧
- 是不是可以把这些操作,全放到一个模块里面,然后import 进来
灵感之源
iOS SDKs: Renaming a lot of classes
man tops