想要在iPhone/iPad安裝第三方APP,卻苦於免費Apple開發者帳號只有3個APP的簽名限制嗎?
Duy Tran開發的「LiveContainer」用一種曲折的方式解決這個問題。
它有點類似虛擬機,或說是容器,但其實是APP啟動器,讓你不用真的安裝APP也可以使用APP。雖然APP是暫時執行的,但是資料會保存在同一個資料夾,日後可以持續使用。
LiveContainer最大的好處就是 安裝APP數量無上限! 我們知道不論是SideStore還是AltStore,因為是用免費的個人Apple開發者帳號簽名IPA的,所以會有一個裝置同時只能安裝3個APP的限制。要解鎖就只能花錢買3000台幣的Apple開發者年費帳號。而LiveContainer沒有此限制,在這個APP內部想裝幾個APP就裝幾個,只是需要進行切換程序。不需要花錢買Apple開發者帳號。

另外,LiveContainer也可以當成一種「私密空間」的APP使用,因為安裝的APP只有LiveContainer裡面能見到,所以APP不會顯示在主畫面上,可以增加隱私保護。LiveContainer支援使用FaceID給內部APP上鎖。
對不想花錢的免費仔來說,LiveContainer是一個值得考慮的方案。因為SideStore的簽名額度有限,而LiveContainer能讓你測試更多APP。在分配簽名額度的策略上,LiveContainer能夠靠一個APP換到好幾十個APP。
LiveContainer能夠安裝無限數量APP的這點很像是TrollStore,但卻沒有限制iOS版本,不需要靠漏洞破解就能用。
1. LiveContainer原理#
供有興趣的開發者參考,Ivon我只是簡略翻譯。
LiveContainer為開源軟體,根據開發者在Github的解釋,LiveContainer透過一連串技巧達成「讓系統以為這個APP是經過認可的」,所以就能直接執行。
點選展開
首先LiveContainer會拆開IPA,修補二進位Mach-O執行檔的記憶體結構,將
__PAGEZERO區段的起始記憶體地址調整,避開一些安全機制。把Mach-O標頭的檔案類型從
MH_EXECUTE改成MH_DYLIB,這樣系統就會以載入函式庫的方式來處理這個App。接著注入一段新的指令,載入自己的
TweakLoader.dylib,讓App在啟動時會執行自定義的程式碼。修補
@executable_path,LiveContainer對_NSGetExecutablePath傳出空指標,並讓它當掉,產生SIGSEGV錯誤,再修改@executable_path上下文。讓載入的 App 以為自己是正統安裝的。修補
NSBundle.mainBundle,直接改成安裝的IPA的路徑。採用Restoring Dyld Memory Loading方法,繞過iOS的簽名驗證。也可以用JIT來繞過簽名驗證。如果沒有JIT,就透過AltStore或SideStore給APP簽名。
呼叫
dlopen啟動APP的二進位執行檔。讓
TweakLoader在指定資料夾裡面載入tweaks。找到程式執行入口,跳到該處。
APP呼叫
UIApplicationMain,像一般的iOS APP一樣啟動。關於多帳號與Keychain管理:iOS的Keychain可以用「Access Groups」區分不同App的資料。LiveContainer預先建立了128組不同的Access Groups。每次建立一個新的App容器,就隨機分配一組 Access Group,達成資料隔離的效果。這樣至多能安裝到128個APP。
為什麼能不安裝IPA就執行?它是把「安裝APP到系統 → 執行」這兩步拆開,然後用修改記憶體與Mach-O結構的方式,讓iOS誤以為這個App已經是合法可執行的,用動態連結庫注入方式載入執行。因此可以直接執行而不用正式安裝到iOS系統。
2. 系統需求#
LiveContainer需要iOS 15以上版本。
不需要越獄就能使用。
可想而知,LiveContainer沒有在App Store上架,需要用側載的。支援SideStore或AltStore側載。
LiveContainer本體每7天就要重簽一次,內部安裝的APP不用。
大部分APP應該都能在LiveContainer裡面啟動,不過根據Github用戶的回報,少部份APP啟動會崩潰。
3. 安裝LiveContainer#
上文講了LiveContainer的原理,因此啟動APP之前都要修補一番。開發者提供JIT與JIT-Less模式來啟動APP。預設不設定的話就是使用JIT。
JIT的好處是能加速一部份模擬器APP的效能,且APP不需要簽名就能啟動。缺點是啟動APP要多一個切換JIT的步驟。
至於JIT-Less模式的話,則是會取用SideStore或AltStore的憑證來幫LiveContainer內部的APP簽名,不會受到免費Apple ID一週10個Bundle ID的限制。
各有利弊,看哪個比較方便就選哪個。
JIT模式#
JIT-Less模式#
- 我系統是iOS 26,安裝SideStore。
註:如果你有付費開發者帳號,可以不需要安裝SideStore,自行匯入.p12憑證到LiveContainer給APP簽名。
到Github下載
SideStore.ipa,使用SideStore安裝。連著LocalDevVPN。
開啟LiveContainer APP,點選設定 → 從AltStore/SideStore匯入憑證

