Xcode 8-IB 디자인 가능-자동 레이아웃 상태를 렌더링 및 업데이트하지 못했습니다. 에이전트가 충돌했습니다


167

최근에 Xcode 8로 업그레이드했으며 스토리 보드에 문제가 있습니다.

프로젝트를 열었고 스토리 보드가 열려 있지 않으면 컴파일되고 제대로 실행될 것입니다. 스토리 보드를 열면 아래와 같이 IB Designables에 대한 여러 오류가 발생합니다.

여기에 이미지 설명을 입력하십시오

이러한 뷰에서 사용자 정의보기를 사용하는 유일한 도면이다 TextFieldEffectsBEMCheckbox내가 Cocoapods를 사용하여 가져올 것이다.


사용중인 포드의 리포지토리를 확인하고이 문제가 다른 사용자에게 널리 퍼져 있는지 확인하십시오.
Zolnoor

이것에 대한 관련 답변이 있습니까?
Mohsin Khubaib Ahmed

1
해결 방법을 찾았습니까?
dip

임베디드 라이브러리를 위해 FAT BUILD 가 필요할 수 있습니다 . 내 예에서는 Swifter가 내장되었습니다. 당연히 뚱뚱한 빌드 (개발-시뮬레이터 / 전화)와 전화 전용 빌드 (앱 스토어, 전화 전용)를 유지하고 TestFlight 등에 제출해야 할 때 전화 전용으로 교체하십시오. 프로젝트에 전화 전용 라이브러리가있었습니다 !!!!! 도! "올바른"지방으로 바꾸면 문제가 해결되었습니다.
Fattie

답변:


179

다음 중 하나를 시도하여 원인을 파악할 수 있습니다.

  1. IBDesignablesAgentCocoaTouch이 디렉토리 에서 로그를 찾고 ~/Library/Logs/DiagnosticReports원인을 확인하십시오.

참고 : Catalina 사용자의 경우 : IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. @IBDesignable UIView스토리 보드에서을 선택하는 동안 편집기-> 선택한 뷰 디버그로 이동 하여 스택 추적을 확인하십시오.

  2. 파생 데이터 폴더를 삭제하십시오.

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
  3. 프로젝트를 청소하십시오 Shift + Command + Alt + K .

  4. 프로젝트 빌드 Command +를 B .


35
이 접근법을 사용하여 그 이유가 무엇인지 알 수있었습니다 Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'. 나는 그 IBDesignablesAgentCocoaTouch프로세스 호출 init(frame:)대신 에을 몰랐다 init?(coder aDecoder:).
Yevhen Dubinin

5
@YevhenDubinin 감사합니다. 도움이되었습니다. init(frame:)UIButton 서브 클래스에서 구현 한 후 모든 것이
정상이었습니다

2
이 문제는 해결되었지만 파생 데이터를 삭제하기 전에 xCode를 종료해야했습니다
Husam

2
가장 좋은 답변 init (frame :) is common issue
Michał Ziobro

1
xcode를 종료하고 DerivedData를 지우십시오. 문제를 해결했습니다.
Mubashar

80

다음을 수행하여 문제를 해결했습니다.

  1. 로 이동하십시오 File > Workspace settings.
  2. "파생 데이터"옆의 작은 오른쪽 화살표를 클릭하십시오. DerivedData폴더 위치에서 Finder 앱이 열립니다 .
  3. DerivedData폴더 내부로 이동 하여 프로젝트에 해당하는 폴더를 삭제하십시오.
  4. Xcode를 종료했다가 다시여십시오.
  5. 프로젝트를 청소하십시오 shiftcommandk.
  6. 프로젝트를 빌드하십시오 commandb.
  7. 스토리 보드를 엽니 다.
  8. 로 이동하십시오 Editor > Refresh all views.

업데이트

때로는 그냥 직접 Editor > Refresh all views일했습니다. Refresh all views비활성화 된 경우 Xcode를 종료하고 다시 시도하십시오.


이것을 게시 해 주셔서 감사합니다. 파생 데이터를 "오래된 학교"명령 줄을 삭제했지만 문제가 지속되었습니다. 귀하의 방법을 사용하면 문제가 해결되었습니다.
Adrian

나를 위해 승리를 위해 모든 견해를 새로 고칩니다. 감사!
Mike K.

56

실패한 뷰를 삭제하고 command + Z를 눌러 삭제를 취소합니다. 그것은 나를 위해 작동합니다.

실패한보기를 나중에 편집하면 오류가 다시 발생할 수 있으므로 위의 작업을 다시 수행하십시오.


6
어리석은 일이지만 효과가있었습니다.
Ansari

1
대박!! 나를 위해 일했다
Nupur Sharma

1
그것이 답이 될 수 있다는 것을 누가 알겠습니까? 그것은 여전히 ​​믿기지 못했습니다
Asad Amodi

37

