ios - guidelines - Cómo deshabilitar el suavizado de fuentes en Xcode 9?
toolbar xcode (3)
Travesura manejada?
Aquí hay una captura de pantalla de mi Xcode 9 con Deccy en 13pt:
Creo que lo anterior es lo que quieres. Aquí está stock Xcode mostrando el mismo archivo:
¿Pero cómo?
Intenté profundamente para una forma no invasiva de lograr esto y fallé. Por lo que puedo decir, la ruta de renderizado de texto en Xcode 9 activa deliberadamente el suavizado de fuentes.
Antes de continuar, presente una solicitud de función con Apple. Solo lleva unos minutos, y es su mejor esperanza para una respuesta que eso se pueda debatir frente a aquellos con instintos de seguridad sólidos y una cardioscopiatura forzada:
Escribí un complemento de Xcode. Es posible que haya escuchado que Xcode 9 usa restricciones de firma de código para prohibir la carga de complementos. Esto es cierto, pero algunos inconformes continúan, y esta noche cabalgaremos con ellos.
Paso uno
Hay una herramienta, update_xcode_plugins . Puede usarlo para quitar la firma del código de su copia de Xcode, y con ella la restricción de carga del paquete:
$ gem install update_xcode_plugins
$ update_xcode_plugins --unsign
Si cambias de opinión, puedes hacer esto para volver (¿una copia de seguridad, creo?) De Xcode firmado:
$ update_xcode_plugins --restore
Segundo paso
Hay otra herramienta, Alcatraz . Es un administrador de complementos para Xcode. Elegí instalarlo porque proporciona un complemento que proporciona una plantilla de proyecto para complementos. Seguí estas instrucciones para instalar Alcatraz, que se reduce a esto:
$ git clone https://github.com/alcatraz/Alcatraz.git
$ cd Alcatraz
$ xcodebuild
Lancé Xcode, hice clic en el cuadro de diálogo que me advirtió sobre el nuevo complemento y luego utilicé la ventana recién agregada> Administrador de paquetes para instalar la plantilla de "Complemento de Xcode".
Paso tres
Hice un proyecto con esta plantilla.
Mientras escribo esto, la plantilla "Xcode Plugin" no se ha actualizado para admitir Xcode 9. No se preocupe. Ejecuté este comando para tomar el UUID de compatibilidad de Xcode 9:
$ defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
Visité Info.plist de mi nuevo proyecto y agregué ese UUID a la matriz DVTPlugInCompatibilityUUIDs
.
Luego, SourceEditor.framework
a mi proyecto. Ese fue un proceso de dos pasos:
Visita la configuración de compilación del objetivo. Agregue esto a las Rutas de Búsqueda de Marco:
/Applications/Xcode.app/Contents/SharedFrameworks/
Visita las Fases de compilación del objetivo. Agregue una nueva fase "Enlace binario con bibliotecas". Hit the plus. Navegue hasta el directorio anterior (puede presionar la tecla / y luego pegar la ruta) y elegir
SourceEditor.framework
. Debería aparecer en la lista. El proyecto todavía debe construir.
Luego, hice que el archivo .mm
mi complemento se .mm
( .mm
archivo .h
, no es necesario para este PoC):
#import <AppKit/AppKit.h>
#include <dlfcn.h>
extern void CGContextSetAllowsFontAntialiasing(CGContextRef, BOOL);
static void hooked_sourceEditorSetFontSmoothingStyle(CGContextRef ctx) {
CGContextSetAllowsFontAntialiasing(ctx, NO);
}
@interface NoAA : NSObject
@end
@implementation NoAA
+ (void)pluginDidLoad:(NSBundle *)plugin
{
NSArray *allowedLoaders = [plugin objectForInfoDictionaryKey:@"me.delisa.XcodePluginBase.AllowedLoaders"];
if (![allowedLoaders containsObject:[[NSBundle mainBundle] bundleIdentifier]])
return;
Class cls = NSClassFromString(@"SourceEditorScrollView");
NSBundle* bundle = [NSBundle bundleForClass:cls];
void *handle = dlopen(bundle.executablePath.fileSystemRepresentation, RTLD_NOW);
if (!handle)
return;
uint8_t* set_font_smoothing_fn = dlsym(handle, "sourceEditorSetFontSmoothingStyle");
if (!set_font_smoothing_fn)
goto fin;
void* set_font_smoothing_fn_page = (void*)((long)set_font_smoothing_fn & -PAGE_SIZE);
if (mprotect(set_font_smoothing_fn_page, PAGE_SIZE, PROT_READ | PROT_WRITE | PROT_EXEC))
goto fin;
set_font_smoothing_fn[0] = 0xe9; // jmp
uint32_t* jmp_arg = (uint32_t*)(set_font_smoothing_fn + 1);
*jmp_arg = (uint32_t)((long)hooked_sourceEditorSetFontSmoothingStyle - (long)(jmp_arg + 1));
mprotect(set_font_smoothing_fn_page, PAGE_SIZE, PROT_READ | PROT_EXEC);
fin:
dlclose(handle);
}
@end
... Creo que el personaje de agregar fotos. Básicamente, solo define una función que toma un CGContextRef
y desactiva el antialiasing de texto para él. Luego, sobrescribe el comienzo de una función dentro del marco SourceEditor que normalmente configura los ajustes de antialiasing, ya no los necesita, para saltar a nuestra función. Hace todo esto de una manera increíblemente insegura, por lo que si algo sale mal, Xcode puede cortarse cortésmente.
Cree y ejecute el proyecto, que instala automáticamente el complemento. Acepte la adición de su complemento, y eso es todo.
¿Ahora que?
Si algo aquí no funciona porque me equivoqué, házmelo saber. No estoy planeando incluir esto en un plugin de Alcatraz, pero usted o cualquier otra persona deben hacerlo con crédito (después de presentar una solicitud de función con Apple).
¡Feliz hacking!
Tengo una gran fuente de programación Deccy que solo se ve bien con suavizado de fuente (anti aliasing) deshabilitado en Xcode. Con Xcode 8, lo siguiente sería el truco:
defaults write com.apple.dt.Xcode NSFontDefaultScreenFontSubstitutionEnabled -bool YES
defaults write com.apple.dt.Xcode AppleAntiAliasingThreshold 24
Pero esto ya no funciona con Xcode 9.
¿Sería posible desactivar el suavizado de fuentes en Xcode 9?
Aquí hay pasos alternativos que podrían funcionar para usted.
- Intente encontrar el archivo com.apple.dt.Xcode.plist en Macintosh HD / Library / Preferences.
- Copie el archivo al escritorio
- Abra el archivo y agregue NSFontDefaultScreenFontSubstitutionEnabled a (Boolean) SÍ
- agregue AppleAntiAliasingThreshold a (Número) 24
- Reemplazar este archivo con archivo de preferencia
- Reinicie el sistema y Xcode
Nota: para un lado más seguro, mantenga una copia de seguridad del archivo original.
Si ''vive'' en XCode y necesita una representación nítida de esta fuente TrueType, entonces la edición predeterminada de la aplicación XCode con PrefEdit.app , o la defaults write com.apple.dt.Xcode.*
tiene ningún efecto.
Si piensa fuera de la caja, puede que le interese lo siguiente para lograr una crujiente cobertura en su Mac.
Como la fuente Deccy se ve mejor en 12pt, tiene sentido elevar el AppleAntiAliasingThreshold en el dominio global a 13, el valor predeterminado para esta configuración es 4.
También puede sugerir que no AppleFontSmoothing .
defaults write -g AppleFontSmoothing -int 0 defaults write -g AppleAntiAliasingThreshold -int 13
Además de estos ajustes, se puede lograr un poco más en el panel Preferencia de accesibilidad en Preferencias del sistema: La pantalla tiene 2 marcas de verificación que debe probar: '' Diferenciar sin color '' e '' Incrementar contraste ''.
"La belleza está en el ojo del espectador" , espero que esto ayude.