Overview:
when synchronizing CRM for iPad, an error occurs: Upsert requires view all data on a non-unique custom index
Example:

Root Cause:
The end-user does not have View All Data permission on the Object. In addition, a custom field defined in the Object has the External ID selected but the Unique attribute is not selected.
If upserting a record for an object that gets a custom field with both the External ID and Unique attributes selected (a unique index), the end-user does not need any special permissions. This is because the Unique attribute prevents the creation of duplicates.
If upserting a record for an object that gets the External ID attribute selected but the Unique attribute is not selected (a non-unique index), the end-user must have the permission View All Data of the object. Having this permission prevents the client application from using upsert() to insert an accidental duplicate record because it can not see that the record existed.
Solution:
Ensure the custom field gets both the External ID and Unique attributes selected or the end-user has the permission View All Data of the object.
Related Documentation:
Salesforce Help Documentation: SOAP API Developer Guide