macOS를 일관되게 나쁘게 만들기 (진지하게)
Source: Hacker News
번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.
macOS 26 창 모서리 문제
다양한 버그와 함께 macOS 26으로 업그레이드하면서 겪는 문제 중 하나는 창 모서리의 악명 높은 일관성 부족입니다. 제품 디자이너들이 과도한 둥근 형태1를 선호하게 만드는 정확한 이유는 잘 모르겠습니다. 제가 지금까지 본 가장 못생긴 예 중 하나는 현재 YouTube UI 디자인입니다. UI 디자인은 큰 영향을 미치며, 디자이너들은 종종 대기업을 모방하기 때문에 이 “못생긴” 효과가 곧 다른 곳에서도 보일 가능성이 높습니다.

저는 최근 macOS 26으로 업그레이드했으며, 많은 사람들처럼 모서리가 못생겼다고 느꼈습니다. 더욱 답답한 점은 일관성이 없다는 것입니다. 일부 사용자는 macOS 시스템 무결성 보호(SIP)를 비활성화하여 이를 해결하려 하는데, 이는 시스템을 취약하게 만들 수 있습니다2. SIP를 비활성화하면 시스템 앱(예: “끔찍하게 나쁜 모서리”를 가진 Safari)이 사용하는 동적 라이브러리를 편집할 수 있지만, 보안도 동시에 감소합니다.
더 나은 접근법: 일관된 둥근 모서리
모든 것을 둥글지 않게 만들기보다는, 모든 것을 더 둥글게 만들어 일관된 모습을 유지할 수 있습니다. 아래는 서드파티 GUI 앱에 대해 균일한 모서리 반경을 강제하는 작은 트윅입니다.
#import
#import
static CGFloat kDesiredCornerRadius = 23.0;
static double swizzled_cornerRadius(id self, SEL _cmd) {
return kDesiredCornerRadius;
}
static double swizzled_getCachedCornerRadius(id self, SEL _cmd) {
return kDesiredCornerRadius;
}
static CGSize swizzled_topCornerSize(id self, SEL _cmd) {
return CGSizeMake(kDesiredCornerRadius, kDesiredCornerRadius);
}
static CGSize swizzled_bottomCornerSize(id self, SEL _cmd) {
return CGSizeMake(kDesiredCornerRadius, kDesiredCornerRadius);
}
__attribute__((constructor))
static void init(void) {
// Only apply to third‑party GUI apps; skip CLI tools, daemons, and Apple system apps
NSString *bid = [[NSBundle mainBundle] bundleIdentifier];
if (!bid || [bid hasPrefix:@"com.apple."]) return;
Class cls = NSClassFromString(@"NSThemeFrame");
if (!cls) return;
Method m1 = class_getInstanceMethod(cls, @selector(_cornerRadius));
if (m1) method_setImplementation(m1, (IMP)swizzled_cornerRadius);
Method m2 = class_getInstanceMethod(cls, @selector(_getCachedWindowCornerRadius));
if (m2) method_setImplementation(m2, (IMP)swizzled_getCachedCornerRadius);
Method m3 = class_getInstanceMethod(cls, @selector(_topCornerSize));
if (m3) method_setImplementation(m3, (IMP)swizzled_topCornerSize);
Method m4 = class_getInstanceMethod(cls, @selector(_bottomCornerSize));
if (m4) method_setImplementation(m4, (IMP)swizzled_bottomCornerSize);
}
Dylib 빌드, 서명 및 설치
clang -arch arm64e -arch x86_64 -dynamiclib -framework AppKit \
-o SafariCornerTweak.dylib SafariCornerTweak.m
sudo mkdir -p /usr/local/lib/
sudo cp SafariCornerTweak.dylib /usr/local/lib/
sudo codesign -f -s - /usr/local/lib/SafariCornerTweak.dylib
Create a LaunchAgent to Load the Library at Login
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.dyld-inject</string>
<key>ProgramArguments</key>
<array>
<string>launchctl</string>
<string>setenv</string>
<string>DYLD_INSERT_LIBRARIES</string>
<string>/usr/local/lib/SafariCornerTweak.dylib</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Copy the plist to your LaunchAgents folder:
cp com.local.dyld-inject.plist ~/Library/LaunchAgents/com.local.dyld-inject.plist
Load it:
launchctl load ~/Library/LaunchAgents/com.local.dyld-inject.plist
Now at least everything is consistently bad.