在越狱的 iOS 设备上,一个应用程序是否可以调用另一个应用程序的方法(实例方法,而不是静态方法)?另一种表述方式:如何获取应用程序的实例(假设应用程序正在运行)以便我可以调用其中一个方法?
背景:我正在尝试从iPodUI
私有框架中的挂钩方法调用音乐播放器应用程序中的函数(有关详细信息,请参阅此帖子)。
这个问题已经被问到Android,但我没有找到越狱 iOS 的任何东西。如果那是因为我问错了问题并且有不同的方法可以采取,我对此持开放态度。
实现此目的的一种简单且替代方法是使用 cycript 和 system() 调用,但是请注意在使用 system() 之前使用它的危险,因为它可能不安全(在我看来,这在越狱的iOS,一切都非常不安全)
假设您有一个[[SomeClass sharedInstance] methodToBeCalledExternally]
想要从其他进程调用的方法
您可以将该调用保存到文本文件中/tmp/something.cy
然后通过运行在外部注入该代码:
cycript -p Music /tmp/something.cy
但是如果您需要以编程方式进行,当然如果环境没有沙盒(我认为不是),那么您可以这样做:
system("cycript -p Music /tmp/something.cy")
通过这种方式,您可以从您的代码在任何进程(在本例中为 Music 应用程序)中执行任意 ObjC 代码。
最后,不要忘记删除文件/tmp/something.cy
,因为您将不再需要它