在SideStore按Export,設定憑證密碼
回到LiveContainer,點選設定 → 免JIT模式診斷,顯示Success即代表成功。

LiveContainer+SideStore合體版#
這是JIT-Less模式的變種。將SideStore內建在LiveContainer裡面,這樣的話它就能夠在一個APP裡面自己幫自己完成簽名了。不過你要安裝IPA的話還是要用LiveContainer主界面安裝,這裡SideStore只是負責幫LiveContainer簽名,防止7天後過期而已。
LiveContainer+SideStore的這個版本仍屬於實驗性質。且你不能直接從電腦側載IPA,必須先裝SideStore取得憑證後,再來安裝LiveContainer+SideStore的IPA。過程十分迂迴。
安裝SideStore。
連著LocalDevVPN。
開啟SideStore,側載LiveContainer+SideStore.ipa。然後點選Refresh重簽。
點選SideStore,Settings → Export Sigining Certificate,匯出
SideStoreSigningCertificate.p12憑證開啟LiveContainer+SideStore,點一下左上角+號旁邊的SideStore圖示,啟動LiveContainer內部的SideStore

在提示要匯入Pairing File的時候,不要選取.p12憑證。開啟我的iPhone → SideStore資料夾,選取
ALTPairingFile.mobiledevice-pairing然後在LiveContainer內部的SideStore,開啟設定 → 匯入憑證,匯入剛才取得的
SideStoreSigningCertificate.p12憑證
刪除原本的SideStore APP。
回到LiveContainer,點選設定 → 免JIT模式診斷,顯示Success即代表成功。
重新開啟LiveContainer內部的SideStore,登入Apple帳號。
之後,你就能從這裡重簽IPA了,包括LiveContainer本身。

4. LiveContainer內APP啟動方法#
LiveContainer的啟動方法比較曲折一些。
到Github之類網站下載想要側載的第三方IPA。
在LiveContainer側載你想要的IPA,可以根據需求匯入多個APP的IPA。嚴格來說APP沒有安裝到iOS系統,只是匯入到LiveContainer,只有該APP內可見。
在LiveContainer主界面,點APP旁邊的Run。如果使用JIT-Less模式,APP會在簽名完成後直接啟動。
反之,使用JIT模式的話LiveContainer APP會跳出,請用JIT APP啟動LiveContainer,就會進入要使用的APP。
下次再開啟LiveContainer的時候,會回到LiveContainer選取APP的介面,點選切換APP。
如果要同時執行多個LiveContainer內部的APP,需開啟多任務模式。
5. 實際操作例子:安裝Mangayomi APP#
以Mangayomi漫畫閱讀器為例,使用iOS的Safari到Github下載IPA。
開啟LiveContainer,點左上角+號,匯入IPA

點選執行,然後LiveContainer的畫面會閃一下,之後就會「變成」Mangayomi,功能應可正常使用。

滑掉LiveContainer之後,剛剛啟動的APP也會隨之關閉。之後要重做一次JIT啟用步驟。
對LiveContainer裡面的APP選單長按右鍵,可以將APP的圖示加到iOS主畫面。
6. LiveContainer各個APP資料儲存位置#
LiveContainer能夠匯入多個APP,只要不刪除APP,切換APP之後資料依然會存在。
因為不是真正安裝到iOS系統,所以APP產生的資料只會儲存在LiveContainer內部。
開啟iOS檔案APP → 我的iPhone/iPad → LiveContainer → Data → Application,可以看到各個APP的資料。
7. 同時執行多個APP#
使用iOS的多任務模式,讓多個APP可以在同一個LiveContainer APP的視窗內執行。雖然你還是沒辦法從iOS主畫面看到多個APP的圖示,但起碼是一種解決方案。
在LiveContainer首頁,對APP長按 → 設定 → 轉換為共享APP

這樣的話,每個APP便會以視窗模式啟動。

上面的這個多視窗模式我認為比較適合大螢幕iPad使用。小螢幕的iPhone應該在LiveContainer設定 → 改用iOS原生視窗模式。

這樣的話就會變成透過iOS的多工界面來切換各個APP的「視窗」。比較像是真的在同時執行不同的兩個APP。
