可以在 iOS/Mac 上挂接吗?
是否可以在 iOS/Mac-OSx 中开发需要在 iOS/Mac 中挂钩的应用程序(类似于我们在 Windows 中的应用程序)?它有多复杂?
Is it possible to develop apps in iOS/Mac-OSx which needs hooking in iOS/Mac (similar to what we have in windows)? and how complex is it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果你想在MacOSX中挂接第三方应用程序,可以通过InputManager。
请参阅 SIMBL 插件,它可以通过为您管理 InputManager 或 ApplicationEnhencer 来帮助完成此操作。
更多信息
如果您想拦截您自己的应用程序内的调用,例如当调用方法(可能是系统方法)时,您可以使用 objc_exchangeImplementations 进行类构成(已过时)或方法混合。这也适用于 iOS 应用程序。 更多信息。
无论如何都要小心,这可能是危险的,你必须知道你在做什么(避免无限调用循环等)
在 MacOSX 上,你也可以像在任何 UNIX 系统上一样进行 C 拦截,以拦截系统调用。但它有点棘手和低级(和系统范围)
If you want to hook a third-party app in MacOSX, it is possible thru InputManager.
See the SIMBL plugin that helps doing this by managing the InputManagers for you, or ApplicationEnhencer.
More info here
If you want to intercept a call inside your own app, e.g. when a call to a method (possibly a system method), you can do class posing (obsolete) or method swizzling using objc_exchangeImplementations. This also works on iOS apps. More info here.
Be careful anyway with this, this can potentially be dangerous, you have to know what you are doing (avoid infinite call loops, etc)
On MacOSX, you can also do C interception like on any UNIX system, to intercept system calls. But it is a bit more tricky and low-level (and system-wide)