programing

Xcode 8 - IB Designables - 자동 레이아웃 상태 렌더링 및 업데이트 실패, 에이전트 충돌

megabox 2023. 6. 8. 19:34
반응형

Xcode 8 - IB Designables - 자동 레이아웃 상태 렌더링 및 업데이트 실패, 에이전트 충돌

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

프로젝트를 열었을 때 스토리보드를 열지 않으면 컴파일되어 정상적으로 실행됩니다.스토리보드를 열면 아래와 같이 IB Designables에 대한 여러 오류가 발생합니다.

여기에 이미지 설명 입력

은 이보다음사정용보사보의 사용자 입니다.TextFieldEffects그리고.BEMCheckboxCocoapods를 사용하여 가져온 것입니다.

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

  1. IBDesignablesAgentCocoaTouch 디렉토리에 ~/Library/Logs/DiagnosticReports원인을 확인합니다.

참고: 카탈리나를 사용하는 사용자의 경우: 다음을 찾습니다.IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. Editor > -> Debug Selected View (선택된 보기 디버그)로 합니다.@IBDesignable UIView스토리보드에서 스택 추적을 확인할 수 있습니다.

  2. 파생 데이터 폴더를 삭제합니다.

    Xcode Preference -> Location -> Derived Data
    /Users/YourMacName/Library/Developer/Xcode/DerivedData
    
  3. Shift + Command + Alt + K.

  4. Command + B.

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

  1. 에 가다File > Workspace settings.
  2. 파생 데이터 옆의 작은 오른쪽 화살표를 클릭합니다. Finder 앱이 Finder 위치에서 .DerivedData폴더를 누릅니다.
  3. 안으로 들어가세요.DerivedData폴더를 선택한 후 프로젝트에 해당하는 폴더를 삭제합니다.
  4. Xcode를 종료하고 다시 엽니다.
  5. 프로젝트를 정리합니다.
  6. 프로젝트를 빌드합니다.
  7. 스토리보드를 엽니다.
  8. 에 가다Editor > Refresh all views.

업데이트됨

가끔은 그냥 직접적으로.Editor > Refresh all views일했다.한다면Refresh all views를 사용할 수 없습니다. Xcode를 종료하고 다시 시도하십시오.

실패한 보기를 삭제하고 command+Z를 눌러 삭제를 취소합니다.저한테는 효과가 있어요.

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

이 문제는 코코아 포드 1.5.0에서 해결되었습니다.이 오류가 표시되면 포드를 다시 설치하거나(포드 설치를 다시) 대신 코코아 포드 1.4.0을 사용할 수 있습니다.1.4.0에서 잘 작동합니다(적어도 저는 그렇습니다).

업데이트:

다음 스크립트를 포드 파일에 추가하면 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

에 다음 하는 중@IBDesignable학급이 그 묘기를 부렸습니다.

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

사용자 정의 보기에 xib 파일을 사용하는 경우.사용해 보십시오.

에서 변경

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

받는 사람:

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

나처럼 그런 걸 찾을 수 없는 사람은IBDesignablesAgentCocoaTouch파일 또는 Editor에서 '선택한 보기 디버깅'을 시도할 때 오류가 발생하면 "렌더링 실패" 오류를 디버깅할 수 있는 다른 방법이 있습니다.

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

이런 식으로, 당신이 Xcode 오류를 얻을 때마다IBDesignable렌더링할 수 없는 경우 오류에 대한 자세한 내용이 포함된 새 "IBSceneUpdate" 항목이 표시됩니다.

적어도 그것이 제가 디버그할 수 있었던 방법입니다.IBDesignable오류!

IBSceneUpdate 오류를 표시하는 콘솔 앱

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

파생된 데이터 폴더에서 폴더(이 프로젝트와 관련된)를 삭제하여 문제를 해결했습니다.

이 작업은 다음을 통해 수행할 수 있습니다.

  1. 메뉴 클릭파일 → 프로젝트 설정

  2. 화살표 기호 deside /Users/.../Xcode/DerivedData를 클릭합니다.

  3. DerivedData 폴더를 클릭합니다.프로젝트 이름이 폴더로 표시됩니다.삭제합니다.

  4. Xcode를 종료한 다음 프로젝트를 엽니다.

  5. Product → Clean을 사용하여 프로젝트를 청소합니다.

  6. 그런 다음 프로젝트 구축: 제품빌드

이렇게 하면 이러한 문제가 해결됩니다.

@Maria가 제공한 정답:

:~/Library/Logs/DiagnosticReports

다른 방법:

  1. 스포트라이트 열기

    여기에 이미지 설명 입력

  2. console.app을 입력합니다.

    여기에 이미지 설명 입력

  3. 충돌 보고서 선택

    여기에 이미지 설명 입력

  4. 다음에 대한 하나 확인IBDesignablesAgent-iOS 충돌

저는 깨끗하게 노력했고 프로젝트를 운영한다고 해서 이 문제가 해결되지는 않을 것입니다.

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

