tags:

views:

7022

answers:

21

I have heard of apps not working properly on the simulator but working properly on the actual iPhone device. Has anyone experienced an app that runs perfectly in the simulator but not on the actual iPhone device?

+2  A: 

There are certain bits of code that won't work on the simulator (using the iPhone Keychain, for example), but for almost all applications, the simulator will work exactly like the iPhone.

That said, there's absolutely no replacement for testing on a real device.

August
I think memory management is a big exception to that. The rule of thumb that you always test on hardware is spot on though.
Roger Nolan
+9  A: 

If your app is graphics intensive, like say a game, the performance of the simulator DOES NOT resemble at all that of the hardware. Your application will probably be smooth and work great on the simulator, but on hardware it'll likely render at a crawl unless you know what your doing. You can easily go from 60fps to 3fps between Simulator and hardware.

Robert Gould
I saw the opposite: my app would crawl on the Simulator, but be fine on the device. I think it is due to poor graphic capabilities of the MacBook; it may have been better with a better Mac.
Kristopher Johnson
Kristopher, that doesn't sound right. According to my benchmarks, my first-generation (white) Core 2 Duo MacBook can push 9X the triangles per second in OpenGL that the iPhone can. Perhaps you have a thread-locking issue that's jamming up your rendering.
Brad Larson
No threads, and not using OpenGL. But the point is that performance can be radically different between the two platforms.
Kristopher Johnson
I have seen a number of situations where animations wouldn't be 100% smooth in the iPad simulator, but were absolutely fine on the device. Core Animation performance is _not_ always better in the Simulator, and you should always test on an actual device.
Nick Forge
+1  A: 

Without considering the performance differences between the two, there used to be some things that the simulator didn't do correctly - i.e. it would mess up audio in some cases (see this question). However since the 2.2 SDK this issue has been resolved and the sound seems to be fine in the simulator. That's not to say that there is some other incompatibilities lurking down there! (Just none I've run into)

Marc Novakowski
+3  A: 

I know there are some differences in the OpenGL ES implementation between the device and the simulator. From what I understand this is mainly because of the graphics chip on the iPhone (PowerVR MBX) having vastly different capabilities than other mac machines. Many of the hardware limits are not enforced in the simulator, so it is entirely possible to get something running in the simulator that will totally crash on the device.

There are also some OpenGL ES extensions that are supported by the iPhone hardware that are not supported in the simulator. I believe the major one is PowerVR texture compression (PVRTC).

Another problem area can be memory footprint. Anecdotally, I have not seen the simulator automatically enforce the memory limitations of the device. Therefore, it is possible to have something that runs in the simulator fine, happily consuming copious amounts of RAM and never bothering to free any of it only to be swiftly terminated after a short continuance of such behaviour when running on a device.

Another difference to watch out for in the graphics chip is that the iPhone only supports unsigned shorts as data types for indices, which means that you can only address 65,536 vertices in one vertex array. The Mac supports much larger data types. This caused me problems.
Brad Larson
+1  A: 

I had a problem running a relatively simple 1/30 sec timer to do updates for a game. It runs fine in the simulator, and freezes out input on the device.

John Haney
Were you able to find a solution?
+1  A: 

I had some sound effects that played fine in the simulator, but not on the device. I had to change the format to something that the device would handle.

Kristopher Johnson
+2  A: 

Also note that you will be compiling against the OS X frameworks (where applicable) when building for the simulator so you could be using methods and classes that aren't available on the iPhone versions of the frameworks.

One example I can think of off the top of my head is NSPredicate. I was able to compile and run an app using NSPredicate in the simulator, but it wouldn't compile for the device since that class isn't available.

Martin Gordon
+1  A: 

Regarding sounds, I was having the same problem. The issue was that the sound encodings that the Simulator supports is a different set of sounds than the device. I hope that helps.

+1  A: 

There are many trivial examples. For example you can allocate far more memory on the simulatro than on a real phone.

The simulator is just that, it simulates the iPhone OS X using Mac OS X. It does not emulate hardware.

You should always test on real hardware.

Roger Nolan
+1  A: 

I had many problems with libraries and frameworks when moving from the simulator to the device. Not least that they seem to have different architectures!

Ade St John-Bee
+1  A: 

I have seen the positioning of objects, like toolbars be different on simulator than on the phone. Very annoying.

jm
+1  A: 

Yeah....

Apps compiled for 2.x will work fine on 3.0 device, but it will crash on 3.0Simulator

Note: 1. If you compile for 3.0, app will work fine on 3.0 simulator also... 2. a)Compile for 2.x and launch the app in simulator. b)Now change the iPhone Simulator Hardware to "3.0". c)Then launch the app we installed earlier in step a). CRASH !!!!!!!!

+1  A: 

If you enable GCC_ENABLE_FLOATING_POINT_LIBRARY_CALLS, your app will crash all over the place in the simulator but work on the iPhone.

Quartz graphics calls in the iPhone simulator are faster than Java2D calls on the same computer--wicked fast.

+1  A: 

I've had issues in memory-hungry applications where the Simulator would work just fine (because it would assume the iPhone/iPod Touch's memory was all yours to play with), while the device would crash (because other apps had leaked and Apple background services had eaten up some memory) and I hadn't implemented proper memory management or a response to the didReceiveMemoryWarning selector.

Tim
+7  A: 

Filenames are case-sensitive on the iPhone, but not in the simulator.

So, for example, if you try to load an image with UIImage *iconImage = [UIImage imageNamed:"MyIcon.png"], but your resource is actually named "myicon.png", then it will work on the simulator, but not on the device.

Kristopher Johnson
Have you filed a bug report to Apple on this yet?
Steven Noyes
I don't think they would consider it to be a bug. The iPhone's filesystem isn't intended to be the same as a Mac's, and the Mac's filesystem is case-insensitive for historical reasons.
Kristopher Johnson
So we would want (and need) 10 filenames on the iPhone... all called the same... except for case? What would be the purpose? Just to *DELIBERATELY* not match millions of mac filesystems? What would be the big benefit?
Susanna
Most UNIX-based systems have case-sensitive filesystems. Mac OS X is "weird" in this regard, and it was done this way to maintain compatibility with pre-OSX Mac systems. There is really no reason for iOS to match it.
Kristopher Johnson
+1  A: 

movie file (m4v type) as my exprience is first time playing properly

but at second time it flickers screen of simulator...

whereas in iPhone device it works fime...

yakub_moriss
+1  A: 

If status bar of application is hidden,In case of simulator it still consumes touch event. But in the device it behaves perfectly.

shakthi
+1  A: 

Fingertips are larger than the 1 pixel endpoint of a mouse cursor. To do proper, even minimal, usability testing you should deploy your App to a device.

Matthieu Cormier
A: 

I have a question. How do I use the simulator to connect to the internet? Im doing an app that will require to connect to a webservice. Works on the device, not on the simulator. Reason why I need it to work on the simulator is to demo to clients and supervisors. Rather than telling them to squeeze their faces on 1 iPod Touch.

Melvin Lai
This is not an answer to the question. This should be posed as a new question -- SO is not a discussion forum.
Stephen Darlington
A: 

I'm currently having an issue with pinching. It works great on my simulator, but not on my device. Can't figure out why.

Phamer
A: 

Yes - it happened to me the other day. I'm new to the iphone, and so had deleted MainWindow.xib thinking it was unused. The app worked perfectly on the device - but crashed when installing on the phone.

Another issue we ran into was our three20 dependencies, which were set to ios 3.2 instead of 4.1. Worked perfectly in the simulator, but bombed on the device (since the files were compiled for the wrong arch).

smtlaissezfaire