最近Xcode 8にアップグレードしましたが、ストーリーボードに問題があります。
プロジェクトを開いてストーリーボードを開いていない場合は、コンパイルして問題なく実行できます。ストーリーボードを開くと、以下に示すようにIB Designablesに関する複数のエラーが発生します。
これらのビューは、カスタムビューを使用している唯一のビューでTextFieldEffects
ありBEMCheckbox
、Cocoapodsを使用してインポートしました。
最近Xcode 8にアップグレードしましたが、ストーリーボードに問題があります。
プロジェクトを開いてストーリーボードを開いていない場合は、コンパイルして問題なく実行できます。ストーリーボードを開くと、以下に示すようにIB Designablesに関する複数のエラーが発生します。
これらのビューは、カスタムビューを使用している唯一のビューでTextFieldEffects
ありBEMCheckbox
、Cocoapodsを使用してインポートしました。
回答:
次のいずれかを試して原因を突き止めることができます。
IBDesignablesAgentCocoaTouch
このディレクトリでログを
探して、~/Library/Logs/DiagnosticReports
原因を確認してください。注:カタリナのユーザーの場合:
IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash
@IBDesignable UIView
ストーリーボードでを選択して、エディター->選択したビューをデバッグに移動し、スタックトレースを確認します。
Derive Dataフォルダーを削除します。
Xcode Preference -> Location -> Derived Data
/Users/YourMacName/Library/Developer/Xcode/DerivedData
クリーンプロジェクトShift
+ Command
+ Alt
+ K
。
プロジェクトをビルドしますCommand
+ B
。
Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'
。その代わりに、そのIBDesignablesAgentCocoaTouch
プロセス呼び出しを知りませんinit(frame:)
でしたinit?(coder aDecoder:)
。
init(frame:)
UIButtonサブクラスに実装した後はすべて順調でした
私は次のようにして問題を解決しました:
File > Workspace settings
ます。DerivedData
フォルダーの場所でFinderアプリが開きます。DerivedData
フォルダ内に移動し、プロジェクトに対応するフォルダを削除します。Editor > Refresh all views
ます。更新しました
時には直接Editor > Refresh all views
仕事に直接行く。Refresh all views
が無効になっている場合は、Xcodeを終了して再試行してください。
失敗したビューを削除し、command + Zを押して削除を元に戻します。わたしにはできる。
失敗したビューを後で編集すると、エラーが再び発生する可能性があります。上記を再度実行してください。
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
s work for me, you should add
コードの最後まで終了します。
次のコードを@IBDesignable
クラスに追加するとうまくいきました。
override init(frame: CGRect) {
super.init(frame: frame)
}
UITextView
。(1)init(frame: CGRect, textContainer: NSTextContainer?)
、(2)init?(coder aDecoder: NSCoder)
。その後、再構築して警告(エラー)がなくなりました。ビルドフォルダーをクリーンアップする必要すらありません。
私のように、そのIBDesignablesAgentCocoaTouch
ファイルが見つからない場合、またはエディターから「選択したビューをデバッグ」しようとするとエラーが発生する場合、「レンダリングに失敗しました」というエラーをデバッグする別の方法を次に示します。
「コンソール」アプリを開き、サイドバーから現在のMacを選択し(おそらくデフォルトで自動選択されます)、検索バーで「IBSceneUpdate」を検索してEnterキーを押します。
このように、Xcodeエラーが発生するたびに、 IBDesignable
レンダリングできない、エラーの詳細が記載された新しい「IBSceneUpdate」エントリも取得されます。
それは少なくとも私がデバッグすることができた方法です IBDesignable
エラーです!
カスタムuiviewにxibファイルを使用している場合。これを試して:
から変更する
Bundle.main.loadNibNamed("UserView", owner: self, options: nil)
に:
let bundle = Bundle(for: UserView.self)
bundle.loadNibNamed("UserView", owner: self, options: nil)
ストーリーボードで使用されるカスタムビューに使用する可能性のあるすべてのxibファイルに対して、[特性の変化を使用する](IDとタイプのパネル)を無効にしてみてください。
クラッシュレポートを確認する
~/Library/Logs/DiagnosticReports
別の方法:
Spotlight
console.app
Crash reports
IBDesignablesAgent-iOS
クラッシュログを確認して確認するこれをデバッグすると、UIを変更しているクラスがいくつかあることがわかりました。通常、UILabelのサブクラスであるmarquelabel、または実行時にUIViewを描画してUIを描画し、Autolayoutエンジンと衝突する他のクラス。これらのカスタムビューに固定幅または高さを指定してください。それでも問題が解決しない場合は、次の解決策を試してください。
解決策1: -ポッドファイル内の#use_frameworksのコメントを外します。
解決策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() {
}
}
重要:新しいクラスを、デザイン可能アイテムを使用しているアイテムに必ず追加してください。
これは私にとって最も簡単な方法です。このスクリプトを 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にあります。