/ CFBundleIdentifier

如何给插件建立“白名单”

心仪的插件等得天荒地老还是不更新,偏偏部分功能可以使用,部分软件又不兼容。心痒难挠啊啊啊。今天介绍一个方法,给我们的插件建个“白名单”

一、实例

iOS6时代非常出名的未上架插件【Emphasize】能给系统配置“颜色主题”如图:

sexy

非常性感吧。作者源:rpetri.ch/repo

可惜打开微信的时候却是这样的:

01

我去,彻底被废了。

怎么办?

二、白名单的建立

基于MobileSubstrate的插件,都会在目录\Library\MobileSubstrate\DynamicLibraries\ 下面生成两个文件,一个是xxxx.dylib 另一个是xxxx.plist  dylib 通常是插件主程序(或者是唤醒程序) 而plist 则包含了插件的重要信息:作用位置! MobileSubstrate 会根据.plist文件的记载在特定软件运行的时候才加载插件。

比如插件【PreferenceLoader】的.plist中内容是

Filter

Bundles

com.apple.Preferences

com.apple.Preferences 就是系统设置,PreferenceLoader 只有在系统设置中起作用。

OK,回到Emphasize,他定义的是:com.apple.UIKit ,这个大了。对应的是系统UI,所以他的作用是“广域”的。

我们把这句去掉,添加能够正常使用的软件ID即可控制插件按需启动了。

比如我是这样改的:

Filter Bundles com.apple.Preferences com.eicodesign.weibopro com.apple.MobileAddressBook com.apple.mobilemail com.apple.mobilenotes com.apple.mobilesafari com.apple.mobileslideshow com.apple.reminders com.apple.mobilephone

系统自带的几个主要软件,还有常用的weico(其实是做个例子,这个软件基本上用不到),都在列表里了。效果非常好!

软件ID可以在软件  .app 目录中的info.plist 中的 CFBundleIdentifier 字段查找。

改完以后respring即可。如果临时添加软件,只需将软件在后台杀死,再次加载,已经ok。

具体修改使用iFile或者其他桌面端的软件就见仁见智了。不再赘述。祝大家DIY开心。