스토리보드를 열기만 하면 됩니다. -> 편집기 -> 모든 보기를 새로 고칩니다.이 일은 나에게 효과가 있습니다.

저도 같은 문제가 있어서 무슨 일이 일어났는지 알아내려고 여기에 왔습니다.나는 IB Designable이 로그 폴더에 존재하지 않고 이미 다른 모든 옵션을 시도했지만 댓글에서 누군가 프레임에 대해 이야기하는 것을 발견했기 때문에 최상위 답변과 답변 자체가 나에게 도움이 되지 않는다는 것을 알게 되었습니다.

저는 제 IB Designable 확장에 대해 UIView에 코멘트를 달기로 결정했고 문제가 즉시 해결되었습니다.따라서 이 문제를 해결하려면 문제의 원인이 되는 확장을 찾고 IBDesignable 클래스를 만들고 다음과 같이 필수 이니셜라이저를 제공하여 필요한 확장을 설정해야 합니다.

@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() {
}
}

중요: 디자인 가능한 항목을 사용하는 항목에 새 클래스를 추가해야 합니다.

디버깅을 해보니 UI를 수정하는 클래스가 몇 개 있습니다.일반적으로 UILabel의 하위 클래스 또는 UIView를 분류하고 런타임에 UI를 그려 자동 레이아웃 엔진과 충돌하는 다른 클래스의 하위 클래스인 Marquel 레이블입니다.이러한 사용자 정의 보기에 고정된 너비 또는 높이를 지정합니다.문제가 해결되지 않으면 다음 해결 방법을 사용해 보십시오.

솔루션 1: 포드 파일 내의 주석 #use_frameworks.

솔루션 2: 파생 데이터 삭제 시도

  1. Xcode의 Editor 창을 닫고 시뮬레이터를 종료합니다.
  2. Xcode 기본 설정 → 위치로 이동
  3. 파생된 데이터 경로를 나타내는 작은 회색 화살표를 클릭합니다.
  4. 프로젝트 선택
  5. 내부의 모든 폴더 삭제
  6. Xcode를 종료하고 다시 열기

내 @IBDesignable 클래스에서 색상에 대한 사용자 지정 클래스를 사용하고 @IBDesignable 클래스의 속성인 색상을 강제로 풀었기 때문에 충돌했습니다.

그래서 당신은 그것을 찾아야 합니다.IBDesignablesAgent-iOS_[Date]_[YourMac].crash~/Library/Logs/DiagnosticReports이 위치에서 충돌의 원인을 확인할 수 있습니다.

이제 당신은 존경받는 파일을 확인해야 합니다.

동일한 오류 발생:UITextField를 사용자 지정하고 인터페이스 작성기를 사용한 경우 콘솔의 오류는 "CustomField" 클래스에 대해 "init(frame:)" 미구현 이니셜라이저 사용

오류 수정을 위한 이니셜라이저 추가

최신 XCode 버전으로 업데이트한 후 이 문제에 직면했습니다.위에서 설명한 여러 솔루션을 사용해 본 결과, 저는 꽤 Xcode를 실행한 다음 시스템을 종료하고 전원을 켰고 그것이 저에게 효과가 있었습니다.

저의 경우 해당 오류가 발생하는 클래스를 사용하고 있었기 때문에 이 문제에 직면했습니다.그것을 사용하지 마세요. 그러면 문제가 해결될 것입니다!

이것이 제가 사용하던 수업이었습니다.UIView로 변경했더니 오류가 사라졌습니다.

여기에 이미지 설명 입력

필요한 내용을 변경한 후 스토리보드 또는 .xib를 "XCode 7"에서 열도록 변경하고 저장한 후 닫습니다.이는 오류를 해결하기 위한 정지 간격 측정에 불과하지만 궁극적으로는 오류를 수정하거나 더 이상 해결할 수 없을 때까지 이 작업을 수행해야 합니다.

저 같은 경우에는 도서관을 이용하고 있었는데, 도서관은 하위 분류였습니다.UIView그것은 사용했습니다.IB_DESIGNABLE그리고 전화를 놓쳤습니다.[super awakeFromNib]이 메서드에 호출을 추가하면 버그가 사라집니다.

그 일을 실행하고 있었다는 사실이IB_DESIGNABLE여기에 영향을 미쳤습니다.

이것이 나에게 가장 쉬운 방법입니다: 이 스크립트를 당신의 컴퓨터에 추가합니다.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 에서 확인할 수 있습니다.

나에게 그것은 스토리보드의 잘못된 글꼴 이름 때문이었습니다.글꼴 이름을 수정하여 문제를 해결했습니다.

아래 변경 사항을 삭제하면 문제가 해결됩니다.

잘못된 글꼴

Xcode를 종료하고 다시 시작하려는 나의 첫 시도가 도움이 되었습니다.

그래서 그것은 약간의 일 대신에 쉬운 빠른 수정입니다,-)

언급URL : https://stackoverflow.com/questions/39732312/xcode-8-ib-designables-failed-to-render-and-update-auto-layout-status-the-a

반응형