MobileSubstrate - 检查对象位于哪个捆绑包中

4
我正在制作一个MobileSubstrate插件,它应该能够: a)钩取特定类/类的实例方法,并且 b)根据包含对象的应用程序的bundle ID执行不同的操作(具体来说,这是一个UIResponder子类)。
对于如何实现此功能,您有什么建议吗?

如果它是一个插件,运行在某个应用程序的上下文中,当您调用[[NSBundle mainBundle] bundleIdentifier]时,您会获取到应用程序ID吗?如果不是,您将获取什么标识符? - Michael Dautermann
该方法始终返回com.apple.springboard... - user529758
1
那么你的调整只会修改SpringBoard。将你的过滤器修改为“com.apple.UIKIT”,而不是“com.apple.springboard”。 - Kyle Howells
谢谢!我会尝试一下并告诉你结果。 - user529758
可以了!非常感谢!您能否将其发布为答案,以便我接受它? - user529758
@H2CO3在下面发布了一些更详细的信息。 - Kyle Howells
1个回答

5
你说调用[[NSBundle mainBundle] bundleIdentifier]总是返回com.apple.springboard且仅如此。这意味着你的代码仅在SpringBoard内运行。
MobileSubstrate扩展仅注入到某些进程中,而非全部。可以通过其过滤器(从.plist文件加载)来控制。
如果你想让代码注入到所有类实例中,则将过滤器修改为“com.apple.UIKit”而不是“com.apple.springboard”,所有应用程序都将使用你的代码。

笔误:如果我没记错的话,捆绑标识符是区分大小写的,因此应该是 com.apple.UIKit - Matoe
Matoe,谢谢。我检查了一些现有的代码,确实是这样拼写的。我之所以检查是因为关于哪些捆绑标识符苹果会和不会大写存在一些不一致性,在这种情况下我记错了。 - Kyle Howells

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接