in iOS

iSimulate: A Great Add-On For The iPhone Simulator

isimulateI just had a chance to check out iSimulate, a tool for iPhone developers created by Vimov. iSimulate is intended to complement the current iPhone simulator by adding most of the features a real iPhone has. In the spirit of full disclosure, Vimov sent me a promo code to try it out for free, but I only accepted it with the condition I could write my unfiltered impressions. So here we go.

iSimulate consists of two different parts: The iPhone app, which you need to purchase through the App Store, and a static library that you link with your program. Once your app is using the library, launching the iSimulate iPhone app lets you connect your device to your app and forward accelerometer, touch, and GPS events. In other words, most of the things the simulator doesn’t do natively.

iSimulate definitely passed my picky installation requirements with flying colors. I was afraid the installation would hook up with existing framework libraries, add new configurations, and in general mess up my system. Fortunately, hooking up the iSimulate library couldn’t be easier: Copy the provided .a library anywhere you want, link with it in your app (don’t forget the -ObjC linker flag), make sure you’re using the Core framework, and you’re good to go. That simple. That’s how I want external libraries to work.

You don’t even need to initialize anything. Just launch your app in the simulator, launch iSimulate on the iPhone and it detects your program running and lets you connect to it. The iPhone app itself even looks very pretty and polished. The overall package is definitely very professional-looking.

From there, any touch on the device is forwarded to the simulator. So you can finally do off-center multi touches, or two touches that happen at different times, or even 5-touch events (the max the iPhone support). The other big one is being able to tilt or shake your device and see the game react correctly on the simulator, which is would have been very handy when writing the accelerometer code to move flowers around in Flower Garden, but would almost be necessary when you’re making heavy use of accelerometer input for games like Sky Burger. Finally, it also claims to give you location information, but I didn’t have an app I could easily test it with.

Flowers affected by gravity on the simulator

Flowers affected by gravity on the simulator

Another situation where iSimulate is a life savior is when trying to capture a video of your game. If you rely on multi touch or accelerometer features, then your only options are to either hack in something yourself, or dig out a physical video camera and record it the old-fashioned way (which is surprisingly time consuming and creates less-than-ideal results). With iSimulate you can still use a desktop video capture software on the simulator and create a top-quality in a fraction of the time.

Not everything is perfect though. I thought the forwarding of touch events would be incredibly useful, until I realize I have no idea what I’m about to tap because the program is running on the simulator, not on the device. So I’m just making a guess about where my finger is going to land. It’s not even like a mouse cursor that you see where it’s going and then you click. You’re literally tapping blind hoping you touch what you wanted. That works with a static UI, but if you have moving elements you need to touch, you’re totally out of luck. I wonder if they could extend iSimulate to capture the image from the simulator and forward it to the iPhone. Even if they only refreshed the image a few times per second, that would be enough to make touch input a lot more friendly.

There’s another big problem with touch input though. From their docs page, iSimulate works great with OpenGL apps, but doesn’t work with the following UIKit controls: Keyboard, UIScrollView (including MKMapView), UIPickerView and UITableView. Wow! Apart from the keyboard one (no big deal, we have a real keyboard attached) the other ones are pretty major. I’m sure they have a good reason why, but I can’t imagine what that might be from my knowledge of how the touch even system works (anybody from Vimov care to comment on that?). Heck, I’d even be willing to add some extra code to my app to hook directly into iSimulate input events if it means it would work with those classes. Apart from that, I found one case in Flower Garden where iSimulate failed: Touching the bouquet tag to bring up the editing mode. It’s weird, it would let me touch-drag it to move it, but it wouldn’t go into editing mode.

The accelerometer input worked flawlessly, but here iSimulate has some competition from Accelerometer Simulator, an open-source app plus library to forward accelerometer data from the device to the app. It’s not nearly as slick as iSimulate, but it’s free, so that migth be a more attractive solution for some people.

Overall, is iSimulate worth the $32 price tag (it’s $15.99 at the moment)? I would say yes if you’re developing OpenGL iPhone games with heavy use of multi touch and accelerometer input and you’re planning on making money from them. In that case, you’re better off spending an hour of your time polishing the game (or taking a break from programming) and buying iSimulate. However, if you’re using UIKit objects or you just need accelerometer input, then you might be better off just using Accelerometer Simulator. If Vimov can fix the UIKit input and display the output of the simulator on the device, iSimulate would become an indispensable tool in every programmer’s toolbox.

  • D.K.

    For an accelerometer-heavy app, you need to be as responsive as possible. Are there any latency issues when transmitting data from the device to the simulator?
    Also, at what rate does is data sent from the device to the simulator? Is it transmitted as soon as the event is received, or is it sent at a fixed frame rate with events potentially bundled together?

  • There is definitely going to be some delay because the events are being transmitted over WiFi. But I imagine that’s going to be in the range of 20-30ms. I certainly didn’t notice any lag with the accelerometer, but Flower Garden is not a twitch game. The touches seemed very responsive too, so they’re definitely minimizing lag.

    I’m not sure at what rate data is being sent to the client. You’ll have to ask Vimov about it.

  • This is Amr from vimov.

    All events are transmitted as soon as the events occur and not at a fixed frame rate.

    We have used it with accelerometer heavy apps, and we didn’t see any noticeable lag. A game like Apple’s “Touch Fighter 2” sample code (http://bit.ly/GqAbJ) which uses accelerometer for space ship control and touches to fire weapons works flawlessly with iSimulate. There may occur a lag however if your application relies on heavy accelerometer use and heavy multi-touch use (like 5 simultaneous touches).

  • Haven’t tested it yet but you might also wanna take a look at http://code.google.com/p/accelerometer-simulator/. It seems to only transmit accelerometer data but it is free, open-source, and it should be relatively easy to add touch events support. With a bit more work, it should also be possible to send images of the application through the network à la VNC to help positioning fingers when tapping the screen…

    Although I didn’t work with Unity3D myself, I have seen all these features working in their engine (accelerometer, touch events and image forwarding to the device).

  • Hello dear,

    I look forward to planting flower on my iPhone as is shown on picture in your article :-). It would be cool!

    Love,

    Granny

  • Dan

    FYI, you can perform off-center multitouches in the simulator by holding down the shift key.

  • How about that? All this time and I didn’t know about the shift trick to offset the multitouch. Nice!