I just looked at JetBrains's App Code IDE and it seems to be able to launch the iOS Simulator and run applications in it.
When I had to automate the deployment of my projects I had to resort to Applescript and GUI automation.
They seem to be using a closed tool called 'simlauncher'. I wonder what the magic behind it could be.
Update:
- On looking at Activity Monitor, I see that osascript gets launched from simlauncher before the simulator is launched. Could it be Applescript again? I thought iOS Simulator.app was not scriptable.
- iOS Simulator seems to be launched by launchd, so simlauncher is definitely not launching it by itself. Also, simlauncher stays only until the actual application is running in the simulator. They're polling for it perhaps?
- For device builds, they're using AMDeviceService, which is probably a version of Apple Mobile Device Service. Is this a technique from the jail broken SDK?
A little more info on the simulator from the output of 'ps':
plumenator 26404 12.9 1.3 290172 52772 ?? SX 8:56PM 0:03.62 /Users/plumenator/Library/Application Support/iPhone Simulator/4.3.2/Applications/817A280D-1F74-4755-B848-B04EC8A24ADA/xxx.app/xxx
plumenator 26395 2.3 0.3 444208 13560 ?? S 8:56PM 0:00.72 /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/iPhone Simulator -SessionOnLaunch NO
plumenator 26402 1.4 0.8 318320 33052 ?? Us 8:56PM 0:00.86 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/CoreServices/SpringBoard.app/SpringBoard -SBDisableAutoDim YES -SBAutoLockTime -1 -SBAutoDimTime -1 -SBDontLockAfterCrash YES -SBDidShowReorderText YES -SBFakeBars YES -SBDontAnimateAppleDown YES -SBEnableDoubleHeightToggling YES
plumenator 26406 0.0 0.4 2466496 15792 ?? Ss 8:56PM 0:00.16 /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/libexec/gdb/gdb-i386-apple-darwin --arch i386 --interp=mi1 -q
plumenator 26401 0.0 0.1 106584 5688 ?? S 8:56PM 0:00.30 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/libexec/lsd
plumenator 26400 0.0 0.1 105228 4204 ?? S 8:56PM 0:00.13 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/libexec/installd -t 30
plumenator 26399 0.0 0.3 223488 11464 ?? Ss 8:56PM 0:00.15 /Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone Simulator.app/Contents/MacOS/SimulatorBridge 26395
Now I suppose it's just a matter of sorting the commands according to the pid and executing them. :-)
There's a problem, though. All these binaries refer to dylibs present in the simulator platform's root. When I run them directly, they look for those in '/'.
Is there a way to set the path for dylibs before running a command? This looks promising: http://sacredsoftware.net/svn/misc/StemLibProjects/eaglshell/tags/2.1.0/Makefile
https://github.com/BlueFrogGaming/icuke has good info too.