- Install Xcode from the Mac App Store
- Install theos. You don't need to install the SDK
- Install theos-jailed. You don't need ios-deploy
- Get a decrypted ipa of the app you want
- Change the .ipa file extension to .zip & unzip it
- Open the Payload folder, right-click on
AppName
.app, then click “Show package contents” - Open Info.plist in Xcode
- Find the
UISupportedDevices
row and delete it - Determine the minimum iOS version your app requires and change the
MinimumOSVersion
row to reflect this (see below) - Find the “Bundle identifier” key and remember its value (for example: com.spotify.client)
- Zip the Payload folder
- Rename Payload.zip back to
AppName
.ipa
- Search for the app in the App Store, tap on it, scroll down to the “Information” section, and tap “Works on this iPhone”
- It will now say something like “Requires iOS 11.0 or later”. Type “11.0” into
MinimumOSVersion
- Open Terminal.app on your Mac and type "$THEOS/bin/nic.pl"
- Choose "iphone/jailed"
- For “Project Name”, type the name of your app (for example: Spotify)
- For “Package Name”, type the Bundle Identifier from Info.plist (for example: com.spotify.client)
- For “Path to .ipa”, type
AppName
.ipa - Type “open ./
AppName
” - Copy the “fixed”
AppName
.ipa into this folder - Copy all of your dylibs into this folder
- If you have a .bundle, icon files, or other stuff, make a folder called “Resources” and put them inside
- Open Makefile in TextEdit
- At the very top, add this line: "
AppName_INJECT_DYLIBS = TweakName.dylib
". If you have multiple dylibs, simply list them all out with a space between entries (for example: "Spotify_INJECT_DYLIBS = Spos.dylib TrueShuffle.dylib") - Change the
AppName
_IPA line to simply “AppName_IPA = AppName.ipa
” - Delete the “
AppName_FILES
” line - Go back to Terminal and type “cd ./AppName”
- Type "
make clean all package FINALPACKAGE=1 CODESIGN_IPA=0
" - Done! Your final ipa is in the “packages” folder
You can install it with Impactor, AltStore, ReProvision, or Xcode + iOS App Signer
Note: People trying this with YouTube: sideloading with Xcode + iOS App Signer will change the bundle identifier of the ipa. Google checks the bundle identifier, and if it’s been tampered with, they won’t let you sign in to your Google account. To fix this, sideload with Impactor, AltStore, or ReProvision instead
People trying this with Cercube: you need to put /Library/Application Support/Cercube/Carida.bundle into the Resources folder. If you don’t, the ipa will crash every time you open it
Credits to /u/CaptInc37