Maybe this answers my own question.
Wrote the below in swift:
var codes = Set<String>()
for identifier in Locale.availableIdentifiers {
let locale = Locale(identifier: identifier)
if let currencyCode = locale.currencyCode {
codes.insert(currencyCode)
}
}
print(codes.sorted())
Which prints:
["AED", "AFN", "ALL", "AMD", "ANG", "AOA", "ARS", "AUD", "AWG", "AZN", "BAM", "BBD", "BDT", "BGN", "BHD", "BIF", "BMD", "BND", "BOB", "BRL", "BSD", "BTN", "BWP", "BYN", "BZD", "CAD", "CDF", "CHF", "CLP", "CNY", "COP", "CRC", "CUP", "CVE", "CZK", "DJF", "DKK", "DOP", "DZD", "EGP", "ERN", "ETB", "EUR", "FJD", "FKP", "GBP", "GEL", "GHS", "GIP", "GMD", "GNF", "GTQ", "GYD", "HKD", "HNL", "HRK", "HTG", "HUF", "IDR", "ILS", "INR", "IQD", "IRR", "ISK", "JMD", "JOD", "JPY", "KES", "KGS", "KHR", "KMF", "KPW", "KRW", "KWD", "KYD", "KZT", "LAK", "LBP", "LKR", "LRD", "LYD", "MAD", "MDL", "MGA", "MKD", "MMK", "MNT", "MOP", "MRU", "MUR", "MVR", "MWK", "MXN", "MYR", "MZN", "NAD", "NGN", "NIO", "NOK", "NPR", "NZD", "OMR", "PAB", "PEN", "PGK", "PHP", "PKR", "PLN", "PYG", "QAR", "RON", "RSD", "RUB", "RWF", "SAR", "SBD", "SCR", "SDG", "SEK", "SGD", "SHP", "SLL", "SOS", "SRD", "SSP", "STN", "SYP", "SZL", "THB", "TJS", "TMT", "TND", "TOP", "TRY", "TTD", "TWD", "TZS", "UAH", "UGX", "USD", "UYU", "UZS", "VES", "VND", "VUV", "WST", "XAF", "XCD", "XOF", "XPF", "YER", "ZAR", "ZMW"]
So it seems that my iPhone (iOS 14.6) supports 153 currencies while in-app purchase supports a subset of 45 currencies.
Which means 108 currencies available on iPhone are not supported by in-app purchase.
Here is the list of unsupported currencies:
{'AFN',
'ALL',
'AMD',
'ANG',
'AOA',
'ARS',
'AWG',
'AZN',
'BAM',
'BBD',
'BDT',
'BHD',
'BIF',
'BMD',
'BND',
'BOB',
'BSD',
'BTN',
'BWP',
'BYN',
'BZD',
'CDF',
'CRC',
'CUP',
'CVE',
'DJF',
'DOP',
'DZD',
'ERN',
'ETB',
'FJD',
'FKP',
'GEL',
'GHS',
'GIP',
'GMD',
'GNF',
'GTQ',
'GYD',
'HNL',
'HTG',
'IQD',
'IRR',
'ISK',
'JMD',
'JOD',
'KES',
'KGS',
'KHR',
'KMF',
'KPW',
'KWD',
'KYD',
'LAK',
'LBP',
'LKR',
'LRD',
'LYD',
'MAD',
'MDL',
'MGA',
'MKD',
'MMK',
'MNT',
'MOP',
'MRU',
'MUR',
'MVR',
'MWK',
'MZN',
'NAD',
'NIO',
'NPR',
'OMR',
'PAB',
'PGK',
'PYG',
'RSD',
'RWF',
'SBD',
'SCR',
'SDG',
'SHP',
'SLL',
'SOS',
'SRD',
'SSP',
'STN',
'SYP',
'SZL',
'TJS',
'TMT',
'TND',
'TOP',
'TTD',
'UAH',
'UGX',
'UYU',
'UZS',
'VES',
'VUV',
'WST',
'XAF',
'XCD',
'XOF',
'XPF',
'YER',
'ZMW'}
Is there anyone out there that had to think about this?
In a marketplace scenario if the seller has one of the unsupported currencies I am currently thinking to default to USD.
In this way I can limit the currency exchange calls to only the supported in-app purchase currencies.
I welcome better ideas.