出于安全考慮,也為了讓每個App運行在自己的獨立空間,iOS引入了名為沙箱(sandbox)
的安全體系。沙箱會自動攔截文件訪問,網絡套接字、Bootstrap服務,以及對子進程的spawn。
越獄操作對沙箱做出了適量修改,使所有進程都能夠加載CydiaSubstrate, 但為了用戶的隱私安全,大多數沙箱限制仍保留原樣。
在每一個iOS版本中,蘋果公司都會增強沙箱的作用,當我們的tweak需要跨進程訪問數據或向磁盤寫數據時,沙箱會給我們的操作帶來限制。
繞過這些限制的方案之一是視tweak運行在哪些進程中而定。選擇一個這些進程都能訪問的路徑或文件,達到共享數據的目的。這是一種常規的操作方法,但一旦蘋果公司再次收緊沙箱的限制,這種方法就可能失效,比如iOS8中已經不存在一個所有進程皆可讀寫的路徑了。
另一種更好的方案是把類似操作放在權限高的進程,比如SpringBoard、backboardd,甚至是我們自己編寫的守護進程里去完成,我們的tweak所在的進程只需要把受限制的操作丟給這些高權限的進程,然后坐等結果就可以了。這么做的好處是,即使沙箱的限制越來越嚴,只要tweak所在的進程能夠與高權限進程通信,tweak就能正常運行。
奇怪的是,在iOS8里,蘋果公司甚至限制了AppStore App所能訪問的服務(即能夠通信的進程),導致幾乎所有AppStore App的進程間通信都失效了。RocketBootstrap應用而生,它既破除了上面提到的訪問限制,又較好的保留了沙箱的防護,向RocketBootstrap注冊的服務可以被全系統進程訪問,包括那些沙箱限制非常嚴格的進程;RocketBootstrap是一個單獨的程序