← 모든 글

macOS 27 릴리스 노트: 사용 중단, 동작 변경, 수정 사항

macOS 27 Golden Gate는 2026년 9월 14일 월요일에 빌드 26A428로 출시되었고, 같은 날 그 SDK(빌드 26A425)가 Xcode 27(27A266a)에 들어 있는 채로 나왔습니다. Apple의 릴리스 노트는 86개 영역, 272개 항목에 이르며, 새 기능 68건, 해결된 문제 173건, 알려진 문제 18건, 사용 중단 13건으로 이루어져 있습니다. 이 글은 Mac 개발자의 관점에서 노트를 읽습니다. 27 SDK에 링크하는 순간 앱의 동작을 바꾸는 항목, 다시 빌드하지 않아도 영향을 주는 OS 수준의 변경, SDK 자체의 헤더와 Swift 인터페이스로 대조한 사용 중단 13건, 그리고 아직 26.6.2로 돌아가는 Mac에서 제가 검증할 수 있었던 것과 없었던 것입니다. Rosetta와 arm64 설치 프로그램 기본값은 Golden Gate GA 글에서 다루었으니, 이 글은 나머지 전부를 다룹니다.123

TL;DR

  • 빌드 번호. 기기 26A428, SDK 26A425입니다. SDK 번호는 기기 번호가 아니며, 버그 리포트에서 빌드 번호를 물을 때 이 차이가 중요해집니다. 9월 26일 기준으로 Apple의 릴리스 노트 색인과 릴리스 피드 어디에도 macOS 27.0.1은 없습니다. 가장 최근 항목은 27과, 9월 21일 자 27.2 beta 2(26B5091g)입니다.137
  • 27에 링크했을 때의 동작. 13개의 변경이 27 SDK에 링크하는 순간부터 앱의 동작을 바꿉니다. 심볼이 아닌 메뉴 항목 이미지가 숨겨지고 이미지만 있는 항목은 예외 대우를 잃는 변경, NSOpenPanel이 콘텐츠 유형에서 canChooseFiles를 도출하는 변경, Layout Orientation 메뉴 항목이 Font 아래로 옮겨 가는 변경, 타이틀 바 액세서리가 경계 밖으로 그려지는 변경, TextField 프롬프트에 스타일이 적용되는 변경, 선택 가능한 Text의 TextRenderer, 시트와 팝오버 안에서 컨트롤 수정자가 초기화되는 변경, containerRelativeFrame의 세이프 에어리어 계산, LabeledContent가 메뉴 부제목이 되는 변경, 인스펙터 안의 TabView가 tabs 스타일로 바뀌는 변경, List가 이전에 거부하던 드롭을 받아들이는 변경, newDocument가 메모리 안의 문서를 받는 변경, 그리고 Mac Catalyst의 씬 라이프사이클 의무화와 확장된 상태 복원입니다.2
  • 다시 빌드하지 않아도 바뀌는 것. 메뉴 항목 심볼 이미지는 macOS 26.0 이상에서 링크한 모든 앱에서 사라지며, SwiftUI와 UIKit 메뉴에는 SDK 조건조차 없습니다. 제스처 인식기는 처음 히트 테스트된 뷰 계층에만 속하게 되고, 멈춘 제스처는 스스로 취소되며, 기본 locationInView:는 NSZeroPoint를 반환합니다. launchd는 격리 속성이 붙은 속성 목록을 더 이상 불러오지 않는다고 기재되어 있고, TCC 데이터베이스 직접 접근은 끝나며, 다른 팀의 컨테이너 접근은 프롬프트 없이 거부됩니다. XProtect는 앱 데이터를 차단할 수 있고, MDM과 소프트웨어 업데이트 트래픽에는 ATS 수준의 암호 스위트와 함께 TLS 1.2가 필요하며, 사용자가 “Open using Rosetta”로 설정한 앱은 네이티브로 실행됩니다.2
  • 사용 중단 13건, 그중 API는 4건. PHAssetResource.originalFilename은 배포 타깃이 27.0일 때만 경고합니다(헤더에서 macos(10.15, 27)). FileDocument에는 소프트한 100000.0 버전이 붙어 있어 경고하지 않습니다. calendar.deleteEvents는 App Intents 인터페이스에서 사라졌으므로 옛 이름은 컴파일에 실패합니다. DVDPlayback은 노트의 설명과 달리 27.0 SDK에 스텁, 헤더, 모듈로 남아 있으며, 27.0 미만의 최소 버전에서는 경고하고 27.0에서는 실패합니다. 나머지 9건은 API가 아니라 OS 동작, 앱, 포맷, 또는 베타의 흔적입니다.23
  • 새 AppKit은 SDK로 확인됩니다. NSRefreshController, NSTextSelectionManager, NSToolbarItemGroup.Role 및 NSSegmentedControlRole과 함께하는 role 속성, preferredImageVisibility, cancellableByScrollGesture, 그리고 NSApplicationPresentationDisableScreenCornerInteractions 옵션은 모두 macos(27.0) 주석이 달려 있습니다. DiskImageKit과 NowPlaying 프레임워크가 있고, System에는 Stat 타입이 있습니다. StoreKit에는 assigned와 BundledSubscription이 있지만, 노트가 assignmentRevoked라고 쓴 자리에 인터페이스는 assignmentRevocation이라고 씁니다.3

어느 빌드가 어느 것입니까?

위치 빌드 근거
기기, macOS 27.0 26A428 릴리스 피드, 2026년 9월 14일 월요일1
Xcode 27(27A266a) 안의 SDK 26A425 MacOSX27.0.sdk/System/Library/CoreServices/SystemVersion.plist, ProductBuildVersion3
macOS 27.2 beta 2 26B5091g 릴리스 피드, 2026년 9월 21일 월요일1
macOS 27.0.1 없음 9월 26일 기준 릴리스 피드에도, macOS 릴리스 노트 색인에도 없음17
App Store Connect 27.0 GA SDK 수락 “You can now upload apps built with Xcode 27 using the SDK for iOS 27.0, iPadOS 27.0, macOS 27.0, tvOS 27.0, visionOS 27.0, and watchOS 27.0 for the App Store, and for internal and external testing through TestFlight.”(Xcode 27과 각 27.0 SDK로 빌드한 앱을 App Store용으로, 그리고 TestFlight 내부·외부 테스트용으로 업로드할 수 있음) 9월 14일6

노트는 범위를 밝히는 두 문장, “The macOS 27 SDK provides support to develop apps for Mac computers running macOS 27 Golden Gate. The SDK comes bundled with Xcode 27, available from the Mac App Store,”로 시작한 뒤 86개 영역을 차례로 다룹니다. 각 제목 아래의 목록 항목을 세면 새 기능 68건, 해결된 문제 173건, 알려진 문제 18건, 사용 중단 13건입니다. Siri가 해결 26건과 알려진 문제 6건, SwiftUI가 새 기능 21건과 해결 19건, AppKit이 새 기능 8건과 해결 18건, Core AI가 해결 11건, StoreKit Testing in Xcode가 해결 10건과 알려진 문제 2건을 차지합니다.2 iPhone 쪽은 iOS 27 노트 글에서 다루며, 같은 SwiftUI 항목이 iOS 문구로 등장합니다. 툴체인은 Xcode 27 글에서 다룹니다.

9월 21일 자 27.2 beta 2 노트는 짧습니다. 수정되었다고 기재된 Xcode 코드 완성 크래시, AppKit 사용 중단 1건(“The EnablePasteboardPrivacyDeveloperPreview user default has been removed.”, 이 사용자 기본값은 제거됨), 클린 설치 시의 Notifications 알려진 문제, Shortcuts 알려진 문제, 아래에 나오는 StoreKit Testing 알려진 문제 2건이 수정됨으로 옮겨 간 것, 그리고 SKTestSession.clearTransactions() 이후 입문 혜택 자격에 관한 새 StoreKit Testing 수정 1건입니다. 이 StoreKit Testing 항목들을 빼면, 이 글이 다루는 27.0 항목에 닿는 내용은 없습니다.4

