iOS 27.0 릴리스 노트: 사용 중단, 동작 변경, 수정 사항
iOS 27.0과 iPadOS 27.0은 2026년 9월 14일 월요일에 빌드 24A437로 출시되었습니다. Apple이 9월 11일에 RC로 올린 것과 같은 빌드이며, 같은 날 Xcode 27(27A266a)에 들어 있는 SDK가 함께 나왔고, App Store Connect도 같은 날부터 27.0 GA 빌드를 받기 시작했습니다.13 “어느 iOS 27.0인가”라는 질문에는 이제 세 개의 빌드 번호가 답이 됩니다. 기기는 24A437을 실행하고, Xcode 27 안의 SDK는 스스로를 24A430이라고 밝히며, 시뮬레이터 런타임은 24A434입니다.4 노트는 93개 영역에 걸쳐 새 기능 65건, 해결된 문제 197건, 알려진 문제 23건, 사용 중단 11건을 담고 있습니다. 기존 코드에 중요한 것은 27.0 SDK로 빌드하는 순간 발동하는 변경 묶음, SDK 자체 헤더에서 확인되는 사용 중단, 그리고 하나의 바이너리로 iOS 26.5와 iOS 27.0 런타임에서 나란히 재현되는 Foundation 수정 1건입니다.24 {.answer-block}
TL;DR
- 빌드 번호. 기기 24A437, SDK 24A430, 시뮬레이터 런타임 24A434입니다. RC와 GA는 기기 빌드를 공유하며, SDK 번호는 기기 번호가 아닙니다. 버그 리포트에서 빌드 번호를 물을 때 차이가 나는 지점입니다.14
- 27에 링크했을 때의 동작. 12개 범주, 총 23개 항목의 변경이 27.0 SDK로 빌드하는 순간부터 앱의 동작을 바꿉니다. 런치 스크린 필수화, 씬 라이프사이클 의무화, 숨겨진 탭이 선택되면
TabView가 크래시하는 문제, 선택 가능한Text의 시스템 텍스트 선택, 표시된 뷰 컨트롤러의 트레이트 상속, 인라인 스코프 바, 외부 디스플레이 씬이 더 이상 자동으로 제공되지 않는 변경, 시트와 팝오버 안에서 컨트롤 수정자가 초기화되는 변경,containerRelativeFrame의 세이프 에어리어 계산, 상태 표시줄 접근자,UIRequiresFullScreen아래의 iPad 크기 조정 규칙, 그리고 메뉴와 맨 위로 스크롤에 관한 두 가지 작은 SwiftUI 변화입니다.2 - 재컴파일하지 않으면 크래시. MetricKit의
HitchTimeMetric.ratio는 이제 새HitchTimeRatio단위로 측정하고,ScrollHitchTimeMetric은 Swift API에서 빠졌습니다. Apple은 실행 시 크래시와 심볼 누락 크래시를 피하려면 최신 SDK로 재컴파일하라고 말하며, SDK 인터페이스에서 해당 타입이 사라졌음을 확인할 수 있습니다.24 - 사용 중단 11건, 대부분은 조용합니다.
canOpenURL:(헤더에서ios(3.0, 27.0)), On Demand Resources(ios(9.0, 27.0)),PHAssetResource.originalFilename(ios(9, 27)), 기존 MetricKit API(API_TO_BE_DEPRECATED로 표시되어 있으므로 소프트 사용 중단),ScrollHitchTimeMetric,FileDocument,calendar.deleteEvents에서calendar.deleteEvent로의 이름 변경, PencilKit 이름 변경, 씬 의무화, AirPort 유틸리티, 그리고 Weather Highlights 언어 관련 안내입니다. 하드 사용 중단 3건은 배포 타깃이 27.0일 때만 경고를 내며, 17.0이나 26.0에서는 같은 파일이 경고 없이 컴파일됩니다.24 - Foundation 변경 2건, 테스트 완료.
+[NSURL URLWithString:]은 문자열의 다른 위치에 있는 공백을 이스케이프할 때 유효한%20을 더 이상 이중 인코딩하지 않습니다. 시뮬레이터 바이너리 하나가 iOS 26.5 런타임에서는%2520을, iOS 27.0 런타임에서는%20을 출력하고, Mac 빌드는 이전 동작 쪽과 일치하므로 이 수정은 SDK가 아니라 OS를 따릅니다.volumeAvailableCapacityKey가 유효 숫자 세 자리로 잘리는 변경은 시뮬레이터에서는 나타나지 않으며, 55,177,985블록이 정확히 보고됩니다.24
어느 빌드가 어느 것입니까?
| 위치 | 빌드 | 근거 |
|---|---|---|
| 기기, iOS 27.0 / iPadOS 27.0 | 24A437 | Releases 피드, 2026년 9월 14일 월요일. 9월 11일 금요일에 “iOS 27.0 RC (24A437)”1 |
| Xcode 27(27A266a) 안의 SDK | 24A430 | iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist의 ProductBuildVersion4 |
| iOS 27.0 시뮬레이터 런타임 | 24A434 | xcrun simctl list runtimes가 “iOS 27.0 (27.0 - 24A434)”를 출력4 |
| macOS 27.0 | 26A428 | Releases 피드, 9월 14일 월요일1 |
| 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일. RC SDK 업로드는 9월 9일부터 수락3 |
세 개의 번호가 있는 것은 실수가 아닙니다. SDK는 헤더와 인터페이스의 스냅샷이고, 시뮬레이터 런타임은 Apple이 Xcode에 별도로 배포하는 cryptex이며, 기기 빌드는 사람들이 실제로 실행하는 것입니다. 이 중 하나도 없이 “iOS 27.0”이라고만 적힌 재현 절차는 수정이 적용되었는지를 가르는 번호를 빠뜨린 것입니다.4
노트 자체는 범위를 밝히는 두 문장, “The iOS & iPadOS 27 SDK provides support to develop apps for iPhone and iPad running iOS & iPadOS 27. The SDK comes bundled with Xcode 27, available from the Mac App Store.” (iOS & iPadOS 27 SDK는 iOS & iPadOS 27을 실행하는 iPhone과 iPad용 앱 개발을 지원하며, Mac App Store에서 받을 수 있는 Xcode 27에 번들로 제공됨)로 시작해서 93개 영역을 차례로 다룹니다. 각 제목 아래의 목록 항목을 세면 새 기능 65건, 해결된 문제 197건, 알려진 문제 23건, 사용 중단 11건이 나옵니다. Siri만 해도 해결 38건과 알려진 문제 8건이고, SwiftUI는 새 기능 23건과 해결 13건, UIKit은 새 기능 9건과 해결 13건입니다.2 툴체인 쪽은 Xcode 27 글에서 다루었고, 지금 읽고 계신 이 글은 OS와 SDK 쪽을 다룹니다.
27.0 SDK로 빌드하는 순간 무엇이 바뀝니까?
Apple은 동작 변경을 앱이 링크하는 SDK에 따라 켜고 끕니다. 그래서 이 항목들은 이미 출시한 빌드에는 아무 영향이 없고, Xcode 27에서 처음 아카이브하는 순간 모두 발동합니다. 각 항목의 노트를 인용합니다.2
- 런치 스크린. “iOS and iPadOS apps built with the 27.0 SDK or later are required to include a launch screen. Your app’s
Info.plistmust contain one of the following keys:UILaunchStoryboardName,UILaunchStoryboards,UILaunchScreen, orUILaunchScreens. Apps that don’t include a launch screen are rejected when the App Store begins accepting apps built with the 27.0 SDK.” (27.0 SDK 이상으로 빌드한 앱은 런치 스크린이 필수이며,Info.plist에 위 키 중 하나가 있어야 함. App Store가 27.0 SDK 빌드를 받기 시작하면 런치 스크린이 없는 앱은 거부됨) App Store Connect는 27.0 RC SDK로 빌드한 App Store 업로드를 9월 9일부터, GA SDK 빌드를 9월 14일부터 받았습니다. 두 항목 모두 거부가 언제 시작되었는지는 말하지 않으므로, 둘 다 시행일이 아니라 업로드 수락일로 읽으시기 바랍니다.3 제 런치 스크린 글에서는 생성된 plist를 점검합니다. - 씬 라이프사이클. UIKit 사용 중단 항목에 “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (최신 SDK로 빌드한 앱은 씬 기반 라이프사이클을 채택해야 하며, 그렇지 않으면 실행에 실패함)라고 적혀 있습니다. 마이그레이션은 씬 의무화 글에 있습니다.
TabView선택. “In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, aTabViewenforces that its selection is set to a visible tab.TabViewmight crash when its selection is set to a hidden or otherwise unavailable tab.” (iOS 27.0과 iPadOS 27.0 SDK로 빌드한 앱에서TabView는 선택이 보이는 탭이어야 한다고 강제하며, 숨겨졌거나 사용할 수 없는 탭이 선택되면 크래시할 수 있음)UserDefaults에서 복원한 선택이 나중에 숨긴 탭을 가리키는 경우가 찾아봐야 할 모양입니다.- 선택 가능한
Text. “In apps built with the iOS 27.0 and iPadOS 27.0 SDKs, aTextview with.textSelection(.enabled)applied now supports user-interactive selection using the system text selection UI.” (27.0 SDK로 빌드한 앱에서.textSelection(.enabled)를 적용한Text뷰는 시스템 텍스트 선택 UI를 통한 사용자 선택을 지원함) Apple은 그런 뷰가 “might include additional gestures for system text selection interactions” (시스템 텍스트 선택 상호작용을 위한 추가 제스처를 포함할 수 있음)라고 덧붙이며, 커스텀 제스처에는.highPriorityGesture()를 쓰라고 안내합니다. 같은 빌드에서TextRenderer도 선택 가능한Text에서 동작하게 됩니다. - 표시된 뷰 컨트롤러. “In apps built with the iOS 27.0 SDK, a presented view controller inherits its trait collection by walking up its view’s superview chain through the intermediate views of the presentation, rather than jumping directly to the presentation controller.” (iOS 27.0 SDK로 빌드한 앱에서 표시된 뷰 컨트롤러는 프레젠테이션 컨트롤러로 바로 건너뛰지 않고, 프레젠테이션의 중간 뷰들을 거쳐 슈퍼뷰 체인을 따라 올라가며 트레이트 컬렉션을 상속함) 트레이트를 설정하는 커스텀
UIPresentationController서브클래스가 다시 테스트할 대상입니다. - 스코프 바. “In apps built with the iOS 27.0 SDK, when
UISearchControlleruses center search-bar placement, the scope bar appears inline on the same row as the search field rather than on a separate row beneath it.” (iOS 27.0 SDK로 빌드한 앱에서UISearchController가 가운데 검색 바 배치를 사용하면, 스코프 바는 아래 별도 행이 아니라 검색 필드와 같은 행에 인라인으로 표시됨) - 외부 디스플레이. “In apps built with the iOS 27.0 SDK,
windowExternalDisplayNonInteractivescenes are no longer offered automatically by the system. UseUIViewController.registerSceneAccessory(_:)with aUISceneAccessory.externalNonInteractiveinstance to display non-interactive content on external display scenes.” (iOS 27.0 SDK로 빌드한 앱에서windowExternalDisplayNonInteractive씬은 시스템이 더 이상 자동으로 제공하지 않음. 외부 디스플레이 씬에 비대화형 콘텐츠를 표시하려면UISceneAccessory.externalNonInteractive인스턴스와 함께UIViewController.registerSceneAccessory(_:)를 사용) SwiftUI에도ExternalNonInteractiveAccessory를 쓰는.sceneAccessory라는 같은 통로가 있습니다. - 시트와 팝오버. 수정됨으로 올라와 있습니다. “In apps built with the 27.0 SDKs, the
controlSize,buttonSizing,buttonRepeatBehavior,menuIndicatorVisibility, andButtonBorderShapeenvironment values are now reset to their default values in sheets and popovers.” (27.0 SDK로 빌드한 앱에서 이 환경 값들은 시트와 팝오버 안에서 기본값으로 초기화됨) 시트가 표시한 쪽에서.controlSize(.large)를 상속받고 있었다면, 더 이상 그렇지 않습니다. containerRelativeFrame. 역시 27.0 SDK 빌드에 대해 수정되었습니다. “incorrectly accounts for safe-area insets on aScrollView’s non-scrollable axis, causing the calculated scrollable content size to be too small” (ScrollView의 스크롤되지 않는 축에서 세이프 에어리어 인셋을 잘못 반영해 계산된 스크롤 콘텐츠 크기가 너무 작아짐)이라고 하므로,containerRelativeFrame(.vertical)을 쓰는 가로ScrollView는 크기가 달라집니다.- 상태 표시줄 접근자. 27.0 SDK 빌드에 대해 수정되었습니다.
UIApplication의 사용 중단된 상태 표시줄 접근자, 노트가 나열한statusBarFrame,statusBarOrientation,statusBarStyle,isStatusBarHidden이 “might return NaN or null values” (NaN이나 null 값을 반환할 수 있음)라고 합니다. - iPad와 iPhone 미러링의 크기 조정과 방향. UIKit의 해결된 문제 9건이 “built with the iOS 27 SDK” (iOS 27 SDK로 빌드한) 앱이 씬이 연결될 때, 혹은 사용자가 창 크기를 바꾸거나 회전할 때 무엇을 보게 되는지를 설명합니다.
UIRequiresFullScreen앱은 연속적인 크기 조정 업데이트 대신 “a discrete change to a newUIScreenwith an updated bounds” (갱신된 bounds를 가진 새UIScreen으로의 불연속적 변화)를 받고,UIScreen.main의 bounds는 “should remain fixed once the screen connects” (화면이 연결된 뒤에는 고정된 채로 유지되어야 함)이며, “supported interface orientations should no longer be a condition for continuous resizability” (지원하는 인터페이스 방향은 더 이상 연속 크기 조정 가능 여부의 조건이 아니어야 함)라고 합니다. - 메뉴와 맨 위로 스크롤. 작은 SwiftUI 변화 두 가지입니다. “In apps built with the 27.0 SDKs, a
LabeledContentview used inside aMenumaps its value to the platform menu item’s subtitle” (27.0 SDK로 빌드한 앱에서Menu안에 쓰인LabeledContent뷰의 값은 플랫폼 메뉴 항목의 부제목으로 매핑됨), 그리고 수정됨으로 올라온 “In apps built with the 2027 SDKs, tapping the status bar to scroll aScrollViewto its top correctly updates a boundscrollPosition” (2027 SDK로 빌드한 앱에서 상태 표시줄을 탭해ScrollView를 맨 위로 스크롤하면 바인딩된scrollPosition이 올바르게 갱신됨)입니다. 레이아웃 때문에 값을 넣어 두었던 메뉴 레이블에는 부제목이 생기고, 상태 표시줄 탭 뒤에 오래된 값을 보이던scrollPosition바인딩은 이제 갱신됩니다.
이 12개 범주가 기존 동작을 바꾸는 항목을 모두 포함합니다. 같은 SDK 게이트 뒤에 있는 새 기능, 예를 들어 ReadableDocument 프로토콜, 그 위에 만들어진 Document 프로토콜, UIScene.extendStateRestoration은 뒤의 절에서 다룹니다. 외부 디스플레이 범주는 UIKit 쪽의 제거와 SwiftUI 쪽의 대체를 짝지은 것입니다.
MetricKit 항목 두 건은 링크가 아니라 재컴파일에 관한 것이지만 여기에 속합니다. “HitchTimeMetric.ratio and SignpostIntervalMetric.hitchTimeRatio now use the new HitchTimeRatio type, a Dimension subclass that expresses hitch time as a ratio of milliseconds hitching per second of tracked duration. Recompile your app with the latest SDK to pick up this type change and avoid any crashes on launch.” (HitchTimeMetric.ratio와 SignpostIntervalMetric.hitchTimeRatio는 추적 시간 1초당 히치 밀리초의 비율을 표현하는 Dimension 서브클래스인 새 HitchTimeRatio 타입을 사용함. 이 타입 변경을 반영하고 실행 시 크래시를 피하려면 최신 SDK로 앱을 재컴파일할 것) 그리고 “The scrollHitchTime(_:) case of MetricResult and the ScrollHitchTimeMetric type are no longer part of the new Swift MetricKit API, and MetricReport values no longer contain scroll hitch entries. Use the hitchTime(_:) case and HitchTimeMetric instead, which report per-app animation hitch time. Recompile your app with the latest SDK to avoid a missing symbol crash if it references ScrollHitchTimeMetric or scrollHitchTime(_:).” (MetricResult의 scrollHitchTime(_:) 케이스와 ScrollHitchTimeMetric 타입은 새 Swift MetricKit API에서 빠졌고, MetricReport 값에는 더 이상 스크롤 히치 항목이 없음. 대신 앱별 애니메이션 히치 시간을 보고하는 hitchTime(_:) 케이스와 HitchTimeMetric을 사용하고, 이 이름들을 참조한다면 심볼 누락 크래시를 피하기 위해 최신 SDK로 재컴파일할 것)2 iOS 27 SDK의 MetricKit Swift 인터페이스에서 ScrollHitchTimeMetric과 scrollHitchTime은 0번, HitchTimeRatio는 4번 나타납니다. 즉 베타 SDK에 대해 빌드되어 둘 중 한 이름을 쓰던 바이너리는 GA 인터페이스가 내보내지 않는 심볼을 참조하고 있는 셈입니다.4 제 MetricKit 글은 6월 베타 시점의 새 API를 다룹니다.
27.0에서 사용 중단된 API는 무엇입니까?
노트에는 사용 중단 11건이 나열되어 있습니다. 릴리스 노트의 사용 중단은 문장 하나이고, SDK의 사용 중단은 컴파일러가 읽는 가용성 어노테이션이며, 이 둘이 항상 같은 말을 하지는 않습니다. 각 항목을 Xcode 27 안의 iPhoneOS 27.0 SDK에 있는 헤더와 Swift 인터페이스에 대조해 확인했습니다.24
| 노트 항목 | SDK가 말하는 것 |
|---|---|
“canOpenURL: is deprecated. Attempt to open the URL and handle any failure instead of validating it first.” (canOpenURL:은 사용 중단됨. 먼저 검증하지 말고 URL을 열어 본 뒤 실패를 처리할 것) |
UIApplication.h에 API_DEPRECATED("Prefer attempting to open URLs and handling any failures", ios(3.0, 27.0), visionos(1.0, 27.0), tvos(9.0, 27.0)). 대체 패턴은 canOpenURL 글에 있습니다 |
“On Demand Resources and the NSBundleResourceRequest API are deprecated. Use Background Assets instead.” (On Demand Resources와 NSBundleResourceRequest API는 사용 중단됨. 대신 Background Assets를 사용할 것) |
클래스, 보존 우선순위 메서드, 알림 및 우선순위 상수에 API_DEPRECATED("Use Background Assets instead.", ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0)). ODR 글에서 마이그레이션 비용을 산정했고, 그 FAQ의 “얻는 것은 컴파일러 경고” 항목에는 이제 다음 절에서 설명하는 배포 타깃 단서가 붙어 있습니다 |
“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.” (PHAssetResource의 originalFilename 프로퍼티는 잘못 non-nullable로 표시되어 값을 잘못 나타냄. 대체용으로 nullable인 새 filename 프로퍼티가 제공됨) |
originalFilename은 API_DEPRECATED("Use filename instead", ios(9, 27), macos(10.15, 27), tvos(10, 27), visionos(1, 27)). filename은 nullable이며 API_AVAILABLE(macos(27), ios(27), tvos(27), visionos(27)) |
기존 MetricKit API인 MXMetricManager, MXMetricManagerSubscriber, MXMetricPayload, MXDiagnosticPayload는 “are no longer recommended for new adoption. Use MetricManager instead.” (새로 채택하는 것을 더 이상 권장하지 않음. 대신 MetricManager를 사용할 것) |
MXMetricManager에 API_DEPRECATED("Use MetricManager instead.", ios(13.0, API_TO_BE_DEPRECATED), macos(12.0, API_TO_BE_DEPRECATED)). 버전이 없는 소프트 사용 중단이므로 지금은 경고가 없습니다. Apple의 클래스 레퍼런스 페이지는 모든 플랫폼에서 27.0에 사용 중단되었다고 적고 있어 문서와 헤더가 어긋납니다. 제 MetricKit 글은 그 페이지의 버전을 그대로 옮겼기에 이제 이 불일치에 대해 날짜를 적은 안내를 달았습니다6 |
ScrollHitchTimeMetric과 scrollHitchTime(_:)은 “are no longer part of the new Swift MetricKit API” (새 Swift MetricKit API에 더 이상 포함되지 않음) |
MetricKit.swiftmodule에 두 이름 모두 0번. 사용 중단이 아니라 제거입니다 |
“The FileDocument protocol is deprecated. Use ReadableDocument for read-only documents or Document for documents that support reading and writing.” (FileDocument 프로토콜은 사용 중단됨. 읽기 전용 문서에는 ReadableDocument를, 읽기와 쓰기를 지원하는 문서에는 Document를 사용할 것) |
FileDocument: deprecated: 100000.0, message: "Conform your type to Document instead.", ReferenceFileDocument: "Use Document protocol instead.". 둘 다 소프트이며, Document는 @available(iOS 27.0, macOS 27.0, visionOS 27.0, *)이므로 대체재에는 27 하한이 필요합니다 |
“The calendar.deleteEvents schema has been renamed to calendar.deleteEvent.” (calendar.deleteEvents 스키마는 calendar.deleteEvent로 이름이 바뀜) |
AppIntents.swiftmodule에 deleteEvents는 0번. deleteEvent: some AppSchemaIntent는 있습니다. 별칭 없는 이름 변경이므로 옛 이름을 쓰는 코드는 컴파일 오류입니다 |
“__PKStrokeRenderState has been renamed to PKStrokeRenderStateReference, with PKStrokeRenderStateReference.init(…) replacing PKStrokeRenderState.asObjCRenderState().” (__PKStrokeRenderState는 PKStrokeRenderStateReference로 이름이 바뀌었고, PKStrokeRenderState.asObjCRenderState()는 PKStrokeRenderStateReference.init(…)으로 대체됨) |
PKStrokeRenderState.h는 API_AVAILABLE(ios(27.0), macos(27.0), visionos(27.0)) 아래에서 @interface PKStrokeRenderState를 NS_SWIFT_NAME(PKStrokeRenderStateReference)와 함께 선언합니다. Swift 인터페이스에는 asObjCRenderState가 전혀 없습니다. Apple이 지목한 대체재는 레퍼런스 클래스의 init(_ swiftValue: PKStroke.RenderState)이므로 새 호출 형태는 PKStrokeRenderStateReference(state)이고, 옛 호출은 컴파일에 실패합니다 |
| “Apps built with the latest SDK must adopt the scene-based life cycle or they fail to launch.” (최신 SDK로 빌드한 앱은 씬 기반 라이프사이클을 채택해야 하며, 그렇지 않으면 실행에 실패함) | 어노테이션이 아니라 실행 실패입니다. 씬 의무화 글을 참고하세요 |
| “AirPort Utility will no longer be available for new downloads from the App Store.” (AirPort 유틸리티는 App Store에서 더 이상 새로 내려받을 수 없음) 재다운로드는 여전히 가능. iOS 27에서 “functionality is not guaranteed” (기능은 보장되지 않음) | API가 아니라 앱입니다 |
| “Weather Highlights is currently only available in US English.” (Weather Highlights는 현재 미국 영어로만 제공됨) | Apple은 이를 사용 중단 항목으로 분류했지만, 읽어 보면 가용성 안내입니다 |
사용 중단 제목 바깥에도 소프트 사용 중단 하나와 이름 변경 하나가 있습니다. .roundedBorder 텍스트 필드 스타일은 SwiftUI 인터페이스에 deprecated: 100000.0 어노테이션을 달고 있으며, 안쪽 백틱을 제거한 메시지는 “Use textFieldStyle(.bordered) with textInputBorderShape(.roundedRectangle)” (textInputBorderShape(.roundedRectangle)과 함께 textFieldStyle(.bordered)를 사용할 것)입니다. TextInputBorderShape를 도입한 새 기능 항목과 짝을 이룹니다. 100000.0 버전은 “사용 중단이지만 아직은 아님”을 나타내는 Apple의 관례로, 기본 컴파일러 설정에서는 컴파일러가 침묵하고 메시지는 인터페이스에서만 보입니다. 이름 변경 쪽이 더 까다롭습니다. UINavigationItem.navigationBarMinimization은 “replaces UINavigationItem.barMinimizeBehavior and UINavigationItem.barMinimizationSafeAreaAdjustment” (UINavigationItem.barMinimizeBehavior와 UINavigationItem.barMinimizationSafeAreaAdjustment를 대체함)이고, SwiftUI의 toolbarMinimizationBehavior도 같은 방식으로 toolbarMinimizeBehavior를 대체합니다. 이 세 옛 이름은 27.0 SDK의 UIKit 헤더에도, UIKit과 SwiftUI의 Swift 인터페이스에도 나타나지 않으므로, 이를 쓰는 코드는 경고가 아니라 컴파일 실패를 겪습니다. deleteEvents와 같은 부류입니다.24
하드 사용 중단도 보기보다 조용합니다. 컴파일러는 사용 중단 버전을 SDK가 아니라 배포 타깃과 비교하므로, ios(3.0, 27.0)은 최소 iOS가 27.0인 타깃에서만 경고를 냅니다. canOpenURL을 호출하고, NSBundleResourceRequest를 만들고, originalFilename을 읽는 파일 하나를 27 SDK에 대해 세 번 컴파일했습니다. -target arm64-apple-ios17.0-simulator와 26.0에서는 진단 없이 컴파일되었고, 27.0에서는 경고 세 개, 'canOpenURL' was deprecated in iOS 27.0: Prefer attempting to open URLs and handling any failures, 'NSBundleResourceRequest' was deprecated in iOS 27.0: Use Background Assets instead., 'originalFilename' was deprecated in iOS 27: Use filename instead가 나왔습니다.4 현실적인 최소 버전을 가진 앱은 이 중 어느 것도 컴파일러에게서 듣지 못합니다. 기본 컴파일러 설정에서는 아래 체크리스트의 grep이 유일한 알림입니다.
제가 검증한 수정은 무엇입니까?
Foundation 항목 두 건은 읽는 대신 직접 실행해 볼 수 있습니다. 노트는 첫 번째를 수정됨으로 올렸습니다. “+[NSURL URLWithString:] no longer double-encodes the % of valid percent-escape sequences when encoding other invalid characters.” (+[NSURL URLWithString:]은 다른 유효하지 않은 문자를 인코딩할 때 유효한 퍼센트 이스케이프 시퀀스의 %를 더 이상 이중 인코딩하지 않음)2 프로브는 유효한 이스케이프 하나와 NSURL이 이스케이프해야 하는 문자 하나를 각각 담은 문자열 세 개로 NSURL(string:)을 만들고 absoluteString을 출력합니다. Xcode 27로 두 번 빌드했습니다. 한 번은 Mac용, 한 번은 최소 iOS 26.0의 시뮬레이터용이며, 그 시뮬레이터 바이너리 하나를 손대지 않고 iOS 26.5 런타임과 iOS 27.0 런타임에서 실행했습니다.4
| 입력 | macOS 26.6.2, 그리고 iOS 26.5의 시뮬레이터 바이너리(동일) | 같은 시뮬레이터 바이너리를 iOS 27.0(24A434)에서 실행 |
|---|---|---|
https://example.com/a%20b c |
https://example.com/a%2520b%20c |
https://example.com/a%20b%20c |
https://example.com/search?q=caf%C3%A9 au lait |
https://example.com/search?q=caf%25C3%25A9%20au%20lait |
https://example.com/search?q=caf%C3%A9%20au%20lait |
https://example.com/p%20q{r |
https://example.com/p%2520q%7Br |
https://example.com/p%20q%7Br |
첫 번째 열이 이전 동작입니다. NSURL은 공백을 이스케이프하면서 이미 유효했던 이스케이프의 %까지 %25로 바꾸기 때문에, 경로가 이스케이프가 가리키던 것과 달라집니다. iOS 27.0 열이 수정된 결과입니다. LC_BUILD_VERSION이 minos 26.0과 sdk 27.0을 보이는 Mach-O 하나가 두 시뮬레이터 열을 모두 만들어 냈으므로, 결과를 결정하는 것은 코드가 실행되는 운영 체제이지, 컴파일에 쓴 SDK도 빌드 타깃도 아닙니다. 오늘 빌드한 앱은 제가 테스트한 iOS 26.5 런타임에서 이전 인코딩을 유지하며, 다른 26.x 릴리스에서 다른 결과를 기대할 근거는 릴리스 노트에 없습니다.
두 번째는 노트가 새 기능으로 올린 항목인데, 제가 코드를 실행할 수 있는 곳에서는 재현하지 못했습니다. “volumeAvailableCapacityKey is truncated to 3 significant decimal digits at the block count level (e.g., 123,456,789 blocks becomes 123,000,000 blocks).” (volumeAvailableCapacityKey는 블록 수 수준에서 유효 숫자 세 자리로 잘림. 예를 들어 123,456,789블록은 123,000,000블록이 됨)2 iOS 27.0 시뮬레이터에서 URL.resourceValues(forKeys: [.volumeAvailableCapacityKey])는 226,009,026,560바이트를 반환했고, 같은 경로에 대한 statfs는 f_bsize 4,096에 f_bavail 55,177,985를 반환했는데, 곱하면 정확히 같은 값입니다. 유효 숫자 세 자리 블록 수였다면 55,100,000블록, 즉 225,689,600,000바이트였을 것입니다.4 호스트 Mac은 같은 코드로 55,177,998블록을 보고했습니다. 제가 읽기로는 이 잘림은 Foundation이 아니라 기기 커널에 있으며, Mac 커널에 Mac 볼륨을 묻는 시뮬레이터는 이를 보여 줄 수 없습니다. 실제 기기에서는 프로브를 실행하지 않았으므로 이 항목은 거짓이 아니라 미검증으로 취급하시고, 예전에는 정확했던 기기의 여유 공간 보고에 반올림이 나타날 것으로 예상하시기 바랍니다.
새 기능 중 기존 코드에 영향을 주는 것은 무엇입니까?
HealthKit의 제한된 기록. 노트는 한 줄, “Updated HealthKit permissions flow now lets users grant apps access to limited history or full history” (갱신된 HealthKit 권한 흐름에서는 사용자가 앱에 제한된 기록 또는 전체 기록에 대한 접근을 허용할 수 있음)뿐이며, 그 결과는 API 레퍼런스에 적혀 있습니다.25 데이터 유형 화면 다음에 “a second screen prompts them to choose how much historical data to grant your app, either a recent limited window or their full history” (두 번째 화면에서 최근의 제한된 기간 또는 전체 기록 중 앱에 허용할 기록 데이터의 범위를 선택하도록 함)라고 하며, “Time-bound authorization applies only to sample types” (기간 제한 인가는 샘플 유형에만 적용됨)라고 합니다.5 iOS 27.0과 watchOS 27.0부터 제공되는 새 earliestAuthorizedSampleDate(for:)는 HKObjectType에서 읽을 수 있는 가장 이른 날짜로 가는 딕셔너리를 반환하는데, 그 경계는 짐작하는 곳에 있지 않습니다. “HealthKit evaluates the boundary against a sample’s end date, so the framework might service your query with a sample that begins before the earliest authorization date as long as the sample ends after it.” (HealthKit은 경계를 샘플의 종료 날짜에 대해 평가하므로, 가장 이른 인가 날짜 이전에 시작한 샘플이라도 종료가 그 이후라면 쿼리 결과에 포함될 수 있음)45 프라이버시 규칙은 그대로입니다. “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.” (앱은 거부와 전체 접근을 구분할 수 없으며, 제한된 인가만이 앱이 식별할 수 있는 유일한 상태이고, 이는 의도된 설계임)5 Apple의 지침은 반환된 날짜 이전의 모든 것을 “없음”이 아니라 “알 수 없음”으로 취급하고, 각 쿼리의 시작 날짜를 유형별로 제한하라는 것입니다. HealthKit에서 계산하는 추세, 기준선, 연속 기록은 이제 사용자가 고른 기간 위에서 정확해야 합니다. HealthKit 글은 6월의 추가 사항을 다루며, 이 권한 모델 변경은 다루지 않습니다.
StoreKit 제안 코드. “Offer code redemption APIs now return a VerificationResult when redemption completes. If a redemption succeeds, your app receives a VerificationResult that contains a Transaction object. If a redemption fails, your app receives an error that describes what caused the redemption to fail.” (제안 코드 사용 API는 완료 시 VerificationResult를 반환함. 성공하면 Transaction 객체를 담은 VerificationResult를, 실패하면 원인을 설명하는 오류를 받음)2 인터페이스에서 presentOfferCodeRedeemSheet(in:)은 27.0에서 “Use presentOfferCodeRedeemSheet(from:options:) instead.” (대신 presentOfferCodeRedeemSheet(from:options:)를 사용할 것)라는 메시지와 함께 사용 중단되었고, 대체재는 iOS 27.0부터 제공되는 presentOfferCodeRedeemSheet(from viewController: UIViewController, options: Set<RedeemOption> = []) async throws -> VerificationResult<Transaction>입니다.4 시트를 띄운 뒤 Transaction.updates에서 결과를 기다리던 코드는 이제 await로 받을 수 있습니다.
백그라운드의 Core AI. “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 인스트루먼트에 표시됨)라고 합니다. 백그라운드 접근에는 “requires the new entitlement: “com.apple.developer.background-tasks.continued-processing.inference”” (새 권한이 필요함)입니다.2 26에서 백그라운드 작업으로 추론을 돌리면서 아무것도 요청하지 않았던 앱은 이 권한을 얻기 전까지 Neural Engine이 닫혀 있음을 보게 되고, 사용하던 Neural Engine 메모리는 이제 Allocations에서 자기 프로세스 아래에 나타납니다.
Background Assets. “You can reduce your app’s storage usage with localized asset packs. The system delivers the appropriately localized asset packs based on the user’s preferred languages.” (현지화된 에셋 팩으로 앱의 저장 공간 사용량을 줄일 수 있음. 시스템은 사용자의 선호 언어에 따라 적절히 현지화된 에셋 팩을 전달함)2 On Demand Resources를 떠나는 앱에게 현지화된 팩은 언어별 태그를 대체하는 기능입니다.
긴급 알림. 노트는 긴급 알림 동작을 수정됨으로 올렸습니다. “Critical alerts are automatically turned on for any apps that request your permission to enable notifications.” (알림 허용 권한을 요청하는 모든 앱에서 긴급 알림이 자동으로 켜짐)2 항목은 그 이상 말하지 않으므로, 베타에서 과도한 권한을 가진 것처럼 보였던 알림 흐름은 모두 다시 테스트하세요.
메뉴, @State, TLS, 그리고 새 슬라이스. 네 항목은 각각 별도의 글이 있습니다. iPadOS 27과 macOS 27의 메뉴 바와 컨텍스트 메뉴는 “present a reduced set of menu item images” (메뉴 항목 이미지를 줄여서 표시함)하며, 재정의는 UIMenuElement의 preferredImageVisibility로 합니다. 메뉴 이미지 글을 참고하세요. @State 매크로 재작성은 이 노트의 SwiftUI 항목이며, Xcode 27에서 무엇이 컴파일되는지를 바꿉니다. 재현은 Xcode 27 글에, 점검은 @State 매크로 글에 있습니다. MDM, 등록, 소프트웨어 업데이트 트래픽에 대한 더 엄격한 TLS 요구 사항은 “in 27.0 operating systems” (27.0 운영 체제에서) 시작됩니다. TLS 점검을 참고하세요. 그리고 CPA2를 갖춘 arm64e.x1은 “iPhone models with A20 Pro or later chips, Mac computers with M6 or later chips, and Apple Watch models with S11 or later chips” (A20 Pro 이상 칩의 iPhone, M6 이상 칩의 Mac, S11 이상 칩의 Apple Watch)에 해당합니다. arm64e.x1 글을 참고하세요.2
grep해 볼 만한 작은 것들. System에는 Stat 타입과 FilePath.stat()을 갖춘 Swift stat, lstat, fstat, fstatat이 추가되었고, 노트는 이 메서드들과 직접 작성한 확장의 한정되지 않은 stat() 사이의 충돌을 수정됨으로 올렸습니다. NSTextTable은 “and its related objects and types are available to UIKit clients starting with OS 27 releases” (및 관련 객체와 타입이 OS 27 릴리스부터 UIKit 클라이언트에서 사용 가능함)라고 합니다. AsyncImage는 “now automatically caches downloaded images using HTTP caching protocols” (HTTP 캐싱 프로토콜을 사용해 내려받은 이미지를 자동으로 캐시함)하며, 이를 조정할 URLRequest 이니셜라이저와 View.asyncImageURLSession(_:)이 제공됩니다. “When linked on iOS 27, tvOS 27, macCatalyst 27, or visionOS 27 SDKs” (iOS 27, tvOS 27, macCatalyst 27, visionOS 27 SDK에 링크했을 때) UIScene.extendStateRestoration과 UIScene.completeStateRestoration이 상태 복원을 백그라운드에서 포그라운드로의 전환까지 연장합니다. 그리고 SwiftData에는 “a deadlock for @Query when saving a ModelContext on a background actor while scheduling new async tasks for a ModelActor” (ModelActor를 위한 새 비동기 작업을 예약하면서 백그라운드 액터에서 ModelContext를 저장할 때 발생하는 @Query 교착 상태)에 대한 수정이 올라와 있습니다.2
계획에 반영해야 할 알려진 문제
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.” (이전 릴리스에서 @AppEntity(schema: .photos.asset)을 준수하던 기존 엔티티는 이번 릴리스에서 스키마에 새 프로퍼티가 추가되어 27 SDK에서 더 이상 컴파일되지 않을 수 있음) 해결 방법은 “To continue conforming to the schema, adopt the additional properties and move the code behind an availability check.” (스키마를 계속 준수하려면 추가된 프로퍼티를 채택하고 코드를 가용성 검사 뒤로 옮길 것)입니다.2 어떤 프로퍼티인지는 매크로가 알려 주지 않습니다. 빈@AppEntity(schema: .photos.asset)준수는swiftc에서 깨끗하게 컴파일되며, 그 확장은 스키마 이름을 담은AssistantSchemaEntity준수만 추가합니다. 목록은 Xcode의 App Intents 메타데이터 단계인appintentsmetadataprocessor에서 나오며, 누락된 프로퍼티 하나당 오류 하나로 빌드를 실패시킵니다. 그 빈 준수에 대해 27.0 SDK로 직접 실행하면 12건이 보고되고 각각 fix-it이 붙습니다.hasSuggestedEdits: Bool,isFavorite: Bool,isHidden: Bool,creationDate: Date?,location: GeoToolbox.PlaceDescriptor?,assetType: <#PhotoAssetType#>?,filter: <#PhotoFilterEffectType#>?,exposure: Double?,saturation: Double?,warmth: Double?,aperture: Double?,isPortraitModeEnabled: Bool?입니다. 두<#…#>자리 표시자는.photos.assetType과.photos.filterType열거형 스키마에 맞춰 직접 선언하는 열거형을 뜻하며, 인터페이스는 이를PhotoAssetType과PhotoFilterEffectType으로 부릅니다. 이 Mac에 있는 Xcode가 27A266a뿐이라 이 목록을 26 SDK와 비교하지는 못했습니다.4- Now Playing 토큰이 production으로 갑니다. “
RemoteMediaSessionandRemoteMediaSessionRepresentablealways provision Now Playing start and update push tokens for theproductionAPNs environment, even if theaps-environmentconfiguration is set todevelopment.” (RemoteMediaSession과RemoteMediaSessionRepresentable은aps-environment설정이development여도 Now Playing 시작 및 업데이트 푸시 토큰을 항상productionAPNs 환경용으로 발급함) 해결 방법은 “Use theproductionenvironment for testing and validation.” (테스트와 검증에production환경을 사용할 것)입니다.2 이 클래스는 새NowPlaying프레임워크에 있으며 macOS와 visionOS에서는 사용 불가로 표시되어 있습니다.4 SpotlightSearchTool이 온디바이스 모델을 넘칩니다. 구성 없이는 “the tool’s description and parameter schema alone exceed the on-device model’s context window before any prompt is added” (도구 설명과 매개변수 스키마만으로도 프롬프트를 더하기 전에 온디바이스 모델의 컨텍스트 창을 초과함)라고 합니다. 해결 방법은 초점을 좁힌 가이드, “.focused(.communications),.focused(.calendar),.focused(.documents),.focused(.visualMedia), or.focused(.audio)“입니다.2 이 API는 실재합니다.SpotlightSearchTool.Guide.focused(_ domain: ContentDomain = .items)가_CoreSpotlight_FoundationModels인터페이스에서.complete와.dynamic(_:)옆에 있습니다.4 제 온디바이스 AI 글이 이 도구를 다루는데, 6월의 채택 단계는 기본 구성과 시스템 모델을 짝지었기에 이제 날짜를 적은 정정이 붙어 있습니다.- 제어 센터의 성능 추적. “Gathering
PowerProfilerandLookbacktraces through thePerformance TraceControl Center widget might fail to produce traces.” (Performance Trace제어 센터 위젯을 통해PowerProfiler와Lookback추적을 수집하면 추적이 생성되지 않을 수 있음) Apple이 제시하는 해결 방법은 “Gather traces on iOS 27.0 beta 1 or earlier” (iOS 27.0 beta 1 이하에서 추적을 수집할 것)인데, 이미 업데이트한 기기에서는 대부분의 팀이 택할 수 없는 방법입니다.2 - StoreKit 테스트. “Changing the storefront or locale using
SKTestSessiondoesn’t propagate throughStorefront.updates” (SKTestSession으로 스토어프론트나 로케일을 바꿔도Storefront.updates로 전파되지 않음), 그리고 “Failed purchases usingSKTestSessionmight display error dialogs even whendialogsDisabledis set to true” (SKTestSession을 사용한 구매 실패 시dialogsDisabled가 true여도 오류 대화 상자가 표시될 수 있음)입니다.2 - 단축어와
UnionValue. “two number-related types (for example, both Int and Double)” (숫자 관련 타입 두 개, 예를 들어 Int와 Double 모두)를 가진 매개변수는 숫자 옵션이 두 번 표시됩니다. Apple의 해결 방법은 하나만 선언하는 것입니다.2
이번 주에 제가 할 일
- Xcode 27에서 한 번 아카이브하고, TestFlight에 올리기 전에 위의 27 링크 목록을 앱에 대조하세요. 런치 스크린 키, 씬 라이프사이클, 선택이 숨겨진 탭을 가리킬 수 있는
TabView, 컨트롤 수정자를 상속받던 시트입니다.2 - 출시 전에 MetricKit 코드를 GA SDK로 빌드하세요.
ScrollHitchTimeMetric이나 옛ratio타입을 여전히 참조하는 바이너리는 Apple의 설명대로라면 실행 시 크래시이며, 인터페이스는 더 이상 그 이름을 내보내지 않습니다.24 canOpenURL,NSBundleResourceRequest,originalFilename,FileDocument,deleteEvents,asObjCRenderState,barMinimizeBehavior를 grep하세요. 앞의 셋은 27.0 배포 타깃에서만 경고하고,FileDocument는 소프트이며, 마지막 셋은 컴파일에 실패하므로 grep이 곧 알림입니다.4- HealthKit을 읽는다면 인가 후에
earliestAuthorizedSampleDate(for:)를 호출하고 각 쿼리의 시작 날짜를 유형별로 제한하세요. 그런 다음 사용자가 고른 기간 위에서 연속 기록이나 기준선이 무엇을 뜻하는지 정하세요.5 - 버그 리포트에 빌드 번호를 세 곳에서 기록하세요. 기기의
ProcessInfo, 빌드 머신에 있는 SDK의SystemVersion.plist, 시뮬레이터 재현용simctl list runtimes입니다. 이들은 서로 다르며, 24A437에 있는 수정이 24A434에는 없을 수 있습니다.4 NSURL(string:)으로 문자열에서 URL을 만든다면 iOS 26에서 계속 테스트하세요.%25이중 인코딩을 고치는 것은 리빌드가 아니라 OS이며, Xcode 27 바이너리 하나가 26.5 런타임에서는 그것을 만들고 27.0에서는 만들지 않습니다.4
자주 묻는 질문
iOS 27.0은 언제 나왔고, 빌드 번호는 무엇입니까?
2026년 9월 14일 월요일, 빌드 24A437입니다. Apple이 9월 11일 금요일에 릴리스 후보로 올린 것과 같은 빌드입니다. iPadOS 27.0도 같은 번호를 씁니다.1
Xcode 27 SDK에 들어 있는 iOS 27.0 빌드는 무엇입니까?
Xcode 27(27A266a) 안의 iPhoneOS 27.0 SDK는 ProductBuildVersion으로 24A430을 보고하고, iOS 27.0 시뮬레이터 런타임은 24A434를 보고합니다. 둘 다 기기 빌드가 아닙니다.4
iOS 27에서 사용 중단된 것은 무엇입니까?
노트에는 11개 항목이 있습니다. canOpenURL:, On Demand Resources와 NSBundleResourceRequest, PHAssetResource.originalFilename, 기존 MetricKit API, ScrollHitchTimeMetric, FileDocument, calendar.deleteEvents 스키마, __PKStrokeRenderState, UIKit 씬 라이프사이클 의무화, AirPort 유틸리티, 그리고 Weather Highlights 언어 안내입니다. 셋은 SDK에 하드 27.0 사용 중단 버전이 있어 27.0 배포 타깃에서만 경고하고, 둘은 소프트, 둘은 이름 변경, 하나는 제거, 셋은 API 변경이 아닙니다.24
iOS 27을 위해 앱을 다시 빌드해야 합니까?
계속 실행되게 하는 데는 필요 없으며, 항목은 세 갈래로 나뉩니다. SDK 게이트: 위의 27 링크 12개 범주로, 27.0 SDK로 빌드하기 전에는 아무것도 바뀌지 않습니다. OS 수준으로 27.0 기기의 모든 바이너리에 미치는 것: Neural Engine 백그라운드 제한과 그 권한, HealthKit의 제한된 기록 권한 흐름, MDM과 업데이트 트래픽에 대한 TLS 강제, iPadOS 27의 메뉴 이미지 변경, 긴급 알림 수정, NSURL 인코딩 수정입니다. 베타 바이너리: 베타 SDK에 대해 빌드한 MetricKit 코드로, Apple은 크래시를 피하려면 GA SDK로 재컴파일하라고 말합니다. Apple의 App Store SDK 최소 요구는 2026년 4월 28일부터 26 SDK였고, 27 SDK 요구는 이 노트가 정하지 않은 이후의 기한입니다.23
iOS 27 릴리스 노트는 어디에 있습니까?
Apple 개발자 문서 사이트의 iOS & iPadOS Release Notes 아래에 27.0용 페이지 하나가 있으며, 영역별로 New Features, Resolved Issues, Known Issues, Deprecations가 정리되어 있습니다. 이 글의 수치는 2026년 9월 15일에 가져온 그 페이지에서 나왔습니다.2
NSURL 수정은 SDK에 있습니까, OS에 있습니까?
OS에 있습니다. Xcode 27로 27.0 SDK에 대해 최소 iOS 26.0으로 빌드한 시뮬레이터 바이너리 하나가 iOS 26.5 런타임에서는 이중 인코딩하고 iOS 27.0 런타임에서는 하지 않으며, macOS 26.6.2의 Mac 빌드도 이중 인코딩합니다. 두 시뮬레이터 실행 사이에 바뀐 것은 운영 체제뿐입니다.4
출처
-
Apple, Releases, 2026년 9월 15일에 가져온 RSS 피드. 2026년 9월 14일 월요일 자로 “iOS 27.0 (24A437)”, “iPadOS 27.0 (24A437)”, “macOS 27.0 (26A428)”, “Xcode 27 (27A266a)”, “tvOS 27.0 (24J361)”, “visionOS 27.0 (24M362)”, “watchOS 27.0 (24R364)”, 2026년 9월 11일 금요일 자로 “iOS 27.0 RC (24A437)”, 2026년 6월 8일 월요일 자로 “iOS 27.0 beta (24A5355q)”. ↩↩↩↩↩
-
Apple, iOS & iPadOS 27 Release Notes, GA 릴리스 이후인 2026년 9월 15일에 가져옴. 수치(93개 영역, New Features 65건, Resolved Issues 197건, Known Issues 23건, Deprecations 11건)는 각 영역 제목 아래의 목록 항목을 센 것입니다. 인용한 항목을 radar 번호로 표시합니다. Overview 단락. UIKit, New Features(런치 스크린 168247372, 표시된 뷰 컨트롤러 170005251, 스코프 바 173860616, 외부 디스플레이 177015874, 상태 복원 161843040, 메뉴 이미지와
preferredImageVisibility170479084,navigationBarMinimization177953926), Resolved Issues(상태 표시줄 접근자 162044221, 크기 조정 166422120, 178555304, 178558224, 178558897, 178559386, 178560235, 178561952, 178562971, 178573319), Deprecations(씬 라이프사이클 141837548,canOpenURL:179874781). SwiftUI, New Features(TabView164516837, 선택 가능한Text79770704, 선택 가능한Text의TextRenderer158160386,.sceneAccessory175548901,AsyncImage78212597,@State105893279, 메뉴 이미지 170480710,TextInputBorderShape173362083,toolbarMinimizationBehavior177954148), Resolved Issues(시트와 팝오버 167448274,containerRelativeFrame165913417, 상태 표시줄 탭 후scrollPosition111501113, FB12477370), New Features(Menu안의LabeledContent175594929), Deprecations(FileDocument178776840). MetricKit, New Features(HitchTimeRatio180024784)와 Deprecations(174892111, 180455992). Foundation, New Features(volumeAvailableCapacityKey75545872)와 Resolved Issues(NSURL161588649, FB20439045). App Intents, Known Issues(photos.asset181800016, FB23652582)와 Deprecations(calendar.deleteEvent176751155). On Demand Resources, Deprecations(170066290). PhotoKit, Deprecations(175412725, FB22589474). PencilKit, Deprecations(176410709). AirPort Utility, Deprecations(158364073). Weather Highlights, Deprecations(164408676). HealthKit, New Features(172310874). StoreKit, New Features(141012819). Core AI, New Features(174796039, 179282606). Background Assets, New Features(163944365). Notifications, Resolved Issues(179179362). Network Security, New Features(176055825). Hardware Security, New Features(152103975). System, New Features(160612181)와 Resolved Issues(177911316). TextKit, New Features(159870239). SwiftData, Resolved Issues(178113288). Now Playing, Known Issues(186036238). Core Spotlight, Known Issues(183770678). Control Center, Known Issues(184729556). StoreKit Testing in Xcode, Known Issues(184155259, 184255116). Shortcuts, Known Issues(168315587). ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, App Store Connect release notes, 2026년 9월 15일에 가져옴. 2026년 9월 14일 항목은 표에 전문을 인용했고, 2026년 9월 9일 항목은 RC SDK 업로드 수락을 기록하고 있습니다. 2026년 4월 28일부터의 26 SDK 최소 요구는 Apple의 Upcoming requirements 페이지에서 가져왔습니다. ↩↩↩↩
-
필자 재현.
DEVELOPER_DIR을 Xcode 27.0(27A266a)으로 지정하고, macOS 26.6.2(25G83)에서 2026년 9월 15일에 수행. 빌드:iPhoneOS.sdk/System/Library/CoreServices/SystemVersion.plist의ProductBuildVersion은 24A430,ProductVersion은 27.0.xcrun simctl list runtimes는 “iOS 27.0 (27.0 - 24A434)”를 출력. 헤더와 인터페이스는 모두iPhoneOS.sdk/System/Library/Frameworks아래:UIKit.framework/Headers/UIApplication.h98행(canOpenURL:).Foundation.framework/Headers/NSBundle.h721행부터 796행(NSBundleResourceRequest).Photos.framework/Headers/PHAssetResource.h29행과 33행.MetricKit.framework/Headers/MXMetricManager.h32행.MetricKit.framework/Modules/MetricKit.swiftmodule/arm64e-apple-ios.swiftinterface에서ScrollHitchTimeMetric이나scrollHitchTime은 0건,HitchTimeRatio는 4건.SwiftUI.framework/Modules/SwiftUI.swiftmodule/arm64e-apple-ios.swiftinterface23088행부터 23093행(FileDocument), 9334행부터 9338행(ReferenceFileDocument), 1728행부터 1731행(Document), 9489행(.roundedBorder메시지), 13763행(toolbarMinimizationBehavior).UIKit.framework/Headers,UIKit.framework/Modules,SwiftUI.framework/Modules전체에서barMinimizeBehavior,barMinimizationSafeAreaAdjustment,toolbarMinimizeBehavior의 식별자 전체 일치는 0건(부분 문자열로 걸리는 것은toolbarMinimizationSafeAreaAdjustment수정자와 그ToolbarMinimizationSafeAreaAdjustment타입뿐)이며,UINavigationItem.h는navigationBarMinimization을 선언.AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface에서deleteEvents는 0건,deleteEvent: some AppIntents::AppSchemaIntent는 12608행.PencilKit.framework/Headers/PKStrokeRenderState.h15행부터 17행, 그리고PencilKit.framework/Modules/PencilKit.swiftmodule/arm64e-apple-ios.swiftinterface에서asObjC는 0건,PKStrokeRenderStateReference의convenience public init(_ swiftValue: PencilKit::PKStroke.PencilKit::RenderState)는 46행, 반대 방향인PKStroke.RenderState안의public init(_ objcValue: PencilKit::PKStrokeRenderStateReference)는 38행.StoreKit.framework/Modules/StoreKit.swiftmodule/arm64e-apple-ios.swiftinterface311행부터 322행.HealthKit.framework/Modules/HealthKit.swiftmodule/arm64e-apple-ios.swiftinterface741행과 742행(earliestAuthorizedSampleDate(for:),@available(iOS 27.0, watchOS 27.0, macCatalyst 27.0, macOS 27.0, visionOS 27.0, *)).NowPlaying.framework/Modules/NowPlaying.swiftmodule/arm64e-apple-ios.swiftinterface180행부터 182행과 276행부터 278행._CoreSpotlight_FoundationModels.framework/Modules/_CoreSpotlight_FoundationModels.swiftmodule/arm64e-apple-ios.swiftinterface64행부터 78행과 100행부터 129행.photos.asset프로브: AppIntents와 CoreLocation을 가져오고,EntityQuery,id,displayRepresentation은 있으나 스키마 프로퍼티는 없는@AppEntity(schema: .photos.asset) struct ProbeAsset을 선언하는 15행짜리 Swift 파일.swiftc -c -target arm64-apple-ios27.0-simulator는 종료 코드 0, 진단 없이 컴파일했고,-Xfrontend -dump-macro-expansions는 매크로가@available(iOS 27.0, macOS 27.0, tvOS 27.0, watchOS 27.0, visionOS 27.0, *)속성 아래에extension ProbeAsset: AssistantSchemaEntity { static let __appSchemaEntity = "photos.asset" }와 빈AppEntity확장을 추가함을 보여 주었습니다. 드라이버 자체의swift-frontend줄(swiftc -###로 확보)을-emit-const-values-path와, 제가 작성한 18개 프로토콜 목록(AppIntent,AppEntity,AppEnum,AssistantSchemaEntity,EntityQuery, 그 밖의 App Intents 프로토콜)을 가리키는-const-gather-protocols-file을 붙여 다시 실행하자.swiftconstvalues파일이 생성되었고, 여기에appintentsmetadataprocessor --module-name ProbeMod --sdk-root <iPhoneSimulator27.0.sdk> --xcode-version 27A266a --platform-family iOS --deployment-target 27.0 --target-triple arm64-apple-ios27.0-simulator를 실행하니 “At least one halting error was produced during export”와 함께 종료 코드 255로 끝났으며, “error: Missing required property ‘exposure’ from AppSchemaEntity ‘photos.asset’” 형태의 줄 12개가 각각 “var exposure: Double?” 같은 fix-it을 달고 출력되었습니다(assetType과filter의 fix-it은<#PhotoAssetType#>?과<#PhotoFilterEffectType#>?자리 표시자를 담고 있으며,AppIntents.framework/Modules/AppIntents.swiftmodule/arm64e-apple-ios.swiftinterface는 11695행과 11705행에서assetType아래AppSchema.Enum("PhotoAssetType"),filterType아래AppSchema.Enum("PhotoFilterEffectType")으로 그 이름들을 선언합니다). 이 호출은 Xcode의 메타데이터 단계를 본뜬 것이지만 빌드 시스템의 것과 바이트 단위로 같지는 않으며, 빌드 시스템의 프로토콜 목록은SWIFT_EMIT_CONST_VALUE_PROTOCOLS에서 옵니다. 사용 중단 경고 프로브: UIKit, Foundation, Photos를 가져오고canOpenURL(_:)을 호출하며NSBundleResourceRequest(tags:)를 만들고PHAssetResource.originalFilename을 읽는 11행짜리 Swift 파일을 iPhoneSimulator 27.0 SDK에 대해swiftc -c로-target arm64-apple-ios17.0-simulator,ios26.0,ios27.0에서 컴파일: 17.0과 26.0에서는 진단 0건, 27.0에서는 본문에 인용한[#DeprecatedDeclaration]경고 3건.NSURL프로브: 표의 세 입력에 대해NSURL(string:)?.absoluteString을 출력하는 16행짜리 Swift 파일을 호스트용으로swiftc -O로, 그리고 한 번은 iPhoneSimulator 27.0 SDK에 대해swiftc -O -target arm64-apple-ios26.0-simulator로 컴파일(결과물에otool -l을 실행하면minos 26.0과sdk 27.0을 가진LC_BUILD_VERSION이 보임). 그 단일 시뮬레이터 바이너리를 iOS 26.5(23F77) 런타임으로 부팅한 시뮬레이터에서, 그다음 iOS 27.0(24A434) 런타임으로 부팅한 iPhone 18 Pro 시뮬레이터에서xcrun simctl spawn으로 실행. macOS와 iOS 26.5 출력은 동일했고, 모든 출력은 표와 같습니다. 용량 프로브:URL(fileURLWithPath: NSHomeDirectory()).resourceValues(forKeys: [.volumeAvailableCapacityKey, .volumeTotalCapacityKey, .volumeAvailableCapacityForImportantUsageKey])와statfs. 시뮬레이터 실행은volumeAvailableCapacity = 226009026560,f_bavail = 55177985,f_bsize = 4096을 출력했고, 호스트 실행은volumeAvailableCapacity = 226009079808,f_bavail = 55177998을 출력했습니다. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, HealthKit 문서, earliestAuthorizedSampleDate(for:)와 Authorizing access to health data, 2026년 9월 15일에 가져옴. 메서드 페이지는 가용성으로 iOS 27.0, iPadOS 27.0, Mac Catalyst 27.0, macOS 27.0, visionOS 27.0, watchOS 27.0을 나열하며, 종료 날짜 문장과 “Your app can’t distinguish between denied and full access; limited authorization is the only state your app can identify, by design.”의 출처입니다. 가이드는 “people can choose to grant your app access to only a limited window of recent data rather than their full history”, 두 번째 화면 문장, 그리고 “Time-bound authorization applies only to sample types.”의 출처입니다. ↩↩↩↩↩
-
Apple, MXMetricManager, MetricKit 클래스 레퍼런스, 2026년 9월 15일에 Apple 문서 JSON을 통해 가져옴. 가용성으로 iOS 13.0, iPadOS 13.0, Mac Catalyst 13.1, macOS 12.0, visionOS 1.0을 나열하고 각각에
deprecatedAt27.0이 붙어 있으며, 사용 중단 요약은 “Use MetricManager instead.”입니다. ↩