Xcode 8-IB Designables-自動レイアウトステータスのレンダリングと更新に失敗し、エージェントがクラッシュしました


167

最近Xcode 8にアップグレードしましたが、ストーリーボードに問題があります。

プロジェクトを開いてストーリーボードを開いていない場合は、コンパイルして問題なく実行できます。ストーリーボードを開くと、以下に示すようにIB Designablesに関する複数のエラーが発生します。

ここに画像の説明を入力してください

これらのビューは、カスタムビューを使用している唯一のビューでTextFieldEffectsありBEMCheckbox、Cocoapodsを使用してインポートしました。


使用しているポッドのリポジトリを確認して、この問題が他のユーザーに蔓延しているかどうかを確認してください。
Zolnoor

これに関連する答えはありますか?
Mohsin Khubaib Ahmed 2016

1
皆さんは回避策を見つけましたか?
ディップ

気をつけてください、問題は組み込みライブラリのために脂肪が必要になる可能性があります。私の例では、Swifterを組み込みました。当然、ファットビルド(開発用-シミュレーター/電話)と電話のみのビルド(アプリストア、電話のみ)を手元に置いておき、TestFlightなどに送信する必要がある場合は電話のみのビルドに交換するだけです。プロジェクトに電話専用ライブラリがあった!!!!! どー!「修正された」脂肪に交換して問題を修正しました。
Fattie

回答:


179

次のいずれかを試して原因を突き止めることができます。

  1. IBDesignablesAgentCocoaTouchこのディレクトリでログを 探して、~/Library/Logs/DiagnosticReports原因を確認してください。

注:カタリナのユーザーの場合: IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. @IBDesignable UIViewストーリーボードでを選択して、エディター->選択したビューをデバッグに移動し、スタックトレースを確認します。

  2. Derive Dataフォルダーを削除します。

    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 2017

5
@YevhenDubininありがとう、これは私を助けました。init(frame:)UIButtonサブクラスに実装した後はすべて順調でした
ドラえもん

2
これは私の問題を修正し、しかし、私は得られたデータを削除する前に、Xcodeのをやめなければならなかった
Husam

2
最良の回答のinit(フレームは:)一般的な問題である
の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を終了して再試行してください。


これを投稿していただきありがとうございます。派生データを「古い」コマンドラインで削除しましたが、問題は解決しませんでした。あなたの方法を使用することで、問題は解決しました。
エイドリアン

私にとっても勝利のためにすべてのビューを更新します。ありがとう!
マイクK.

56

失敗したビューを削除し、command + Zを押して削除を元に戻します。わたしにはできる。

失敗したビューを後で編集すると、エラーが再び発生する可能性があります。上記を再度実行してください。


6
そのばかげているが、それは働いた。
Ansari

1
驚くばかり!!私のために働いた
Nupur Sharma

1
それが答えになる可能性があることを誰が知っているか。それは私がまだ信じられないように働きました
アサド・アモディ

37

CocoaPod 1.5.0でこの問題に直面しました。解決策は、このエラーが表示されたらpodを再インストールする(pod installをもう一度)か、代わりに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 コードの最後まで終了します。
mahdi

1
私のためにも働いた。他のすべての提案を試みたが成功しなかった。ポッド1.3.1でテスト
Sal

18

次のコードを@IBDesignableクラスに追加するとうまくいきました。

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

これでうまくいきます。実際、を拡張するために2つのオーバーライドを追加しましたUITextView。(1)init(frame: CGRect, textContainer: NSTextContainer?)、(2)init?(coder aDecoder: NSCoder)。その後、再構築して警告(エラー)がなくなりました。ビルドフォルダーをクリーンアップする必要すらありません。
John Pang

ありがとう!良い答え)
JiosDev

13

私のように、そのIBDesignablesAgentCocoaTouchファイルが見つからない場合、またはエディターから「選択したビューをデバッグ」しようとするとエラーが発生する場合、「レンダリングに失敗しました」というエラーをデバッグする別の方法を次に示します。

「コンソール」アプリを開き、サイドバーから現在のMacを選択し(おそらくデフォルトで自動選択されます)、検索バーで「IBSceneUpdate」を検索してEnterキーを押します。

このように、Xcodeエラーが発生するたびに、 IBDesignableレンダリングできない、エラーの詳細が記載された新しい「IBSceneUpdate」エントリも取得されます。

それは少なくとも私がデバッグすることができた方法です IBDesignableエラーです!

IBSceneUpdateエラーを示すコンソールアプリ


1
アプリは、参考までに、ターミナルではなく実際のコンソールです。
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をクリックします。DerivedDataフォルダーをクリックします。xcodeを終了してプロジェクトを開き、この手順を使用してプロジェクトをクリーンアップします。製品->クリーンしてからプロジェクトをビルドします。製品->ビルドこれらはこの問題を解決します。


4

@Mariaが提供する正解

クラッシュレポートを確認する ~/Library/Logs/DiagnosticReports

別の方法

  1. 開いた Spotlight

ここに画像の説明を入力してください

  1. タイプ console.app

ここに画像の説明を入力してください

  1. 選択する Crash reports

ここに画像の説明を入力してください

  1. IBDesignablesAgent-iOSクラッシュログを確認して確認する

コンソールを使用することで、問題を解決できました。Xcodeのメッセージよりもはるかに詳細なメッセージ。
Andrew Moore


3

プロジェクトをクリーンアップして実行しても、この問題は解決しません。

しかし、プロジェクトを閉じて再開しました。


2

これをデバッグすると、UIを変更しているクラスがいくつかあることがわかりました。通常、UILabelのサブクラスであるmarquelabel、または実行時にUIViewを描画してUIを描画し、Autolayoutエンジンと衝突する他のクラス。これらのカスタムビューに固定幅または高さを指定してください。それでも問題が解決しない場合は、次の解決策を試してください。

解決策1: -ポッドファイル内の#use_frameworksのコメントを外します。

解決策2: -派生データを削除してみる

  1. Xcodeのエディターウィンドウを閉じて、シミュレーターを終了します->
  2. Xcode Preferences-> Locations->に移動します
  3. 派生データパスを示す小さな灰色の矢印をクリックします->
  4. プロジェクトを選択->
  5. 中のすべてのフォルダを削除->
  6. Xcodeを終了して再度開く

1
これが実際に問題を解決する方法について詳しく教えてください。
Paula Hasstenteufel

これは問題を解決しましたが、use_frameworksがなぜコメントしないのかはわかりません。それは、プロジェクトが迅速であるためです
Abhishek

私のPodfileはすでにフレームワークを使用していますが、コメントを外した後の提案はありますか?
mmr118 2017年

@ moni15私はもう1つの可能なソリューションを追加しました。チェックしてください。
Ashish Pisey 2017

ポッドファイルの#use_frameworksのコメントを外してDerivedDataをクリアするとうまくいきました。
Jugal Desai 2018

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

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.