macOS 27 SDK에 링크하는 순간 무엇이 바뀝니까?

Apple은 동작 변경을 앱이 링크하는 SDK에 따라 적용합니다. 그러므로 아래 변경은 이미 출시한 빌드에는 아무 영향이 없고, Xcode 27에서 처음 아카이브하는 순간 모두 발동합니다. 각 항목의 노트를 인용합니다.2

  • 심볼이 아닌 메뉴 항목 이미지와 빈 제목 예외. 아래에 나오는 심볼 이미지 변경은 다시 빌드할 필요가 없고, 나머지는 다시 빌드할 때 적용됩니다. “For applications linked on the macOS 27 SDK, both symbol and non-symbol menu item images are now automatically hidden. For applications linked on earlier SDKs, non-symbol images remain automatically visible, preserving compatibility with existing application behavior.”(27 SDK로 링크한 앱에서는 심볼 이미지와 비심볼 이미지가 모두 자동으로 숨겨지고, 이전 SDK에서는 비심볼 이미지가 계속 보임) 그리고 옛 빌드에는 반대 방향의 처리가 있습니다. “For applications linked on SDKs prior to macOS 27, NSMenu now automatically shows menu item images if the menu item title and attributed title are both empty. This preserves existing application behavior when the image is the only representation of the menu item content. When linking against the macOS 27 SDK, these images will automatically be hidden.”(27 이전 SDK에서는 제목이 비어 있는 항목의 이미지를 자동으로 보여 주지만, 27 SDK에 링크하면 숨겨짐) 이미지만 있는 항목은 다시 빌드한 뒤 preferredImageVisibility를 .visible로 설정해야 합니다. 점검 절차는 메뉴 이미지 글에 정리했습니다.
  • 열기 패널이 선택 대상을 스스로 정합니다. 수정됨으로 기재되어 있습니다. “In apps built with the macOS 27.0 SDK, setting allowedContentTypes and treatsFilePackagesAsDirectories on NSOpenPane updates canChooseFiles and canChooseDirectories based on whether the requested types are file or directory types.”(요청한 유형이 파일인지 디렉터리인지에 따라 canChooseFiles와 canChooseDirectories가 갱신됨) (클래스 이름은 노트의 오기입니다.) 콘텐츠 유형을 설정한 다음 명시적인 canChooseDirectories = true에 기대던 열기 패널이 다시 테스트해야 할 형태입니다.
  • Layout Orientation이 옮겨 갑니다. “NSTextView’s menuForEvent: now returns a context menu in which the Layout Orientation menu item, and its submenu, are located inside the Font submenu. Because this change can cause compatibility issues with some shipping applications, it applies only to applications linked on the macOS 27 SDK.”(Layout Orientation 항목과 하위 메뉴가 Font 하위 메뉴 안으로 들어가며, 호환성 때문에 27 SDK로 링크한 앱에만 적용됨) 메뉴를 훑어 이 항목을 찾는 코드는 다시 빌드하면 깨집니다.
  • 타이틀 바 액세서리가 경계 밖으로 번집니다. “When an app is linked on macOS 27.0 or later, NSTitlebarAccessoryViewController is now allowed to draw outside its bounds by default, supporting effects such as shadows and interactive glass effects. During reveal animations, accessories might be clipped for the duration of the animation or when the accessory is hidden.”(그림자와 인터랙티브 글래스 효과를 위해 기본적으로 경계 밖에 그릴 수 있으며, 표시 애니메이션 중이거나 hidden일 때는 잘릴 수 있음)
  • TextField 프롬프트에 스타일이 적용됩니다. “In apps built with the macOS 27.0 SDK, TextField respects custom font and color styling applied to its prompt. Apply styling to the Text provided to TextField’s prompt parameter at initialization.”(프롬프트에 적용한 글꼴과 색상이 반영되므로, 초기화할 때 prompt 매개변수에 넘기는 Text에 스타일을 적용함)
  • 선택 가능한 Text에 TextRenderer가 적용됩니다. “In apps built with the iOS 27.0 and macOS 27.0 SDKs, selectable Text views now support TextRenderer,”라고 되어 있고, 그 옆의 수정 항목은 사용자 정의 렌더러가 “now takes effect on a Text view that also has .textSelection(.enabled) applied.”(.textSelection(.enabled)도 적용된 Text 뷰에서 동작함)라고 말합니다.
  • 시트와 팝오버. 수정됨으로 기재되어 있습니다. “In apps built with the 27.0 SDKs, the controlSize, buttonSizing, buttonRepeatBehavior, menuIndicatorVisibility, and ButtonBorderShape environment values are now reset to their default values in sheets and popovers.”(이 환경 값들이 시트와 팝오버 안에서 기본값으로 초기화됨) 표시하는 쪽에서 .controlSize(.large)를 물려받던 시트는 더 이상 물려받지 않습니다.
  • containerRelativeFrame. 27.0 빌드에 대해 수정됨으로 기재되어 있습니다. 이 수정자가 “incorrectly accounts for safe-area insets on a ScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small.”(ScrollView의 스크롤되지 않는 축에서 세이프 에어리어 인셋을 잘못 계산에 넣어, 스크롤 가능한 콘텐츠 크기가 너무 작아짐)라는 내용입니다. 그런데 항목의 예시는 콘텐츠가 줄어드는 것이 아니라 세이프 에어리어로 뻗어 나가는 모습을 설명하고 있어, 어느 방향의 변화인지 분명하지 않습니다. ScrollView 안의 containerRelativeFrame은 다시 빌드한 뒤 재테스트하세요.
  • 메뉴에 부제목이 생깁니다. “In apps built with the 27.0 SDKs, a LabeledContent view used inside a Menu maps its value to the platform menu item’s subtitle.”(Menu 안의 LabeledContent 값이 플랫폼 메뉴 항목의 부제목이 됨)
  • 인스펙터의 TabView. “In apps built with the latest SDKs, the appearance of TabViews in inspectors now matches their appearance in sidebars, and in both contexts automatically uses the new .tabs picker style.”(인스펙터 안의 TabView가 사이드바와 같은 모양이 되고, 두 곳 모두 새 .tabs 피커 스타일을 자동으로 사용함)
  • List가 더 많은 드롭을 받아들입니다. “In macOS apps built with the macOS 27 SDK, List accepts drops in two cases that previously didn’t work: drags with compatible transfer representations are accepted into reorderable content even when the .reorderableItem transfer type isn’t present, and a .dropDestination(...) modifier declared on a list item now performs the drop.”(호환되는 전송 표현을 가진 드래그는 .reorderableItem이 없어도 재정렬 가능한 콘텐츠에 받아들여지고, 목록 항목에 선언한 .dropDestination(...)이 실제로 드롭을 처리함) Mac에서 한 번도 호출되지 않던 드롭 핸들러가 호출되기 시작할 수 있습니다.
  • newDocument가 인스턴스를 받습니다. “In macOS apps built with the macOS 27 SDK, the action retrieved from the \.newDocument environment value accepts an in-memory ReadableDocument produced by an autoclosure. SwiftUI presents a new document window populated with the supplied instance, instead of invoking the document group’s default factory.”(\.newDocument 액션이 오토클로저로 만든 메모리 안의 ReadableDocument를 받고, 문서 그룹의 기본 팩토리를 호출하는 대신 그 인스턴스로 새 문서 창을 띄움)
  • Mac Catalyst. UIKit 사용 중단 항목에 “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch,”라고 되어 있습니다. iOS에 대해 씬 글에서 다룬 것과 같은 의무화입니다. 또한 “When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs, you can use UIScene.extendStateRestoration and UIScene.completeStateRestoration to extend state restoration”이라고 되어 있어, 상태 복원을 백그라운드에서 포그라운드로 넘어가는 전환까지 늘릴 수 있습니다. 이와 별도로, SDK 조건 없이 “Catalyst apps now behave like AppKit apps when you switch to them with no open windows”(열린 창이 없는 상태에서 전환하면 Catalyst 앱이 AppKit 앱처럼 동작함)라고 되어 있으며, Dock이나 Spotlight에서 활성화하지 않는 한 창을 만들지 않습니다.

