阅读 22

在iPad上使用私有API进行黑客攻击

使用私有API是一件很有意思的事情。当使用私有API时,我通常更喜欢用OC。因为runtime让使用Apple不想让你用的类或者方法更简单。当然这是在我自己的mac上使用Xcode时。

但是如果我使用其他的电脑呢?你知道,我可以携带的那个比我的15英寸MBP更容易携带。我最近剁手了新的12寸iPad Pro我希望拿它使用私有API做一些黑客攻击。它不是很方便像mac上来使用OC和Xcode,但是也可以。

Swift PLaygrouds

在iOS上和iOS API交互的最好方式是Swift Playgrouds。它支持大多数内置框架,您几乎可以使用该应用程序编写任何内容。

为了使用私有API,你需要和runtime打交道,这在swift上是非常麻烦的。以下是如何在iPad上使用Swift Playgrounds加载私有框架,实例化并显示其一个视图控制器的示例:

import PlaygroundSupport
import UIKit
import ObjectiveC

assert(Bundle(path: "/System/Library/PrivateFrameworks/AvatarUI.framework")!.load())

let AVTSplashScreenViewController = NSClassFromString("AVTSplashScreenViewController") as! UIViewController.Type

PlaygroundPage.current.liveView = AVTSplashScreenViewController.init()
复制代码

你会的到很有意思的结果。

这很好,但是一旦你想做更复杂的事情,你就开始使用NSSelectorFromString,performSelector等,这可能非常难看。在处理私有API时,我通常只使用Swift Playgrounds进行非常简单的测试。

JSBox

JSBox是一个很棒的APP可以让你使用它的桥接支持写js代码和runtime交互。你只需要使用$objc("ClassNameHere")就可以得到OC的某个类。你可以用invoke("method:name:here:", arg0, arg1, arg2)来调用某个方法。app还为UI开发和调用其他iOS API提供了很多使用的实用工具。

JSBox的另一个优势是它支持ShortCuts还有UI扩展。如果你写了一个JSBox script然后通过捷径调用它。就不用启动app来运行这段代码。你甚至可以用Siri界面展示UI。这里是一个例子,展示如何创建一个呈现Face ID解锁动画的JSBox脚本。

Pythonista

Pythonista是另一个很好的选择,因为它允许您使用Objective-C桥接调用本机API。在我在本文中展示的三个选项之间,我认为Pythonista提供了调用ObjC方法的最佳语法。

以下是如何编写一个Pythonista脚本,该脚本在运行时显示iOS关机UI:

结论

使用私有API的最佳开发环境仍然是Mac上的Xcode,但在iOS上可以做很多事情,尤其是iPad。在本文中显示的三个选项中,很难说最喜欢哪个,因为每个选项都有优点和缺点,但是我最常使用的那个,特别是因为它的灵活性和与快捷方式的集成,是JSBox。

关注下面的标签,发现更多相似文章
评论