这是一个大胆的想法
适用环境
在调试的时候经常某些功能经常需要固定包名,但该包名又不能进行调试时。
应用场景
当我调试一个sdk,这个sdk指定的测试报名为com.test.a
,而我的app包名为com.test.b
,我既想用com.test.b
包名,又想调试这个sdk时,就可以使用我写的这个方法来临时改变包名,等用完再切换回来即可
使用方式
使用很简单,一句话即可切换包名,再使用完后再切换回来即可
#import "NSBundle+changeBundleId.h"//引入文件
//换成指定包名
[[NSBundle mainBundle] changeBundleIdentifier:@"想修改成的包名(例如应用场景中的com.test.a)"];
//换回正常包名
[[NSBundle mainBundle] changeBundleIdentifier:nil];
代码地址
代码地址
下载其中的NSBundle+changeBundleId.h
和NSBundle+changeBundleId.m
即可
对pod有偏执的小伙伴也可以使用pod来引入,在Podfile
文件中加入以下行:
pod 'WZZBaseTool/AOP'
然后pod install
即可
原理
- 写一个
NSBundle
的分类,调用修改包名方法时,将NSBundle
类的bundleIdentifier
方法和交换为自己实现的方法,该操作每次打开app只会执行一次 - 在修改方法
changeBundleIdentifier
里如果传入了包名,则会将该包名保存起来,如果传入的是nil
也会保存起来nil
- 在代码调用
NSBundle
的bundleIdentifier
方法获取包名时会调用到自己实现的方法,如果保存的包名不为空则返回保存的包名,如果为空则调用正常的bundleIdentifier
方法,返回正常包名