Xcode 15 beta 3 — не удалось создать экземпляр класса с именем _UIRecessedMaterialView
У меня есть приложение, которое загружает xib с сегментированным элементом управления. Если я соберу его с помощью Xcode 15 beta 3 и запущу на iPad с iPadOS 17 (или на симуляторе iOS 17), он вылетит с ошибкой:
Закрытие приложения из-за неперехваченного исключения «NSInvalidUnarchiveOperationException», причина: «Не удалось создать экземпляр класса с именем _UIRecessedMaterialView, поскольку класс с именем _UIRecessedMaterialView не найден; класс должен быть определен в исходном коде или связан с библиотекой (убедитесь, что класс является частью правильной цели)' Первый стек вызовов throw: ( 0 CoreFoundation 0x00007ff80048c88a __ExceptionPreprocess + 242 1 libobjc.A.dylib 0x00007ff800057894 objc_Exception_throw + 48 2 CoreFoundation 0x00007ff80048c768 -[NSException initWithCoder:] + 03 UIFoundation 0x00007ff804a1eb4d UINibDecoderDecodeObjectForValue + 3524 UIFoundation 0x00007ff804a1eebe UINibDecoderDecodeObjectForValue + 12335 UIFoundation 0x00007ff804a1e9e2 -[UINibDecoder decodeObjectForKey:] + 2576 UIKitCore 0x0000000108c04a9f -[UIView initWithCoder:] + 1327 7 UIKitCore 0x0000000107c32c81 -[UIControl initWithCoder:] + 65 8 UIKitCore 0x0000000107c5a7b3 -[UISegmentedControl initWithCoder:] + 659 UIFoundation 0x00007ff804a1ecb4 UINibDecoderDecodeObjectForValue + 711 10 UIFoundation 0x00007ff804a1e9e2 -[UINibDecoder decodeObjectForKey:] + 257 11 UIKitCore 0x000000010801c7cd -[UIRuntimeConnection initWithCoder:] + 125 12 UIKitCore 0x000000010801cbef -[UIRuntimeEventConnection initWithCoder:] + 5913 UIFoundation 0x00007ff804a1ecb4 UINibDecoderDecodeObjectForValue + 71114 UIFoundation 0x00007ff804a1eebe UINibDecoderDecodeObjectForValue + 123315 UIFoundation 0x00007ff804a1e9e2 -[UINibDecoder decodeObjectForKey:] + 25716 UIKitCore 0x0000000108015a79 -[NSCoder(UIIBDependencyInjectionInternal) _decodeObjectsWithSourceSegueTemplate:creator:sender:forKey:] + 447 17 UIKitCore 0x000000010801877e -[UINib instanceiateWithOwner:options:] + 1118 18 UIKitCore 0x000000010801a112 -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:] + 13919 CustomSearchBarBug 0x000000 010671830e $s18CustomSearchBarBug11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0m6LaunchL3KeyaypGSgtF + 462 20 CustomSearchBarBug 0x0000000106718687 $s18CustomSearchBarBug11AppDelegateC11application_29didFinishLaunchingWithOptionsSbSo13UIApplicationC_SDySo0m6LaunchL3KeyaypGSgtFTo + 183 21 UIKitCore 0x000000010857a092 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 297 22 UIKitCore 0x000000010857be6b -[UIApplication _callInitializationDelegatesWithActions:forCanvas:payload:fromOriginatingProcess:] + 425323 UIKitCore 0x000000010858196b -[UIApplication _runWithMainScene:transitionContext:completion:] + 124124 UIKitCore 0x00000001078e6780 -[_UISceneLifecycleMultiplexer CompleteApplicationLaunchWithFBSScene:transitionContext: ] + 181 25 UIKitCore 0x000000010857e1dc -[UIApplication _compellApplicationLaunchToCompleteUnconditionally] + 5926 UIKitCore 0x000000010857e591 -[UIApplication _run] + 936 27 UIKitCore 0x00000001 0858301a UIApplicationMain + 123 28 UIKitCore 0x000000010764e103 __swift_destroy_boxed_opaque_existential_1Tm + 1085129 CustomSearchBarBug 0x0000000106718b1b $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 12330 CustomSearchBarBug 0x0000000106718a97 $s18CustomSearchBarBug11AppDelegateC5$mainyyFZ + 3931 CustomSearchBarBug 0x0000000106718b88 main + 2432 dyld 0x00000001068a23ee start_sim + 1033 ??? 0x000000010dfd041f 0x0 + 4529652767)libc++abi: завершение работы из-за неперехваченного исключения типа NSException
Самый простой xib для воспроизведения сбоя:
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="3.0" toolsVersion="22138.1" targetRuntime="iOS.CocoaTouch.iPad" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
<device id="ipad7_9" orientation="portrait" layout="fullscreen" appearance="light"/>
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22113"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view clipsSubviews="YES" contentMode="scaleToFill" id="63">
<rect key="frame" x="0.0" y="0.0" width="744" height="1133"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES"/>
<subviews>
<segmentedControl opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="top" segmentControlStyle="bar" selectedSegmentIndex="0" id="10">
<rect key="frame" x="218.5" y="5.5" width="331" height="33"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<segments>
<segment title="Item"/>
<segment title="Brand"/>
</segments>
<connections>
<action selector="segmentedControlChanged:" destination="-1" eventType="valueChanged" id="25"/>
</connections>
</segmentedControl>
</subviews>
<nil key="simulatedStatusBarMetrics"/>
<point key="canvasLocation" x="467.96875" y="146.484375"/>
</view>
</objects>
</document>
XIB загружается так:
let nibs = Bundle.main.loadNibNamed("SegmentedControl", owner: nil, options: nil)
На iOS 16.3.1 сбоев не происходит.
Есть ли какое-нибудь исправление?
3 ответа
В моем случае проблема была связана с неправильными инструментами командной строки, выбранными для xcodebuild. Он был переключен на стабильную версию Xcode 14.3, которую я установил на ту же машину.
Я переключил его на инструменты командной строки Xcode 15 Beta 3, и ошибка исчезла.
Убедитесь, что в настройках Xcode выбраны правильные инструменты:
В моем случае после полного удаления установленного XCode15β3 и повторной установки XCdode15β4 проблема была решена.