SwiftUI와 Swift Charts의 항목 하나씩은 링크가 아니라 컴파일러에 따라 달라지지만, 여기에 넣어야 합니다. @State 매크로 재작성은 “back-deploys to iOS 17 aligned OSes”(iOS 17과 보조를 맞춘 OS까지 백디플로이됨)이며, Xcode 27에서 컴파일되는 범위를 바꿉니다. 초깃값을 가지면서 init에서도 대입하는 선언 중 일부는 더 이상 컴파일되지 않고(Apple의 표현으로는 “some such cases”), 합성되던 private 이니셜라이저는 사라집니다. 점검 절차는 @State 매크로 글에 있습니다. 그리고 Swift Charts 항목은 수정됨으로 기재되어 있으며, 경고와 런타임 크래시 가능성을 설명합니다. “When your project has a minimum deployment target lower than 27.0, using conditionals inside a Chart closure produces the warning”이라며 _ConditionalContent 준수에 관한 경고가 나오고, “and the app might crash at runtime when that content is loaded.”(해당 콘텐츠가 로드될 때 앱이 런타임에 크래시할 수 있음)라는 내용입니다. 인용된 경고에는 플랫폼 이름이 비어 있어 베타 시절의 진단 메시지로 읽히며, 저는 재현하지 못했습니다. 9월 26일에 클로저 안에서 if로 BarMark와 LineMark 사이를 분기하는 Chart를 27.0 SDK에 대해 26.0과 27.0 배포 타깃 모두로 타입 검사했더니, 진단은 하나도 나오지 않았습니다. 항목의 런타임 크래시 부분은 Apple의 서술이며, 여기서는 검증하지 않은 채로 남습니다.23

다시 빌드하지 않아도 무엇이 바뀝니까?

노트의 나머지 절반은 운영체제 자체를 설명하며, 이 변경들은 작년에 출시한 바이너리에도 적용됩니다.2

  • 메뉴 심볼 이미지가 사라집니다. AppKit에는 “By default, NSMenu hides all menu item symbol images”라고 되어 있고, 이 변경은 “to applications linked on macOS 26.0 and later”에 적용됩니다. 따라서 Xcode 26으로 빌드한 앱도 다시 빌드하지 않은 채 27 기기에서 심볼 이미지를 잃습니다. 재정의 수단은 NSMenuItem의 preferredImageVisibility(API_AVAILABLE(macos(27.0)))이고, xib 인스펙터의 “macOS 26.0 only” 체크박스가 두 번째 스위치입니다. SwiftUI에는 “By default, SwiftUI now hides all menu item symbol images in most contexts, while non-symbol images remain visible,”(대부분의 맥락에서 심볼 이미지를 숨기고 비심볼 이미지는 계속 보임)라고 되어 있으며, 유지 스위치는 labelStyle(_:)과 .titleAndIcon이고 항목에 SDK 조건은 없습니다. UIKit에는 “On iPadOS 27.0 and macOS 27.0, the menu bar and context menus present a reduced set of menu item images and do not display images set on menu elements by default,”(메뉴 막대와 컨텍스트 메뉴가 표시하는 이미지를 줄이고, 메뉴 요소에 설정한 이미지를 기본적으로 표시하지 않음)라고 되어 있고, UIMenuElement에 preferredImageVisibility가 있으며 역시 SDK 조건은 없습니다. 헤더도 OS 쪽 해석과 일치합니다. NSMenuItem.image의 주석에는 “in macOS 27 and later, AppKit determines the visibility of menu item images, and will typically hide images.”(macOS 27 이상에서는 AppKit이 메뉴 항목 이미지의 표시 여부를 정하고, 대개 숨김)라고 적혀 있습니다.3
  • 제스처가 배타적으로 바뀝니다. “Only the initial hit-tested view hierarchy will activate gesture recognizers until all gestures terminate. A new exclusiveGestureBehavior property on NSView allows you to opt-out of this exclusive behavior on a per-view-hierarchy basis. Further, the Info.plist key NSViewGestureRecognizerIsExclusive allows you to opt-out for the entire app.”(모든 제스처가 끝날 때까지 처음 히트 테스트된 뷰 계층만 인식기를 활성화하며, exclusiveGestureBehavior로 뷰 계층별로, NSViewGestureRecognizerIsExclusive로 앱 전체에서 옵트아웃할 수 있음) 짝이 되는 키 NSGestureRecognizerSuppressesMainMenuActions를 쓰면 제스처가 진행 중일 때도 주 메뉴 동작이 실행되게 할 수 있습니다. 또 “stuck gestures are automatically cancelled after user input has ended for a few seconds,”(사용자 입력이 끝나고 몇 초가 지나면 멈춘 제스처가 자동으로 취소됨)라고 되어 있으며, 디버깅 중 이를 크래시로 만드는 NSCrashOnStuckGestureTimeout 기본값도 있습니다. 부모 뷰의 인식기가 자식 뷰의 인식기와 함께 발동하던 구성이라면, 이제 부모 쪽이 기다립니다.
  • 사용자 정의 인식기는 자기 위치를 알려야 합니다. 수정됨으로 기재되어 있습니다. 기본 NSGestureRecognizer의 locationInView:는 “now returns NSZeroPoint and logs an error pointing the developer at the missing override. Custom NSGestureRecognizer subclasses must provide their own locationInView: implementation.”(NSZeroPoint를 반환하고 빠진 재정의를 가리키는 오류를 기록하며, 사용자 정의 하위 클래스는 자체 구현을 제공해야 함)라는 내용입니다. 다른 항목은 진단용 기본값 NSGestureRecognizerCrashOnMissingOverrides를 “to help developers find NSGestureRecognizer subclasses that are missing required overrides to ensure that they always reach a terminal state”(항상 종료 상태에 도달하는 데 필요한 재정의가 빠진 하위 클래스를 찾도록 돕는 것)로 제공한다고 설명하지만, 이것이 빠진 locationInView:까지 잡아내는지는 노트에 나와 있지 않습니다. 그리고 NSClickGestureRecognizers는 “with a click count greater than 1 will send an action before their multi-click timeout has elapsed.”(클릭 수가 2 이상이면 다중 클릭 시간 제한이 지나기 전에 동작을 보냄)라고 되어 있습니다.
  • launchd와 격리 속성. 수정됨으로 기재되어 있습니다. “launchd no longer supports loading launchd property list files with the quarantine extended attribute.”(격리 확장 속성이 붙은 속성 목록 파일을 더 이상 불러오지 않음) Apple의 수정 항목은 옛 버그를 설명할 때도 있고 새 규칙을 설명할 때도 있습니다. 규칙으로 읽는다면, 격리 속성이 붙은 채 설치된 다운로드 출처의 에이전트 plist는 더 이상 로드되지 않습니다.
  • TCC. 사용 중단 항목에 “Apps can no longer access the local TCC database directly.”(앱이 로컬 TCC 데이터베이스에 더 이상 직접 접근할 수 없음)라고 되어 있습니다.
  • 컨테이너와 XProtect. System Integrity Protection 항목에 “Accessing files in other developer teams’ app data containers and app group containers no longer prompts the user for authorization; such accesses are denied by default and can be managed by the user in Privacy & Security settings.”(다른 개발 팀의 앱 데이터 컨테이너와 앱 그룹 컨테이너 파일에 접근할 때 더 이상 사용자에게 허가를 묻지 않고, 기본적으로 거부되며 Privacy & Security 설정에서 사용자가 관리함)라고 되어 있습니다. 또 “XProtect may now restrict access to app data that is commonly targeted by malicious software.”(악성 소프트웨어가 흔히 노리는 앱 데이터에 대한 접근을 XProtect가 제한할 수 있음)라고도 되어 있습니다. Privacy & Security의 알려진 문제는 “a process without a bundle ID cannot be granted access to specific app data containers or app group containers owned by other developer teams,”(번들 ID가 없는 프로세스에는 다른 팀 소유의 특정 컨테이너 접근 권한을 줄 수 없음)라고 덧붙이며, 대안은 Full Disk Access입니다.
  • 관리 트래픽의 TLS. “Starting in 27.0 operating systems, select system processes now enforce stricter network security (TLS) requirements,”(27.0 운영체제부터 일부 시스템 프로세스가 더 엄격한 TLS 요건을 적용함)라며 MDM, DDM, Automated Device Enrollment, 프로파일 설치, 앱 설치, 소프트웨어 업데이트를 꼽습니다. “Servers must support TLS 1.2 at minimum, using cipher suites and certificates that meet App Transport Security (ATS) requirements.”(서버는 최소 TLS 1.2를 지원하고, ATS 요건을 충족하는 암호 스위트와 인증서를 사용해야 함) 체크리스트는 TLS 점검 글에 있습니다.
  • Rosetta. “On launch, Applications previously set to “Open using Rosetta” by a user will have the application launch natively,”(사용자가 이전에 “Open using Rosetta”로 설정한 앱도 실행 시 네이티브로 실행됨) “If Rosetta was previously installed, it is not automatically restored after upgrading to macOS 27.0,”(이전에 설치되어 있던 Rosetta는 27.0으로 업그레이드한 뒤 자동으로 복원되지 않음) 그리고 hostArchitecture를 지정하지 않은 설치 패키지는 “will now default to arm64.”(arm64가 기본값이 됨)라고 되어 있습니다. 설치 프로그램 기본값은 GA 글에서 26.6.2로 재현했습니다.
  • 백그라운드의 Neural Engine. 이 항목은 macOS 페이지에 있지만 “iOS 27 includes Neural Engine improvements for Apple Intelligence capable devices”로 시작하므로, 플랫폼 공통 안내로 읽어야 합니다. “The system now restricts background access to the Neural Engine, similar to GPU usage restrictions,”(GPU 사용 제한처럼 백그라운드의 Neural Engine 접근을 제한함) 그리고 “Neural Engine memory usage is now attributed to your app process instead of the system, and appears in the Allocations instrument.”(Neural Engine 메모리 사용량이 시스템이 아닌 앱 프로세스에 귀속되며 Allocations 인스트루먼트에 표시됨)라고 되어 있습니다. Core AI의 다른 항목은 백그라운드 접근에 “requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”.”(새 엔타이틀먼트가 필요함)라고 말합니다.
  • 로그 아카이브. “Unified Logging System archives generated on 27.0 releases cannot be read on macOS 26.1 or earlier due to an updated archive format. macOS 26.2 or later is required to read these archives.”(27.0에서 만든 아카이브는 포맷이 바뀌어 macOS 26.1 이하에서 읽을 수 없고, 26.2 이상이 필요함) 고객의 .logarchive 번들을 오래된 Mac에서 여는 지원 체계라면 최소 26.2가 필요합니다.
  • 파일 프라미스가 어서트합니다. 수정됨으로 기재되어 있습니다. receivePromisedFilesAtDestination:은 “asserts that it is called during -prepareForDragOperation:, -performDragOperation:, or -concludeDragOperation:. If receivePromisedFilesAtDestination:... is called at other times, your application will throw an exception and terminate.”(이 드래그 처리 도중에 호출되는지 어서트하며, 다른 시점에 호출하면 예외를 던지고 종료함)라는 내용입니다. 호출을 다음 런 루프 차례로 미루던 수신 측은 이제 종료됩니다.

