IOS 17 params encoding issue Activity, Contacts, Relationships, Events entity
Overview
For apps linked on or after iOS 17 and aligned OS versions, URL parsing has updated from the obsolete RFC 1738/1808 parsing to the same RFC 3986 parsing as URLComponents. This unifies the parsing behaviors of the URL and URLComponents APIs. Now, URL automatically percent- and IDNA-encodes invalid characters to help create a valid URL. You can read about it more https://developer.apple.com/documentation/foundation/url/3126806-init.
How URL looks like in normal form:
/sites/all/modules/civicrm/extern/rest.php?key=KEY&civimobile =1 &api_key =APIKEY &entity =Activity &action =get &json =%7B%22sequential%22:1,%22is_deleted%22:0,%22is_current_revision%22:1,%22is_test%22:0,%22contact_id%22:%222%22,%22status_id%22:%7B%22NOT+IN%22:[%222%22,%223%22]%7D,%22return%22:%22subject,activity_date_time,activity_type_id,status_id.name,status_id,status,priority_id,priority_id.label,priority_id.name,details,duration,source_contact_id,assignee_contact_id,target_contact_id,activity_type_id.label,status_id.label,short_description,location,case_type_is_active,can_edit,can_delete%22,%22options%22:%7B%22limit%22:20,%22sort%22:%22activity_date_time+DESC%22%7D%7D
How URL looks like in IOS 17:
/sites/all/modules/civicrm/extern/rest.php?key=KEY&civimobile=1&api_key=APIKEY&entity=Activity&action=get&json=%257B%2522sequential%2522:1,%2522is_deleted%2522:0,%2522is_current_revision%2522:1,%2522is_test%2522:0,%2522contact_id%2522:%25222%2522,%2522status_id%2522:%257B%2522NOT+IN%2522:%5B%25222%2522,%25223%2522%5D%257D,%2522return%2522:%2522subject,activity_date_time,activity_type_id,status_id.name,status_id,status,priority_id,priority_id.label,priority_id.name,details,duration,source_contact_id,assignee_contact_id,target_contact_id,activity_type_id.label,status_id.label,short_description,location,case_type_is_active,can_edit,can_delete%2522,%2522options%2522:%257B%2522limit%2522:20,%2522sort%2522:%2522activity_date_time+DESC%2522%257D%257D\
So API doesn’t accept query params in IOS 17. Lower IOS versions and Android work as expected
Environment information
- CiviCRM: _Master/5.67.3/5.69.4
- PHP: 7.3/8.0+