Detectar cuando un carácter unicode no se puede mostrar correctamente

Algunos caracteres Unicode no se pueden mostrar en iOS, pero se muestran correctamente en OS X. De forma similar, algunos caracteres Unicode que iOS puede mostrar no se pueden mostrar en watchOS. Esto se debe a diferentes fonts incorporadas instaladas en estas plataforms.

Cuando un carácter no se puede mostrar, como 🂡, aparece como? dentro de una caja, así:
introduzca la descripción de la imagen aquí

También he visto algunos caracteres mostrarse como un extraterrestre en lugar de otro – no estoy seguro de por qué la diferencia:
introduzca la descripción de la imagen aquí

¿Hay alguna manera de saber cuándo un carácter unicode específico no se mostrará correctamente dado una cadena del carácter unicode como "🂡" ?

Tenga en count que la solución debe funcionar tanto para iOS como para watchOS 2.

Puede usar CTFontGetGlyphsForCharacters() para determinar si una fuente tiene un glifo para un determinado punto de código (tenga en count que los caracteres suplementarios deben verificarse como pares sustitutos):

 CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica"), 12, NULL); const UniChar code_point[] = { 0xD83C, 0xDCA1 }; // U+1F0A1 CGGlyph glyph[] = { 0, 0 }; bool has_glyph = CTFontGetGlyphsForCharacters(font, code_point, glyph, 2); 

O en Swift:

 let font = CTFontCreateWithName("Helvetica", 12, nil) var code_point: [UniChar] = [0xD83C, 0xDCA1] var glyphs: [CGGlyph] = [0, 0] let has_glyph = CTFontGetGlyphsForCharacters(font, &code_point, &glyph, 2) 

Si desea verificar el set completo de fonts de reserva en las que el sistema intentará cargar un glifo, deberá verificar todas las fonts devueltas por CTFontCopyDefaultCascadeListForLanguages() . Consulte la respuesta a esta pregunta para get información sobre cómo se crea la list de fonts de reserva.