Do not link to libxml2.2.dylib, not libxml2.dylib. Linking this should ensure that you are always connected with the correct implementation of your architecture.
As a rule, in your applications a link to the general version of the library, and not to a specific version. In this case, it means libxml2, not libxml2.2.
You are contacting a dynamic library (symbolic link to), which at runtime will automatically indicate the correct implementation for the current version of the OS and architecture. Linking to a specific version of the library does not guarantee this, and you can end up linking to something that has only one architecture. Thus, during development, if you reference libxml2.2.dylib, when you target the simulator, you can refer to something that is i386, then when you target the device, it cannot find the correct architecture (because he is trying to use i386 for armvWhatever, and that is exactly what you are saying).
source share