使用私有API是一件頗有意思的事情。當使用私有API時,我一般更喜歡用OC。由於runtime讓使用Apple不想讓你用的類或者方法更簡單。固然這是在我本身的mac上使用Xcode時。swift
可是若是我使用其餘的電腦呢?你知道,我能夠攜帶的那個比個人15英寸MBP更容易攜帶。我最近剁手了新的12寸iPad Pro我但願拿它使用私有API作一些黑客攻擊。它不是很方便像mac上來使用OC和Xcode,可是也能夠。bash
在iOS上和iOS API交互的最好方式是Swift Playgrouds。它支持大多數內置框架,您幾乎可使用該應用程序編寫任何內容。app
爲了使用私有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是一個很棒的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腳本。ui
Pythonista是另外一個很好的選擇,由於它容許您使用Objective-C橋接調用本機API。在我在本文中展現的三個選項之間,我認爲Pythonista提供了調用ObjC方法的最佳語法。spa
如下是如何編寫一個Pythonista腳本,該腳本在運行時顯示iOS關機UI:3d
使用私有API的最佳開發環境仍然是Mac上的Xcode,但在iOS上能夠作不少事情,尤爲是iPad。在本文中顯示的三個選項中,很難說最喜歡哪一個,由於每一個選項都有優勢和缺點,可是我最常使用的那個,特別是由於它的靈活性和與快捷方式的集成,是JSBox。