6.0.0-beta1
7/4/25

[#14361] Updating contacts on iOS9.3.1 does not transfer the contact picture to the server
Summary Updating contacts on iOS9.3.1 does not transfer the contact picture to the server
Queue Turba
Queue Version 4.2.14
Type Bug
State Resolved
Priority 2. Medium
Owners mrubinsk (at) horde (dot) org
Requester torben (at) dannhauer (dot) info
Created 05/10/2016 (3342 days ago)
Due
Updated 05/11/2016 (3341 days ago)
Assigned 05/11/2016 (3341 days ago)
Resolved 05/11/2016 (3341 days ago)
Github Issue Link
Github Pull Request
Milestone
Patch No

History
05/11/2016 11:23:29 PM Michael Rubinsky Comment #6 Reply to this comment

[Show Quoted Text - 19 lines]
I've issued so many bug reports to Apple I have lost count. :)

I've given up on them taking any of them seriously.
05/11/2016 08:28:13 PM torben (at) dannhauer (dot) info Comment #5 Reply to this comment

[Show Quoted Text - 18 lines]
Have you issued a bug report on apple?

Its a pitty the every new release brokes core elements of the iphone. 
They should focus a bit more on quality instead of UI stuff.
05/11/2016 05:20:48 PM Michael Rubinsky Comment #4
State ⇒ Resolved
Reply to this comment
Looks like it's more interesting than I thought.

It looks like it's related to the size of the original image. If the 
original image from Horde is over a certain size, the image is handled 
differently than if it is smaller.

I don't know the exact size, but if the image is under a certain size, 
say 100k, the Picture tag is not sent to the server AT ALL. If it's 
over a certain size, but still under some upper limit, say 100k - 
500k, the Picture tag is sent, but it's empty. Now, if the image is 
above this upper limit, the Picture tag is sent, with the picture, but 
it's a cropped version of the picture.

I've added code that prevents the image getting completely wiped out 
in these iOS devices, but as mentioned before this prevents the image 
from being purposefully deleted from the device and this doesn't 
prevent the image from being modified if it was cropped by the client.
05/11/2016 02:35:34 PM Michael Rubinsky Comment #3 Reply to this comment
Indeed. iOS is broken in a way we can't work around it in every case.

If the picture currently attached to the contact originated on the the 
device *originally*, then it correctly sends the image data with every 
edit. If the image currently attached was provided by the server 
originally, then the edit will NOT include the picture data and will 
be removed on the server with edits. However, the image will remain on 
the client. If you then edit the image on the client, the image data 
will be resent to the server.

I think I am going to add a user pref to ignore image deletions from 
iOS devices that way admins/users can decide if not being able to 
remove images client-side is a worthy trade-off.
05/11/2016 01:06:59 PM Michael Rubinsky Comment #2
State ⇒ Assigned
Assigned to Michael Rubinsky
Reply to this comment
It looks like iOS broke picture handling (again). It was broken around 
6.1, fixed around 8.1, and looks like it's broken again. Here is a 
snippet of the contact data sent from the iOS client to the server:

2016-05-10T15:41:16+02:00 DEBUG: [6597] I      <Modify>
2016-05-10T15:41:16+02:00 DEBUG: [6597] I       <ServerEntryId>
2016-05-10T15:41:16+02:00 DEBUG: [6597] I         [55 bytes of content]
2016-05-10T15:41:16+02:00 DEBUG: [6597] I       </ServerEntryId>
2016-05-10T15:41:16+02:00 DEBUG: [6597] I       <Data>

<snip>

2016-05-10T15:41:16+02:00 DEBUG: [6597] I        <POOMCONTACTS:LastName>
2016-05-10T15:41:16+02:00 DEBUG: [6597] I          testenson
2016-05-10T15:41:16+02:00 DEBUG: [6597] I        </POOMCONTACTS:LastName>
2016-05-10T15:41:16+02:00 DEBUG: [6597] I        <POOMCONTACTS:Picture />
2016-05-10T15:41:16+02:00 DEBUG: [6597] I       </Data>

Note the <POOMCONTACTS:Picture /> line. That's an empty tag element, 
meaning it has no content. The client is telling the server that there 
is no picture data associated with this contact.

This is *really* bad, considering that it is also not sending any 
SUPPORTED properties - meaning that most likely your contact images 
will be wiped with ANY edit of the contact on the client.

The way to signify a property is removed varies depending on a few 
things such as if the client is sending SUPPORTED data that indicates 
what properties should be "ghosted" or not and if the Picture element 
is listed in that SUPPORTED data or not.

Since different versions of iOS do different combinations of these 
things (both correctly and incorrectly), it really isn't feasible to 
implement a workaround since this could make it impossible to delete a 
contact picture if desired, while the client would believe it WAS 
deleted.

On the other hand, since this leads to data loss on the server, it 
might be worth this inconvenience. I'll have to test some things out 
to see what we can do.
05/10/2016 01:49:13 PM torben (at) dannhauer (dot) info Comment #1
Priority ⇒ 2. Medium
Type ⇒ Bug
Summary ⇒ Updating contacts on iOS9.3.1 does not transfer the contact picture to the server
Queue ⇒ Turba
Milestone ⇒
Patch ⇒ No
New Attachment: log.txt Download
State ⇒ Unconfirmed
Reply to this comment
My iPhone (Latest iOS: 9.3.1) does not send updated contact photos to 
horde (latest stable release 5.2.10). This feature worked already some 
time ago.

Other contact details are send to horde as expected.

I created a new user and created a log from the initil setup of that 
user. the Domain is anonymized to "test@mydomain.tld"

Please finde attached the log

Saved Queries