-
-
Notifications
You must be signed in to change notification settings - Fork 237
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate LiveContainerUI to SwiftUI, Support for Multiple LiveContainer, SideJIT/JITStreamer Support, Better Open in App Support, Impelement #112 #153
Conversation
Users can now mark app as JIT needed and configure SideJITServer inside LiveContainer, so that apps can be launched with JIT more easily. Also solved some weird permission issue by modifying the second one's main executable's UUID. |
This is huge, at this point I may consider adding you to collaborator, thanks a lot. |
Thank you for your appreciation! I've now completed the implementation of #131. Users can now triple tap the app counter under the app list, pass the authorization and view hidden app and hide apps. By the way, I implemented the App Clip generation, but I didn't figure out how you made |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks a lot for your work 💪 This is a big PR 🤯
I didn't review the code but I wanted to give some feedback as a big fan of LiveContainer:
- I found that the
Open data folder
option when long-pressing an app is missing. I found this feature quite useful to quickly open the files app and examine the contents. It would be nice if this was kept in this PR. - After upgrading the from d074394 (on main) to 901282b, running an app causes its
Library/Preferences
directory to be filled with preferences of other installed apps. I tried to deleteplist
files that are not relevant to the given app but they re-appear after running the app again. Is this expected? I didn't check if this happens also for new users who did not perform an upgrade in-place. - Each app's UUID is now less visible. I now have to hold the app and click on
Change Data Folder
to view the name of the data folder which is usually equal to the UUID if not yet renamed. It would be nice if the UUID was visible either directly under the app's name in the list (as before) or maybe show it under the app's context menu? - The app list does not appear to have the same style as you showed in the screenshot in the description of your PR. I am running 901282b on iOS 17.6.1. I triggered a CI build for this commit by enabling GitHub Actions for my fork. You can download the IPA under artifacts using this link. You can find a screenshot below:
- After installing a new app, pressing on
Run
results in the app closing and opening twice, eventually returning to the main LiveContainer app. This only seem to happen after a fresh install of the app. I am able to run the app perfectly fine after that though, even when restarting LiveContainer.
I hope that helps!
Here’s how I bypassed it: LiveContainer/LiveContainerUI/LCAppListViewController.m Lines 16 to 21 in d074394
Furthermore, generating self-signed shortcut instead is possible too, see https://github.com/0xilis/SelfSignedShortcutDemo |
Thank you for your feedback! @ilian
|
* Update Makefile * Update Makefile * Update Makefile * move to main make file
I added the "Open Data Folder" button back, change the AppClip creation method back to You can download the new version here.
I see. However users have to enroll a self-signed root CA to install a shortcut, which may raise some security concerns. What't more, users still have to manually select an icon before adding the generated shortcut to Home Screen, or is there a way to automate this procedure? |
@hugeBlack Thank you for your responses and for fixing things so quickly 🚀 I was able to modify preferences in
For each app, I deleted all plists that belong to other apps, click on
Unfortunately, I still get the same issue after installing a new app and clicking on Regarding UX, maybe it makes more sense to have the For context, I am running the app with version cd2c019. |
@ilian thank for your feedback again! 👍 This commit hopefully fixed the issue that app crash once after installation (I tested on 4 devices ranging from iOS 15 to iOS 18, and they all worked fine). As for the mixed preference issue, after some testing, I found that the behavior of What't more, I solved the issue (like #68 #123 #142) that file pickers cannot select files. The cause of this issue is that custom I intercept the call to However, it seems that files must be copied in order to be imported, and the app must use Also, buttons in the app manage menu is rearranged based on your suggestion. |
…aging menu, fix wrong guest app group path
I found that Infuse still cannot mount local folders. Specifically, when navigating to a folder, the “Open” button cannot be clicked. If you click on a file, it will show a file error. |
@Wei-Winter Thank for your feedback! I think that the issue with Infuse should be fixed in the latest commit. You may download and have a try. Be sure to enable 'fix file picker' setting in app settings. Do note that files will be copied to the Inbox of guest app. |
Thank you for your submission! It is running well now👍 |
Localization is now supported. You can add a language in LiveContainerSwiftUI project and add your translation in Localizable.xcstrings. |
Can this app be supported on LiveContainer? I can't even install it on SideStore. |
Switch UI to SwiftUI
I migrated most of features to an AltStore-like UI written in SwiftUI.
LiveContainerSwiftUI looks like this:

Support for Multiple LiveContainer
Free development accounts can install 3 apps, so now we can install 1 SideStore and 2 LiveContainers, so people can run 2 apps at the same time. App and their data, Keychains and most NSUserDefaults can be shared between these 2 LiveContainers. If user open a app via URL Scheme or from My Apps screen, the LiveContainer that last ran that app will be switched to.
App's data and tweaks are stored in SideStore's or AltStore's app group. If a Shared App is launched, its data will be temporarily moved to the LiveContainer's document folder to prevent crash in background because of holding a file lock in the App Group folder. It data will be moved back in last launch of LiveContainer.
Apps can't be modified when in Shared state. The second LiveContainer cannot install or manage apps.
NSUserDefaults
are handled differently. Since it won't accept plists that moved to Library/Preferences after app launch, we have to manually read the plists and set it inNSUserDefaults
. This solves #149Better Open in App Support
It turns out that some apps don't rely on URL Schemes and use Universal Links instead. So in the new LiveContainerSwiftUI, the web page's
apple-app-site-association
will be checked and we will launch apps based on it. Then, aNSUserActivity
will be created with these URLs and passed toUIActivityContinuationManager
, so apps will open these URLs they support.Impelement #112
Flutter apps share the bundle name of
Runner.app
, so I use bundle identifier as app bundle's name during install to avoid conflicts. Also, users can select which bundle to replace if there are multiple bundles with the same bundle identifier.