CocoaPod 1.5.0에서이 문제에 직면했습니다. 해결책은이 오류가 표시되면 포드를 다시 설치 (포드 설치 다시)하는 것입니다. 또는 대신 CocoaPod 1.4.0을 사용할 수 있습니다. 1.4.0 (적어도 나를 위해)에서 잘 작동합니다.

최신 정보:

Podfile에 다음 스크립트를 추가하면 1.5.0의 문제를 해결하는 데 도움이됩니다.

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings.delete('CODE_SIGNING_ALLOWED')
    config.build_settings.delete('CODE_SIGNING_REQUIRED')
  end
end

참조 : https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911


100 % 사실입니다. 1.4.0으로 다운 그레이드하면 문제가 해결되었습니다.
ale_stro

4
작동, 1.5.0 포드.
Andrey Oshev

3
그것은 s work for me, you should add 코드의 마지막 end`.
mahdi

1
나를 위해 일했습니다. 성공하지 못한 채 다른 제안을 모두 시도했습니다. 포드 1.3.1에서 테스트
Sal

18

@IBDesignable수업에 다음 코드를 추가 하면 속임수가되었습니다.

override init(frame: CGRect) {
    super.init(frame: frame)
}

이것은 나를 위해 작동합니다. 실제로 확장을 위해 두 가지 재정의를 추가했습니다 UITextView. (1) init(frame: CGRect, textContainer: NSTextContainer?), (2) init?(coder aDecoder: NSCoder). 그런 다음 재구성하고 경고 (오류)가 사라졌습니다. 빌드 폴더를 정리할 필요조차 없습니다.
존 팡

감사! 좋은 답변)
JiosDev

13

해당 IBDesignablesAgentCocoaTouch파일을 찾을 수 없거나 편집기에서 '선택된 뷰 디버그'를 시도 할 때 오류가 발생하는 다른 사용자에게는 다음과 같은 "렌더링 실패"오류를 디버깅하는 방법이 있습니다.

사이드 바에서 '콘솔'앱을 열고 현재 Mac (기본적으로 자동 선택됨)을 선택한 다음 검색 창에서 "IBSceneUpdate"를 검색하고 Enter 키를 누르십시오.

이렇게하면 IBDesignable렌더링 할 수없는 Xcode 오류가 발생할 때마다 오류에 대한 자세한 내용이 포함 된 새로운 "IBSceneUpdate"항목이 표시됩니다.

그것은 적어도 내 IBDesignable오류 를 디버깅 할 수있는 방법입니다 !

IBSceneUpdate 오류를 표시하는 콘솔 앱


1
응용 프로그램은 FYI처럼 터미널이 아닌 실제 콘솔입니다.
Carl Upton

잘 잡아! 내 답변을 수정했습니다.
Stelabouras

11

사용자 정의 uiview에 xib 파일을 사용하는 경우 이 시도:

에서 변경

Bundle.main.loadNibNamed("UserView", owner: self, options: nil)

에:

let bundle = Bundle(for: UserView.self) 
bundle.loadNibNamed("UserView", owner: self, options: nil)

8

스토리 보드에 사용되는 사용자 정의보기에있을 수있는 모든 xib 파일에 대해 '특성 변형 사용'(ID 및 유형 패널)을 비활성화하십시오.


7

파생 된 데이터 폴더에서 폴더 (이 프로젝트와 관련이 있음)를 삭제하여 문제를 해결했습니다. 파일-> 프로젝트 설정->을 클릭하여 화살표 기호를 클릭하십시오 ./Users/.../Xcode/DerivedData를 클릭하십시오. xcode 종료 프로젝트를 열고이 단계를 사용하여 프로젝트를 청소하십시오. Product-> clean 다음 프로젝트를 빌드하십시오. Product-> Build 이것들은이 문제를 해결합니다.


4

@Maria가 제공하는 정답 :

충돌 보고서 확인 ~/Library/Logs/DiagnosticReports

대체 방법 :

  1. 열다 Spotlight

여기에 이미지 설명을 입력하십시오

  1. 유형 console.app

여기에 이미지 설명을 입력하십시오

  1. 고르다 Crash reports

여기에 이미지 설명을 입력하십시오

  1. IBDesignablesAgent-iOS충돌 로그 를 확인 하고 검토 하십시오.

콘솔을 사용하면 문제를 해결하는 데 도움이되었습니다. Xcode에있는 것보다 훨씬 자세한 메시지.
앤드류 무어


3

깨끗하게 시도하고 프로젝트를 실행하면이 문제가 해결되지 않습니다.

그러나 프로젝트를 닫았다가 다시 열었 습니다.


2

이것을 디버깅 할 때 UI를 수정하는 클래스가 있다는 것을 알았습니다. 일반적으로 marquelabel은 UILabel의 서브 클래스 또는 UIView를 서브 클래 싱하고 런타임에 UI를 그리고 클래스가 Autolayout 엔진과 충돌하는 다른 클래스입니다. 이러한 사용자 정의보기에 고정 너비 또는 높이를 지정하십시오. 그래도 문제가 해결되지 않으면 다음 해결책을 시도하십시오.

해결 방법 1 : -주석 해제 #use_frame은 포드 파일 내에서 작동합니다.

해결 방법 2 : -파생 데이터 삭제 시도

  1. Xcode의 편집기 창을 닫고 시뮬레이터를 종료하십시오->
  2. Xcode 환경 설정-> 위치->로 이동하십시오.
  3. 파생 데이터 경로를 표시하는 작은 회색 화살표를 클릭하십시오->
  4. 프로젝트를 선택하십시오->
  5. 안의 모든 폴더를 삭제하십시오->
  6. Xcode를 종료하고 다시여십시오

1
이것이 실제로 문제를 해결하는 방법에 대해 자세히 설명해 주시겠습니까?
Paula Hasstenteufel

이 문제가 여전히 해달라고 알고 왜 uncoment를 해결하는 use_frameworks 때문에 빠른 프로젝트 권리를 먹으 렴
Abhishek

내 Podfile은 이미 프레임 워크를 사용하고 있습니다.
mmr118

@ moni15 가능한 해결책을 하나 더 추가했습니다. 확인해주십시오.
Ashish Pisey

포드 파일에서 #use_frameworks의 주석 처리를 해제하고 DerivedData를 지우면 나에게 도움이되었습니다.
Jugal Desai

2

나는 같은 문제가 있었고 무슨 일이 있었는지 알아 내려고 여기에 왔습니다. IBDesignable이 로그 폴더에 존재하지 않고 이미 다른 모든 옵션을 시도했지만 의견에서 누군가 프레임 초기화에 대해 이야기하는 것을 보았습니다.

UIView에 대한 IBDesignable 확장을 주석 처리하기로 결정하고 즉시 문제를 해결했습니다. 따라서이 문제를 해결하려면 문제를 일으키는 확장명을 찾고 IBDesignable 클래스를 만들고 다음과 같이 필수 초기화 프로그램을 제공하여 필수 init를 설정하십시오.

@IBDesignable class RoundedView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)
    sharedInit()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    sharedInit()
}

override func prepareForInterfaceBuilder() {
    super.prepareForInterfaceBuilder()
    sharedInit()
}

func sharedInit() {
}
}

중요 : 설계 대상을 사용중인 항목에 새 클래스를 추가해야합니다.


1
문서에서 알 수 있듯이, PrepareForInterfaceBuilder () 구현에서 super.prepareForInterfaceBuilder ()를 호출하는 것을 잊지 마십시오.
Jaime S

1

동일한 오류가 발생했습니다. UITextField를 사용자 정의하고 인터페이스 빌더를 사용하는 중 콘솔의 오류는 "CustomField"클래스에 대해 구현되지 않은 초기화 프로그램 'init (frame :)'사용

오류를 해결하기 위해 초기자를 추가했습니다.


1

최신 XCode 버전으로 업데이트 한 후이 문제에 직면했습니다. 위에서 설명한 여러 솔루션을 시도한 후, 꽤 Xcode 만하고 시스템을 종료하고 전원을 켜면 저에게 효과적이었습니다.


0

필요한 변경을 한 후에 스토리 보드를 변경하거나 제 경우에는 .xib를 "XCode 7"에서 열고 저장하고 닫으십시오. 이것은 오류를 해결하기위한 스톱 갭 측정 일뿐입니다. 그러나 궁극적으로는 오류를 해결하거나 더 이상 할 수 없을 때까지 수정해야합니다.


0

필자의 경우 하위 클래스 인 라이브러리를 사용하고있었습니다 UIView. 이 (가) 사용 IB_DESIGNABLE중이며에 대한 호출이 누락되었습니다 [super awakeFromNib]. 이 메소드에 호출을 추가하면 버그가 사라졌습니다.

구현 중이라는 사실 IB_DESIGNABLE이 이것에 영향을 미쳤 는지 확실하지 않습니다 .


[super awakeFromNib]의 코드를 어디에 추가 했습니까? 코드를 공유 할 수 있습니까?
TheJeff

0

이것이 가장 쉬운 방법입니다.이 스크립트를 Podfile

포드 파일 :

post_install do |installer|
  installer.pods_project.targets.each do |target|
    next if target.product_type == "com.apple.product-type.bundle"
    target.build_configurations.each do |config|
      config.build_settings['CONFIGURATION_BUILD_DIR'] = '$PODS_CONFIGURATION_BUILD_DIR'
    end
  end
end

출처:

@IBDesignable에 대한이 해결 방법은 여기에서 찾을 수 있습니다. https://github.com/CocoaPods/CocoaPods/issues/5334

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.