Home

Awesome

LiveContainer

Run iOS app without actually installing it!

Compatibility

Unfortunately, not all apps work in LiveContainer, so we have a compatibility list to tell if there is apps that have issues. If they aren't on this list, then it's likely going run. However, if it doesn't work, please make an issue about it.

Usage

Requires AltStore or SideStore

Without JIT

Without JIT, guest apps need to be codesigned, which requires retrieving the certificate and password from SideStore or AltStore. This process involves applying a tweak to SideStore/AltStore, allowing it to expose the certificate to LiveContainer.

Note: If you update or reinstall SideStore/AltStore, you'll need to reapply the patch. Re-patch is not needed when you refresh your store.

With JIT (requires SideStore)

Add to Home Screen

Long press the app and you will see 2 ways to add your app to home screen:

  1. Launch URL: Copy the provided URL, create a shortcut that opens the app, and add it to your home screen. You’ll need to create a separate shortcut for each app.
  2. Create App Clip: Install an App Clip MDM profile, which adds the app to your home screen. Note that launching the app includes an extra jump, and the App Clip will remain in the app switcher.

Multiple LiveContainers

Using two LiveContainers allows you to run two different apps simultaneously, with almost seamless data transfer between the LiveContainers.

To install a second LiveContainer, go to Settings and tap "Install Another LiveContainer."

The first LiveContainer (blue icon) always launches by default. If an app is already running in the first container, you'll be prompted to either open it in the second LiveContainer (gray icon) or terminate the current app and relaunch it in the first. If the app is already running in the second container, it will switch automatically. To use an app in the second container, you must convert this app to a shared app. You can do that by opening the first LiveContainer (blue), long press on your app, open the settings of your app and then "Convert to Shared App". After that, you can launch your app using LiveContainer2 (grey).

Fix File Picker & Local Notification

Some apps may experience issues with their file pickers or not be able to apply for notification permission in LiveContainer. To resolve this, enable "Fix File Picker & Local Notification" in the app-specific settings.

"Open In App" Support

JIT Support

To enable JIT for a guest app:

Installing external tweaks

LiveContainer comes with its own TweakLoader, which automatically load CydiaSubstrate and tweaks. TweakLoader is injected to every app you install. You can override TweakLoader.dylib symlink with your own implementation if you wish.

.dylib files in Tweaks folder are global, they are loaded to all apps. You can create app-specific tweaks folder and switch between them instantly.

To install tweaks, you can use the built-in tweak manager in LiveContainer, which will automatically sign tweaks as you import. Otherwise, you can manually add them and then use the tweak manager to sign them.

Hiding Apps

LiveContainer offers three levels of app hiding:

Building

export THEOS=/path/to/theos
git submodule update --init --recursive
make package

Project structure

Main executable

LiveContainerSwiftUI

TweakLoader

AltStoreTweak

ZSign

How does it work?

Patching guest executable

Patching @executable_path

Patching NSBundle.mainBundle

Bypassing Library Validation

dlopening the executable

Multi-Account support & Keychain Semi-Separation

3 keychain access groups are created and LiveContainer allocates them to each container of same app. So you can create 3 container with different keychain access groups.

Why only 3?

The original thought was 256, but due to a SideStore bug (latest AltStore don't have it), we can only declare 3 keychain access groups before SideStore fails to sign. So the limit is 3.

Limitations

TODO

License

Apache License 2.0

Credits