macOS를 일관되게 나쁘게 만들기 (진지하게)

발행: (2026년 3월 28일 AM 04:15 GMT+9)
4 분 소요

Source: Hacker News

번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.

macOS 26 창 모서리 문제

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

Screenshot of macOS window corners

저는 최근 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.

#Programming

Footnotes

  1. macOS UI 요소의 과도한 둥근 모양은 많은 사람들이 시각적으로 불쾌하게 느끼는 디자인 선택입니다.

  2. SIP를 비활성화하면 시스템 파일(예: /root)에 대한 보호가 감소합니다. 공격자가 이미 접근 권한을 가지고 있다면 큰 문제가 아닐 수도 있지만, 전체 보안 태세는 여전히 낮아집니다.

0 조회
Back to Blog

관련 글

더 보기 »

아무도 추적하지 않는 AI 코드 부채

6개월 전, 우리 팀은 그 어느 때보다 빠르게 기능을 출시했습니다. 우리는 모든 일에 AI 어시스턴트를 사용했습니다—코드 생성, 디버깅, 아키텍처 결정. The ve...