simject is a command-line tool and iOS dynamic library that allows developers to easily test their tweaks on the iOS Simulator.
simject is BSD-licensed. See LICENSE
for more information.
simject setup (requires the latest version of Theos)
-
git clone https://github.com/angelXwind/simject.git
-
cd simject/
-
make setup
-
Note: During the process, you will be asked by
sudo
to enter in your login password. Please note that it is normal for nothing to be displayed as you type your password. -
You also need to copy simulator version of CydiaSubstrate.framework (in Cycript.lib folder, that you have to rename
libsubtrate.dylib
toCydiaSubstrate
and have it inside the folder namedCydiaSubstrate.framework
as a framework) to/Library/Frameworks
(create the directory if necessary) of your iOS simulator SDK root: usually in/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS <SDK-Version>.simruntime/Contents/Resources/RuntimeRoot
-
Place your dynamic libraries and accompanying property lists inside
/opt/simject
to load them in the iOS Simulator. Do not deletesimject.plist
orsimject.dylib
. -
Inside the
bin
subdirectory, you will find therespring_simulator
command-line tool. Execute it to cause a booted iOS Simulator to respring and be able to load tweaks. -
You probably need to run
respring_simulator
every time the device reboots or if SpringBoard crashes. -
Note that you can respring multiple simulators too (check its usage), provided that the selected Xcode version is 9 or above.
-
Happy developing! (And don't make SpringBoard cry too hard... it has feelings, too! Probably.)
-
Open your project's
Makefile
. -
Change your
TARGET
variable toTARGET = simulator:clang
(you may optionally specify the SDK/deployment versions) -
If you want to support 32-bit iOS Simulators (in addition to 64-bit), add
ARCH = x86_64 i386
to your Makefile. If you are fine without 32-bit support, then simply addARCH = x86_64
. -
make
your project and copy.theos/obj/iphone_simulator/$YOUR_TWEAK.dylib
to/opt/simject/$YOUR_TWEAK.dylib
-
If there is already
/opt/simject/$YOUR_TWEAK.dylib
, you have to delete it first before copying -
Also make sure to copy
$YOUR_TWEAK.plist
to/opt/simject/$YOUR_TWEAK.plist
. simject will not load your tweak if you miss this step! -
An example tweak project is available in the
simjectExampleTweak/
subfolder. Use it as reference if you want.
Do keep in mind that just because your tweak works in the Simulator doesn't necessarily mean it'll work on an actual iOS device. Yes, in 99% of cases, it will work just fine, but there will always be some strange edge cases where this does not apply.
Also, special thanks to PoomSmart for his countless contributions.