27.0에서 사용 중단된 API는 무엇입니까?

노트에는 11개 영역에 걸쳐 사용 중단 제목 아래 13개 항목이 있습니다. 릴리스 노트의 사용 중단은 문장이고, SDK의 사용 중단은 컴파일러가 읽는 가용성 주석이며, 둘이 늘 같은 말을 하지는 않습니다. 저는 각 항목을 Xcode 27 안의 macOS 27.0 SDK에 들어 있는 헤더와 Swift 인터페이스와 대조했습니다.23

노트 항목 SDK의 내용
“The originalFilename property on PHAssetResource is incorrectly marked as non-nullable, which misrepresents the property value; a new, nullable filename property is available as a replacement.”(잘못 non-nullable로 표시되어 있었으므로, nullable인 filename으로 대체함) PHAssetResource.h에 API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27))
“The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.” FileDocument에 @available(macOS, introduced: 11.0, deprecated: 100000.0, message: "Conform your type to Document instead."). 소프트 사용 중단으로, 현재는 경고 없음. ReadableDocument, WritableDocument, Document는 모두 인터페이스에 있음
“The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.” macOS AppIntents 인터페이스에서 deleteEvents는 0회, deleteEvent는 1회 등장. 별칭 없는 이름 변경이므로 옛 이름을 쓰면 컴파일 오류
“The DVDPlayback framework has been removed from the macOS 27 Golden Gate SDK and apps cannot build against it. The framework will be removed in a future macOS release.”(SDK에서 제거되어 빌드할 수 없으며, 향후 macOS에서 프레임워크 자체도 제거됨) 디스크의 SDK에서는 제거되지 않음. MacOSX27.0.sdk/System/Library/Frameworks/DVDPlayback.framework에는 x86_64-macos, arm64e-macos, arm64e.x1-macos를 대상으로 서로 다른 _DVD 심볼 223개를 내보내는 .tbd, Headers 폴더, 모듈 맵이 있음. import DVDPlayback은 배포 타깃 26.0에서 타입 검사를 통과하며 DVDInitialize()에 “deprecated in macOS 10.15” 경고가 붙음. 타깃 27.0에서는 같은 호출이 “unavailable in macOS: No longer supported” 오류가 됨. 즉 “cannot build against it”은 27.0 최소 버전에서 가용성을 통해 성립하지만, 스텁은 아직 남아 있음
“Encrypted HFS+ (CoreStorage) is deprecated and will not be supported in a future version of macOS.” API가 아니라 파일 시스템 포맷. 암호화된 APFS로 백업할 것
“Apps can no longer access the local TCC database directly.” 주석이 아니라 OS가 강제하는 정책
“Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.”(UIKit이므로 Mac Catalyst 대상) 경고가 아니라 실행 실패
“If Rosetta was previously installed, it is not automatically restored after upgrading to macOS 27.0.” OS 동작
“Installer packages which specify no hostArchitecture will now default to arm64.” OS 동작. GA 글에서 26.6.2로 재현
“Intel-based plugins and loaders may not appear in Settings or trigger notifications of their incompatibility. All Intel-based software will no longer be compatible with macOS 28.0, excluding legacy games.”(Intel 기반 플러그인은 설정에 나타나지 않거나 비호환 알림을 띄우지 않을 수 있으며, macOS 28.0에서는 레거시 게임을 제외한 모든 Intel 기반 소프트웨어가 호환되지 않음) OS 동작. Apple이 꼽은 플러그인 폴더는 ~/Library/Audio/Plug-Ins/*, ~/Library/Printers/, ~/Library/ColorPickers/
“AirPort Utility is no longer included with new clean installations of macOS.” API가 아니라 앱
“Meshes compressed using the USDKit export API or usdcrush tool in Beta 1 cannot be decoded by Beta 2, and meshes from Beta 2 cannot be decoded by Beta 1.” 베타 간 안내가 GA 페이지까지 살아남은 것
“Weather Highlights is currently only available in US English.” Apple은 사용 중단 아래에 두었지만, 제공 범위 안내로 읽힘

사용 중단 제목 바깥에 소프트 사용 중단이 하나 있으며, iOS 노트에 있는 것과 같습니다. .roundedBorder는 macOS에서 deprecated: 100000.0이고 메시지는 “Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)“이며, TextInputBorderShape를 도입하는 새 기능 항목과 짝을 이룹니다.3

하드 사용 중단은 보이는 것보다 조용합니다. 컴파일러는 사용 중단 버전을 SDK가 아니라 배포 타깃과 비교하므로, macos(10.15, 27)는 최소 macOS가 27.0인 타깃에서만 경고를 냅니다. originalFilename을 읽고, 타입을 FileDocument에 준수시키고, .roundedBorder를 적용하는 파일 하나를 27.0 SDK에 대해 두 타깃으로 타입 검사했습니다. arm64-apple-macos26.0에서는 진단이 전혀 없이 컴파일되었고, arm64-apple-macos27.0에서는 정확히 하나, 'originalFilename' was deprecated in macOS 27: Use filename instead가 나왔습니다. FileDocument와 .roundedBorder는 두 타깃 모두에서 조용했습니다.3 현실적인 최소 버전을 가진 Mac 앱은 이 중 어느 것도 컴파일러에게서 듣지 못합니다. 알려 주는 것은 아래 체크리스트의 grep입니다.

새 기능 중 기존 코드에 영향을 주는 것은 무엇입니까?

Mac에서도 당겨서 새로고침. “In macOS 27.0, AppKit adds NSRefreshController, providing pull-to-refresh functionality for NSScrollView. You can set it with NSScrollView.refreshController, configure a target or action to handle user-initiated refreshes, and call endRefreshing when the refresh completes or beginRefreshing to start one programmatically.”(NSScrollView에 당겨서 새로고침 기능을 더하며, 타깃이나 액션으로 새로고침을 처리하고 끝나면 endRefreshing, 코드에서 시작할 때는 beginRefreshing을 호출함) 이 클래스와 NSScrollView의 refreshController 속성은 SDK에서 모두 API_AVAILABLE(macos(27.0))입니다.23

제스처 기반 텍스트 선택. “NSTextSelectionManager provides common text selection interactions (click, drag, shift-click, double/triple-click word/line/paragraph selection) to a NSView with a set of NSGestureRecognizers rather than overriding NSEvent mouse methods. NSTextView now uses NSTextSelectionManager”(NSEvent 마우스 메서드를 재정의하는 대신 제스처 인식기 묶음으로 일반적인 텍스트 선택 상호작용을 제공하며, NSTextView도 이를 사용함)라고 되어 있고, “Existing NSTextView subclasses that override mouseDown: continue to work through a binary-compatible fallback path.”(mouseDown:을 재정의하는 기존 하위 클래스는 바이너리 호환 대체 경로로 계속 동작함)라고도 되어 있습니다. 클래스는 macos(27.0)입니다.23 앞의 배타성 규칙과 합치면, mouseDown:을 재정의한 사용자 정의 텍스트 뷰는 계속 동작하지만, 그 옆에 붙인 제스처 인식기는 이제 매니저의 인식기에 양보하게 될 수 있습니다.

탭을 위한 역할. NSToolbarItemGroup과 NSSegmentedControl에 role 속성이 생기며, 둘 다 API_AVAILABLE(macos(27.0))입니다. NSToolbarItemGroup.Role(automatic, tabs, valueSelection)과 NSSegmentedControlRole이 함께 들어옵니다. 노트에 따르면 tabs 역할은 “read by VoiceOver as “tabs””(VoiceOver가 탭으로 읽음)이며 “a distinct visual appearance.”(구별되는 시각적 모양)를 가집니다. SwiftUI의 TabsPickerStyle도 같은 발상이고, 인스펙터는 다시 빌드할 때 이를 자동으로 채택합니다.23

Hot Corners 끄기. “NSApplication.presentationOptions now includes the .disableScreenCornerInteractions option, which you can use to disable Hot Corners.”(Hot Corners를 끄는 옵션이 추가됨) 헤더에서는 NSApplicationPresentationDisableScreenCornerInteractions이고, API_AVAILABLE(macos(27.0)), 옵션 마스크의 비트 15입니다. 그 위의 주석에는 “.autoHideDock or .hideDock must also be set for this option to take effect.”(이 옵션이 효과를 내려면 .autoHideDock이나 .hideDock도 설정해야 함)라고 적혀 있습니다.23

문서, 새로 쓰이다. “In apps built with the 27.0 SDKs, the new ReadableDocument and WritableDocument protocols support asynchronous reading and writing, progress reporting, and direct access to document URLs,”(새 프로토콜이 비동기 읽기와 쓰기, 진행률 보고, 문서 URL 직접 접근을 지원함)라고 되어 있으며, Document가 둘을 합치고 FileDocument와 ReferenceFileDocument는 “now deprecated.”입니다. 이어지는 세 항목은 기존 준수를 바꿉니다. FileWrapperDocumentWriter의 makeFileWrapper 클로저는 “now receives a second argument, previous: FileWrapper?,”(두 번째 인자를 받음)이고 “Existing call sites must update their closures to accept the new parameter”(기존 호출 지점은 클로저를 고쳐야 함)입니다. read(from:progress:)와 write(content:to:previous:progress:) 요구 사항은 “declared with @concurrent instead of nonisolated,”이므로 “Conforming types that previously used nonisolated should switch to @concurrent to match”(nonisolated를 쓰던 준수 타입은 @concurrent로 바꿔야 함)입니다. 그리고 URLDocumentConfiguration은 “no longer conforms to Sendable.”입니다. fileExporter 오버로드로 WritableDocument 값의 컬렉션을 대화 상자 하나로 내보낼 수 있습니다. 같은 영역의 알려진 문제는 진행률이 “might not be presented.”(표시되지 않을 수 있음)라는 것입니다.2

이미지, 테두리, 슬라이더, 메뉴. “AsyncImage now automatically caches downloaded images using HTTP caching protocols,”(내려받은 이미지를 HTTP 캐싱 규약으로 자동 캐시함)라고 되어 있고, 제어에는 URLRequest 이니셜라이저와 View.asyncImageURLSession(_:)을 씁니다. TextInputBorderShape와 textInputBorderShape(_:)가 .bordered 스타일과 함께 들어옵니다. “On macOS, the Slider implementation no longer uses NSSlider,”라고 되어 있고, 테두리가 있는 Menu와 Picker 버튼도 “no longer use NSPopUpButton in their implementation,”이므로, 아래에 AppKit 컨트롤이 있다고 가정한 사용자 정의 그리기 코드나 접근성 코드는 찾을 것이 없어집니다. GeometryProxy에는 concentricCornerRadii와 concentricCornerRadii(in:)이 생깁니다. 데이터 항목을 받는 alert와 confirmationDialog 수정자는 이제 macOS 12.0까지 거슬러 올라가 쓸 수 있습니다.2

StoreKit. “Offer code redemption APIs now return a VerificationResult when redemption completes,”(혜택 코드 사용 API가 완료 시 VerificationResult를 반환함)라고 되어 있고, Transaction.OwnershipType.assigned와 Transaction.RevocationType.assignmentRevoked가 “support volume purchases,”(대량 구매를 지원함)이며, “Transaction query methods now additionally return transactions assigned to the Managed Apple Account.”(Managed Apple Account에 할당된 트랜잭션도 함께 반환함)라고 이어집니다. Product.ProductType에는 구독 Bundle과 Suite가 Product.SubscriptionInfo.BundledSubscription과 함께 생기고, Advanced Commerce 정보에는 partnerName과 partnerId가 들어옵니다. 인터페이스에는 assigned와 BundledSubscription이 있지만, 취소 케이스는 노트의 철자와 다릅니다. SDK의 어느 파일에도 assignmentRevoked는 없으며, StoreKit 인터페이스는 Transaction.RevocationType에 원시 값 ASSIGNMENT_REVOKE를 가진 public static var assignmentRevocation을 선언합니다. 이 케이스는 @available(macOS 26.4, *)이면서 @backDeployed(before: macOS 27.0)이므로, .assignmentRevocation은 27.0 타깃에서 타입 검사를 통과하고 그보다 낮은 최소 버전에서는 if #available(macOS 26.4, *)가 필요합니다. 노트의 이름은 어느 타깃에서도 연결될 멤버가 없습니다. 소유 유형으로 트랜잭션을 거르는 Mac 앱에는 세 번째 값이 나타납니다.23

Swift의 stat. “System now provides Swift APIs for the C stat, lstat, fstat, and fstatat system calls,”(C의 이 시스템 호출들에 대한 Swift API를 제공함)라고 되어 있고, Stat 타입과 FilePath.stat()이 생깁니다. 노트는 수정 항목으로 충돌 문제도 싣고 있습니다. “Custom FilePath or FileDescriptor extensions that make unqualified calls to stat() or stat(_) (without the Darwin. qualification) might conflict with the new Swift stat() instance methods.”(Darwin. 한정 없이 stat()을 호출하는 사용자 정의 확장이 새 인스턴스 메서드와 충돌할 수 있음) public struct Stat은 System 인터페이스에 있습니다.23

디스크 이미지, 가상 머신, Gatekeeper. “The new DiskImageKit framework provides Swift APIs for creating and managing standalone and stacked disk images in the Apple Sparse Image Format (ASIF) and raw disk image formats, for use with the Virtualization framework via VZDiskImageStorageDeviceAttachment.”(ASIF와 raw 포맷의 단독 및 스택형 디스크 이미지를 만들고 관리하는 Swift API로, VZDiskImageStorageDeviceAttachment를 통해 Virtualization에서 사용함) 이 프레임워크는 SDK에 있습니다. Virtualization의 vmnet 포트 포워딩은 “now support[s] port forwarding when communicating over loopback,”(루프백 통신에서도 포트 포워딩을 지원함)이고, spctl에는 “which will clean up Gatekeeper database entries for apps and executables which are no longer mounted.”(더 이상 마운트되지 않은 앱과 실행 파일의 Gatekeeper 데이터베이스 항목을 정리함) purge 명령이 생깁니다. VM을 스크립트로 다루는 분께 디스크 이미지 API가 쓰이는 곳은 컨테이너 글입니다.23

게임 컨트롤러, 비디오, Metal. “The PlayStation® Access™ controller is now supported on macOS, iPadOS, and iOS.” VTLowLatencySuperResolutionScalerConfiguration은 “now supports a 1.5x scale factor,”이고, 프레임 보간은 “supports arbitrary source dimensions up to 1080p.”(1080p까지 임의의 원본 크기를 지원함)입니다. Metal 수정 2건은 clamp-to-edge 샘플러가 0을 반환하는 문제이며, 그중 하나는 “the Apple 10 GPU family.”에 한정됩니다.2

Foundation. NSURL 수정은 iOS 노트와 같은 문구로 여기에도 실려 있습니다. “+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.”(다른 잘못된 문자를 인코딩할 때 유효한 퍼센트 이스케이프의 %를 이중 인코딩하지 않음) iOS 글에서 저는 이 수정이 코드가 실행되는 OS를 따르며, 같은 코드의 Mac 빌드가 macOS 26.6.2에서는 여전히 옛 %2520 결과를 냈음을 보였습니다. 27.0에서는 새 결과를, 모든 26.x에서는 옛 결과를 예상하세요.2

하드웨어 보안. “arm64e.x1 introduces additional hardware security and performance instructions, including CPA2 for stronger MIE protection,”(더 강한 MIE 보호를 위한 CPA2를 포함해 추가 하드웨어 보안 및 성능 명령을 도입함)라고 되어 있고, 대상은 “Mac computers with M6 or later chips”입니다. 위에서 본 DVDPlayback 스텁의 타깃 목록에 이 슬라이스 이름이 실제로 나타나 있습니다. 빌드 설정은 arm64e.x1 글에서 다룹니다.23

계획에 반영해야 할 알려진 문제

  • photos.asset 엔티티가 컴파일되지 않습니다. “Existing entities that conformed to @AppEntity(schema: .photos.asset) in prior releases might no longer compile in the 27 SDKs because new properties were added to the schema in this release.”(스키마에 새 속성이 추가되어, 이전 릴리스에서 준수하던 엔티티가 27 SDK에서 컴파일되지 않을 수 있음) 해결 방법은 그 속성들을 가용성 검사 안에서 채택하는 것입니다. 메타데이터 프로세서가 요구하는 속성 12개는 iOS 노트 글에 목록이 있고, macOS 노트에도 같은 항목이 있습니다.2
  • 오디오 스키마와 Siri. “If you adopt the Audio App Schema domain, you might have trouble playing your content using Siri.”(Audio App Schema 도메인을 채택하면 Siri로 콘텐츠를 재생하는 데 문제가 생길 수 있음) 해결 방법은 “Adopt an IntentValueQuery that takes the AudioSearch input, or index your entities in Spotlight.”(AudioSearch 입력을 받는 IntentValueQuery를 채택하거나, 엔티티를 Spotlight에 색인함)입니다.2
  • SpotlightSearchTool이 온디바이스 모델을 넘칩니다. 구성이 없으면 “the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added”(프롬프트를 더하기도 전에 도구 설명과 매개변수 스키마만으로 온디바이스 모델의 컨텍스트 창을 넘음)이며, 해결책은 .focused(.documents) 같은 좁힌 가이드입니다.2
  • 번들 없는 프로세스와 Files & Folders. 번들 ID가 없는 프로세스는 “cannot be granted access to specific app data containers or app group containers owned by other developer teams,”이며, Apple의 해결 방법은 “for the duration of the requirement.”(필요한 기간 동안) Full Disk Access를 주는 것입니다. 다른 앱의 컨테이너를 읽는 명령줄 도구가 여기에 해당합니다.2
  • 서명되지 않은 Safari 확장. 개발 중에 “unsigned extensions might not appear until rebuilt when using the “Allow Unsigned Extensions” checkbox.”(“Allow Unsigned Extensions” 체크박스를 써도 서명되지 않은 확장이 다시 빌드할 때까지 나타나지 않을 수 있음)2
  • StoreKit 테스트. “Changing the storefront or locale using SKTestSession doesn’t propagate through Storefront.updates,”(SKTestSession으로 스토어프런트나 로케일을 바꿔도 Storefront.updates로 전달되지 않음) 그리고 실패한 구매가 “might display error dialogs even when dialogsDisabled is set to true.”(dialogsDisabled가 true여도 오류 대화 상자를 표시할 수 있음)입니다. 둘 다 27.2 beta 2 노트에서 수정됨으로 나오며, 새로운 문제가 하나 추가되었습니다. 번들 안의 구독을 구매하면 “incorrectly allows the user to unbundle instead of throwing an error.”(오류를 던지는 대신 사용자가 번들을 해제하도록 잘못 허용함)라는 것입니다.24
  • Shortcuts. Duration이나 LPLinkMetadata를 쓰는 인텐트가 “Describe a change”에서 “might fail”(실패할 수 있음)이며, 숫자 타입 두 개를 가진 UnionValue 매개변수는 선택지를 두 번 보여 줍니다. 하나만 선언하세요.2
  • macOS 11에서의 시동 디스크. “When a Mac is running macOS 11.0, you might not be able to select the boot volume of macOS 27.0 or later as the startup disk in System Settings.”(macOS 11.0을 실행 중인 Mac에서는 System Settings에서 macOS 27.0 이상의 부트 볼륨을 시동 디스크로 선택하지 못할 수 있음) 해결 방법은 전원 버튼으로 여는 시동 선택기입니다.2
  • Siri, 6건. 검색 후 사진 선택, Siri가 꺼져 있는데 “Ask Siri”가 나타나는 문제, 특정 사진에 대한 음성 명령이 없는 문제, 불완전한 지도 스니펫, 앨범 추가 개수, 그리고 서드파티 앱의 Siri 결과에 SF Symbol이 아닌 엔티티 이미지가 나타나지 않는 문제입니다. 마지막 건은 엔티티에 사용자 정의 이미지를 붙인다면 확인해야 할 부분입니다.2

제가 실행할 수 없었던 것

이 Mac은 macOS 26.6.2로 돌아가며, 27 기기는 여전히 제게 없습니다. 이 글에 나오는 OS 수준의 동작은 모두 Apple의 문구이며, 인용으로 표시하고 그렇게 밝혔습니다. 위의 어느 문장도 macOS 27 시스템이 무언가를 하는 것을 제가 지켜봤다고 말하지 않습니다. 제가 실행할 수 있었던 것은 SDK입니다. Xcode 27(27A266a)은 설치할 수 있는 Mac이라면 어디에든 macOS 27.0 SDK(26A425)를 가져오므로, 헤더 주석, Swift 인터페이스, 프레임워크 폴더, 그리고 세 번의 타입 검사 실행은 실제이며 날짜는 9월 26일입니다. SDK와 노트가 어긋나는 두 곳, 즉 DVDPlayback 스텁과 취소 케이스의 철자는 27 기기가 런타임에 무엇을 할지에 대한 주장이 아니라 SDK가 보여 주는 것으로 보고했습니다.3

이번 주에 제가 할 일

  1. Xcode 27에서 한 번 아카이브하고, 공증 전에 위의 27 링크 목록을 앱에 대조해 보세요. 메뉴 항목 이미지, 콘텐츠 유형을 설정하는 열기 패널, NSTextView의 컨텍스트 메뉴를 훑는 코드, 타이틀 바 액세서리, 그리고 컨트롤 수정자를 물려받던 시트입니다.2
  2. 사용자보다 먼저 27 기기에서 제스처를 테스트하세요. 자식 뷰의 인식기와 함께 발동하던 부모 뷰의 인식기는 이제 배타적이고, locationInView:가 없는 사용자 정의 NSGestureRecognizer 하위 클래스는 원점을 반환하고 로그를 남깁니다. AppKit이 낸다고 Apple이 말하는 그 오류를 콘솔에서 지켜보세요. NSGestureRecognizerCrashOnMissingOverrides 기본값은 종료 상태에 도달하지 못하는 하위 클래스용으로 설명되어 있고, 노트는 그것이 locationInView:까지 다룬다고 말하지 않습니다.2
  3. originalFilename, FileDocument, ReferenceFileDocument, .roundedBorder, deleteEvents, import DVDPlayback를 grep하세요. 첫 번째는 27.0 타깃에서만 경고하고, 다음 셋은 소프트라서 조용하며, deleteEvents는 더 이상 존재하지 않고, import DVDPlayback는 최소 버전을 27.0으로 올리는 날 오류가 됩니다.3
  4. 에이전트나 데몬을 다운로드로 배포한다면, 설치 시점에 속성 목록에서 격리 속성을 제거하거나, 격리 속성이 붙지 않는 경로로 설치하세요. Apple의 노트는 27의 launchd가 그런 파일을 더 이상 불러오지 않는다고 기재하고 있습니다.2
  5. 다른 팀의 컨테이너를 읽는다면, 그 코드를 제거하거나 Full Disk Access를 거치게 하세요. 프롬프트는 사라졌고 기본값은 거부입니다.2
  6. 버그 리포트에는 두 곳의 빌드 번호를 기록하세요. 기기의 ProcessInfo와 빌드용 Mac에 있는 SDK의 SystemVersion.plist입니다. 둘은 26A428과 26A425로 서로 다르며, 한쪽에 들어간 수정이 다른 쪽에 들어 있지 않을 수 있습니다.3

자주 묻는 질문

macOS 27은 언제 나왔고, 빌드 번호는 무엇입니까?

2026년 9월 14일 월요일에 빌드 26A428로 나왔으며, Apple의 릴리스 피드에 Xcode 27 및 다른 27.0 시스템들과 나란히 올라 있습니다. Xcode 27 안의 SDK는 스스로를 26A425로 밝힙니다.13

macOS 27.0.1은 나왔습니까?

2026년 9월 26일 기준으로 나오지 않았습니다. Apple의 macOS 릴리스 노트 색인에는 “macOS 27 Golden Gate Release Notes”와 “macOS 27.2 Golden Gate Beta 2 Release Notes”가 있고 그 사이에는 아무것도 없으며, 릴리스 피드에도 어느 플랫폼의 27.0.1도 없습니다. 출시되면 이 글에 날짜가 적힌 안내를 붙이겠습니다.17

macOS 27 릴리스 노트는 어디에 있습니까?

Apple 개발자 문서 사이트의 macOS Release Notes 아래에 있으며, 릴리스당 한 페이지이고 제목은 “macOS 27 Golden Gate Release Notes”입니다. 86개 영역이 있고 General이 맨 앞, 이어서 Accessory Access부터 XQuartz까지 이어집니다. 27.2 베타 노트는 별도의, 훨씬 짧은 페이지입니다.24

macOS 27에서 사용 중단된 것은 무엇입니까?

사용 중단 제목 아래 13개 항목입니다. PHAssetResource.originalFilename, FileDocument, calendar.deleteEvents 이름 변경, DVDPlayback 프레임워크, 암호화된 HFS+, TCC 데이터베이스 직접 접근, Catalyst 씬 라이프사이클 의무화, Rosetta 관련 3건, 클린 설치의 AirPort 유틸리티, USDKit 베타 안내, 그리고 Weather Highlights 언어 안내입니다. API는 앞의 네 개뿐입니다. originalFilename은 배포 타깃이 27.0일 때만 경고가 생기고, FileDocument는 조용하며, deleteEvents는 컴파일에 실패하고, DVDPlayback은 27.0 미만의 최소 버전에서는 경고, 27.0에서는 실패합니다.23

macOS 27을 위해 앱을 다시 빌드해야 합니까?

아닙니다. 그리고 일부 동작을 바꾸는 것은 오히려 다시 빌드하는 쪽입니다. 27 링크 항목은 27 SDK로 아카이브할 때만 발동합니다. 반면 제스처, launchd, TCC, 컨테이너, TLS, Rosetta 변경은 다시 빌드하든 안 하든 27 기기의 모든 바이너리에 적용되며, macOS 26.0 이상에서 링크한 앱은 거기서 이미 메뉴 심볼 이미지를 잃습니다.2

DVDPlayback은 SDK에서 사라졌습니까?

디스크의 27.0 SDK에서는 사라지지 않았습니다. 프레임워크 폴더, 그 .tbd, 헤더, 모듈 맵이 모두 Xcode 27의 MacOSX27.0.sdk에 있습니다. 함수들은 배포 타깃 27.0에서 사용 불가로, 그 아래에서는 10.15부터 사용 중단으로 표시되어 있습니다. 따라서 최소 버전이 27.0인 프로젝트는 이에 대해 빌드할 수 없고, 이는 노트가 말하는 그대로입니다. 최소 버전이 더 낮은 프로젝트는 경고와 함께 여전히 빌드할 수 있습니다.3

macOS 27에서 Mac Catalyst는 무엇이 바뀌었습니까?

씬 라이프사이클 의무화가 적용되고, macCatalyst 27 SDK로 링크하면 UIScene.extendStateRestoration과 completeStateRestoration을 쓸 수 있습니다. Catalyst 앱은 창이 없는 상태로 전환되면 Dock이나 Spotlight에서 활성화하지 않는 한 더 이상 창을 만들지 않고, UIStepper는 Mac 이디엄에서 동작하며, 사이드바 도구 막대 버튼이 사라지는 문제는 수정됨으로 기재되어 있습니다. Xcode 27.2 베타 노트는 그곳의 macOS SDK가 “incorrectly report[s] 27.1 as a valid deployment target,”(27.1을 유효한 배포 타깃으로 잘못 보고함)이라는 점, 그리고 27.1이나 27.2의 Catalyst 빌드가 “may be unable to use newly introduced API.”(새로 도입된 API를 쓰지 못할 수 있음)라는 점을 주의 사항으로 덧붙입니다.25

출처


  1. Apple, Releases, 2026년 9월 26일에 가져온 RSS 피드. 2026년 9월 14일 월요일 자로 “macOS 27.0 (26A428)”과 “Xcode 27 (27A266a)”, 2026년 9월 21일 월요일 자로 “macOS 27.2 beta 2 (26B5091g)”. 가장 최근 항목인 9월 24일 자 “TestFlight 4.4.0”까지 어느 플랫폼에도 macOS 27.0.1 항목은 없음. ↩↩↩↩↩↩↩

  2. Apple, macOS 27 Golden Gate Release Notes, 2026년 9월 26일에 가져옴. 인용한 항목을 radar 번호로 표시합니다. AppKit 170477566, 177605020, 180962967, 6938919, 173975472, 176048351, 176395420, 179374305, 179936632, 160867808, 162577742, 163365571. App Intents 176751155, 181800016, 177198033. NSGestureRecognizer 173551081, 175705302, 176396492. NSApplication 168692527. SwiftUI 105893279, 158160386, 158441552, 158441261, 177458781, 167448274, 165913417, 175594929, 170678002, 174628712, 180300890, 180301399, 180302015, 180302075, 178776840, 86580365, 151015350, 173362083, 173990195, 68559433, 78212597, 177185166, 179388848, 170480710, 180301165. UIKit 141837548, 161843040, 170479084. Mac Catalyst 69906818, 57819435, 176879915. Launch Daemons and Agents 166415497. TCC 90775556. System Integrity Protection 161835690, 178668601. Privacy & Security Settings 184660124. Network Security 176055825. Rosetta 168097174, 163213094, 171187112, 176042635. Core AI 174796039, 179282606. Apple Unified Logging System 160567675. PhotoKit 175412725. CoreStorage 175892420. DVDPlayback 179136240. AirPort Utility 158248382. USDKit 177417812. Weather Highlights 164408676. StoreKit 141012819, 156749517, 160501742, 167808780. StoreKit Testing in Xcode 184155259, 184255116. System 160612181, 177911316. Disk Images 177868758. Virtualization 64203273. Gatekeeper 123097648. Game Controller 168071382. VideoToolbox 177635243, 179040806. Metal 172520325, 177318505. Foundation 161588649. Hardware Security 152103975. Swift Charts 174168981. Core Spotlight 183770678. Safari 183044008. Shortcuts 166068090, 168315587. Startup Disk 166640903. Siri 171728298, 176299524, 176812955, 177116121, 177376984, 177984074. 수치(86개 영역, 새 기능 68건, 해결된 문제 173건, 알려진 문제 18건, 사용 중단 13건)는 각 제목 아래의 목록 항목을 필자가 센 것입니다. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. macOS 26.6.2를 실행하는 Mac에서 Xcode 27(27A266a) 안의 macOS 27.0 SDK를 필자가 조사한 결과, 2026년 9월 26일. MacOSX27.0.sdk/System/Library/CoreServices/SystemVersion.plist는 ProductBuildVersion 26A425와 ProductVersion 27.0을 보고함. PHAssetResource.h는 originalFilename에 API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27))를 가짐. arm64e-apple-macos SwiftUI 인터페이스는 FileDocument에 @available(macOS, introduced: 11.0, deprecated: 100000.0, message: "Conform your type to Document instead.")를, roundedBorder에 deprecated: 100000.0과 textFieldStyle(.bordered) 메시지를 가짐. macOS AppIntents 인터페이스에는 deleteEvent가 1회, deleteEvents가 0회 등장. DVDPlayback.framework에는 DVDPlayback.tbd(서로 다른 _DVD 심볼 223개, 타깃 x86_64-macos, arm64e-macos, arm64e.x1-macos), Headers/DVDPlayback.h, Modules/module.modulemap이 있음. DVDPlayback을 임포트하고 DVDInitialize()를 호출하는 파일의 swiftc -typecheck는 -target arm64-apple-macos26.0에서 “warning: ‘DVDInitialize()’ was deprecated in macOS 10.15: No longer supported”를, -target arm64-apple-macos27.0에서 “error: ‘DVDInitialize()’ is unavailable in macOS: No longer supported”를 출력. originalFilename을 읽고 FileDocument를 준수하며 .roundedBorder를 적용하는 파일의 swiftc -typecheck는 -target arm64-apple-macos26.0에서 진단 없음, -target arm64-apple-macos27.0에서 경고 1건 “‘originalFilename’ was deprecated in macOS 27: Use filename instead”를 출력. NSRefreshController.h와 NSTextSelectionManager 인터페이스는 API_AVAILABLE(macos(27.0)). NSToolbarItemGroup.h는 NSToolbarItemGroupRole을 NS_SWIFT_NAME(NSToolbarItemGroup.Role) API_AVAILABLE(macos(27.0), ios(27.0))로 선언하고 role 속성은 API_AVAILABLE(macos(27.0))이며, NSSegmentedControl.h도 마찬가지. NSMenuItem.h는 preferredImageVisibility를 API_AVAILABLE(macos(27.0))로 선언. NSGestureRecognizer.h는 cancellableByScrollGesture를 API_AVAILABLE(macos(27.0))로 선언. NSApplication.h는 NSApplicationPresentationDisableScreenCornerInteractions를 API_AVAILABLE(macos(27.0)), 값은 마스크의 비트 15로 선언. DiskImageKit, NowPlaying, AccessoryAccess 프레임워크 폴더가 있음. System 인터페이스는 public struct Stat을 선언. Chart 클로저 안에서 if로 BarMark와 LineMark 사이를 분기하는 파일의 swiftc -typecheck는 -target arm64-apple-macos26.0과 -target arm64-apple-macos27.0 어느 쪽에서도 진단 없음. StoreKit 인터페이스는 assigned와 BundledSubscription을 포함하고 Transaction.RevocationType에 원시 값 ASSIGNMENT_REVOKE를 가진 public static var assignmentRevocation을 선언하는 반면, SDK의 어느 파일에도 노트의 assignmentRevoked는 없음. 그 케이스는 @available(iOS 26.4, macOS 26.4, tvOS 26.4, watchOS 26.4, visionOS 26.4, *)이면서 @backDeployed(before: iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0)로 선언됨. ReferenceFileDocument는 @available(macOS, introduced: 11.0, deprecated: 100000.0, message: "Use Document protocol instead.")를 가짐. NSScrollView.h는 refreshController를 API_AVAILABLE(macos(27.0))로 선언. NSMenuItem.h의 image 주석은 “in macOS 27 and later, AppKit determines the visibility of menu item images, and will typically hide images”. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩

  4. Apple, macOS 27.2 Golden Gate Beta 2 Release Notes, 2026년 9월 26일에 가져옴. General 186939138, AppKit 186955507, Notifications 187312007, Shortcuts 187499433, StoreKit Testing in Xcode 183933307, 184155259, 184255116, 186018916을 인용. ↩↩↩

  5. Apple, Xcode 27.2 Beta Release Notes, 2026년 9월 26일에 가져옴. SDK, Known Issues(187160501)를 인용. ↩

  6. Apple, App Store Connect release notes, 2026년 9월 26일에 가져옴. 2026년 9월 14일 항목이며, 표 안에 전문을 인용. ↩

  7. Apple, macOS Release Notes, 2026년 9월 26일에 가져온 색인. 27 항목은 “macOS 27 Golden Gate Release Notes”와 “macOS 27.2 Golden Gate Beta 2 Release Notes”. ↩↩↩

관련 게시물

iOS 27.0 릴리스 노트: 사용 중단, 동작 변경, 수정 사항

iOS 27.0(24A437)이 9월 14일에 출시되었습니다. 개발자 관점에서 노트를 읽습니다. 사용 중단 11건, 27 SDK로 빌드하는 순간 바뀌는 동작, 그리고 제가 직접 검증한 수정 1건입니다.

35 분 소요

macOS 27 Golden Gate 출시: 개발자에게 무엇이 달라지나

macOS 27 Golden Gate가 9월 14일 빌드 26A428로 출시되었습니다. Apple silicon 전용이며, Rosetta의 마지막 범용 릴리스, arm64를 기본값으로 삼는 설치 패키지, 그리고 개발…

24 분 소요

iPhone Duo를 위한 디자인: 움직이는 것, 나뉘는 것, 그대로 있는 것

Apple의 iPhone Duo 디자인 가이드와 세 편의 Tech Talk를 규칙으로 읽습니다. 포즈별 레이아웃이 아닌 두 개의 사이즈 클래스, 접힘부에서의 변위, arrangement, 그리고 사이드 바.

17 분 소요