Xcode 8 - IB Designables - Gagal membuat dan memperbarui status tata letak otomatis, Agen macet


167

Baru-baru ini saya meningkatkan ke Xcode 8 dan saya mengalami masalah dengan Storyboard.

Jika saya membuka proyek dan saya tidak memiliki Storyboard terbuka, itu akan dikompilasi dan berjalan dengan baik. Setelah saya membuka Storyboard, saya mendapatkan banyak kesalahan tentang IB Designables seperti yang ditunjukkan di bawah ini.

masukkan deskripsi gambar di sini

Tampilan ini adalah satu-satunya tampilan yang menggunakan tampilan kustom dari TextFieldEffectsdan BEMCheckboxyang saya impor menggunakan Cocoapods.


Mungkin memeriksa repositori untuk Pod yang Anda gunakan dan melihat apakah masalah ini lazim di antara pengguna lain?
Zolnoor

Adakah jawaban yang relevan untuk ini?
Mohsin Khubaib Ahmed

1
apakah kalian menemukan solusi?
celup

Awas, masalahnya bisa ANDA BUTUHKAN FAT BUILD untuk pustaka yang disematkan . dalam contoh saya, saya memiliki Swifter tertanam. Secara alami Anda tetap memiliki build yang gemuk (untuk pengembangan - simulator / telepon) dan build yang hanya untuk ponsel (untuk app store, hanya untuk ponsel) dan Anda hanya bertukar ke ponsel yang hanya dibutuhkan jika diperlukan untuk mengirim ke TestFlight dll. Saya masih memiliki perpustakaan khusus telepon di proyek !!!!! Doh! Bertukar dengan lemak "benar" pada masalah yang diperbaiki.
Fattie

Jawaban:


179

Anda dapat mencoba salah satu dari yang berikut untuk mencari tahu penyebabnya:

  1. cari IBDesignablesAgentCocoaTouchlog di direktori ini: ~/Library/Logs/DiagnosticReportsdan lihat penyebabnya.

Catatan: untuk pengguna dengan Catalina: cari IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. Pergi ke Editor -> Debug Selected View sambil memilih Anda @IBDesignable UIViewdi storyboard Anda, dan lihat jejak stack.

  2. Hapus folder Turunkan Data.

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

  4. Bangun proyek Anda Command + B .


35
Dengan menggunakan pendekatan ini saya dapat mengetahui bahwa alasannya adalah Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'. Saya tidak tahu IBDesignablesAgentCocoaTouchproses itu memanggil init(frame:), bukan init?(coder aDecoder:).
Yevhen Dubinin

5
@YevhenDubinin Terima kasih, ini membantu saya. Semuanya baik-baik saja setelah saya laksanakan init(frame:)di subclass UIButton saya
doraemon

2
Ini memperbaiki masalah saya, Tapi saya harus berhenti xCode sebelum menghapus data turunan
Husam

2
init jawaban terbaik (bingkai :) adalah masalah umum
Michał Ziobro

1
Keluar dari xcode dan hapus DerivedData. Itu memecahkan masalah.
Mubashar

80

Saya memecahkan masalah dengan melakukan hal berikut:

  1. Pergi ke File > Workspace settings.
  2. Klik panah kanan kecil di sebelah "Data yang diturunkan". Ini membuka aplikasi Finder di lokasi DerivedDatafolder.
  3. Masuk ke dalam DerivedDatafolder, dan hapus folder yang sesuai dengan proyek Anda.
  4. Keluarlah dari Xcode, dan buka kembali.
  5. Bersihkan proyek Anda shiftcommandk.
  6. bangun proyek Anda commandb.
  7. Buka papan cerita Anda.
  8. Pergi ke Editor > Refresh all views.

Diperbarui

Terkadang langsung saja Editor > Refresh all viewsbekerja. Jika Refresh all viewsdinonaktifkan, keluarlah dari Xcode dan coba lagi.


Terima kasih telah memposting ini. Saya melakukan penghapusan baris perintah "old school" dari data yang diturunkan, tetapi masalahnya tetap ada. Menggunakan metode Anda menyelesaikan masalah bagi saya.
Adrian

Segarkan semua tampilan untuk kemenangan bagi saya juga. Terima kasih!
Mike K.

56

Saya hanya menghapus tampilan yang gagal dan tekan perintah + Z untuk membatalkan penghapusan. Ini bekerja untuk saya.

Jika mengedit tampilan gagal nanti, kesalahan dapat terjadi lagi, lakukan di atas lagi.


6
Ini konyol tetapi Berhasil.
Ansari

1
Hebat !! Bekerja untuk saya
Nupur Sharma

1
Siapa tahu itu bisa menjadi jawabannya.
Berhasil

37

Saya menghadapi masalah ini di CocoaPod 1.5.0. Solusinya adalah menginstal ulang pod lagi (pod install lagi) setelah kesalahan ini muncul atau Anda dapat menggunakan CocoaPod 1.4.0 sebagai gantinya. Ini berfungsi dengan baik di 1.4.0 (setidaknya untuk saya.)

memperbarui:

Tambahkan skrip berikut di Podfile membantu saya memecahkan masalah di 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

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


100% benar. downgrade ke 1.4.0 menyelesaikan masalah untuk saya.
ale_stro

4
Bekerja, 1,5.0 pod.
Andrey Oshev

3
itu s work for me, you should add berakhir` ke terakhir kode.
mahdi

1
Bekerja untuk saya juga. Mencoba semua saran lain tanpa hasil. Diuji dengan Pods 1.3.1
Sal

18

Menambahkan kode berikut ke @IBDesignablekelas saya berhasil.

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

Ini bekerja untuk saya. Bahkan, saya menambahkan dua override untuk memperpanjang UITextView. (1) init(frame: CGRect, textContainer: NSTextContainer?), (2) init?(coder aDecoder: NSCoder). Kemudian bangun kembali dan peringatan (kesalahan) hilang. Bahkan tidak perlu membersihkan folder build.
John Pang

Terima kasih! Jawaban yang bagus)
JiosDev

13

Bagi siapa pun - seperti saya - yang tidak dapat menemukan IBDesignablesAgentCocoaTouchfile itu atau ketika mencoba 'Debug Selected Views' dari Editor mendapat kesalahan, berikut ini cara lain untuk men-debug kesalahan "Gagal membuat" itu.

Buka aplikasi 'Konsol', dari bilah sisi pilih Mac Anda saat ini (mungkin akan dipilih secara otomatis), kemudian pada bilah pencarian cari "IBSceneUpdate" dan tekan enter.

Dengan cara ini, setiap kali Anda mendapatkan kesalahan Xcode untuk IBDesignable tidak dapat melakukan render, Anda juga akan mendapatkan entri "IBSceneUpdate" baru dengan detail lebih lanjut tentang kesalahan tersebut.

Setidaknya itulah bagaimana saya bisa men-debug IBDesignablekesalahan saya !

Aplikasi konsol menampilkan kesalahan IBSceneUpdate


1
Aplikasi ini adalah Konsol sebenarnya daripada Terminal hanya sebagai FYI.
Carl Upton

Tangkapan yang bagus! Sunting jawaban saya.
Stelabouras

12

Jika Anda menggunakan file xib untuk uiview khusus. Coba ini:

Ubah dari

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

Untuk:

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

8

Cobalah untuk menonaktifkan 'Gunakan Variasi Karakter' (panel Identitas dan Jenis) untuk file xib apa pun yang mungkin Anda miliki untuk tampilan kustom yang digunakan di storyboard Anda.


7

masalah saya diselesaikan dengan menghapus folder (yang terkait dengan proyek ini) dari folder data turunan. Anda dapat melakukan ini dengan mengklik File -> Project Setting -> kemudian klik tanda panah deside / Pengguna / .../Xcode/DerivedData klik folder DerivedData Anda akan melihat folder bernama proyek Anda menghapusnya. keluar dari xcode, buka proyek Anda, bersihkan proyek dengan menggunakan langkah ini Product-> clean lalu bangun proyek: Product-> Build Ini akan menyelesaikan masalah ini.


4

Jawaban yang benar diberikan oleh @Maria :

periksa laporan kerusakan di ~/Library/Logs/DiagnosticReports

Cara alternatif :

  1. Buka Spotlight

masukkan deskripsi gambar di sini

  1. Tipe console.app

masukkan deskripsi gambar di sini

  1. Pilih Crash reports

masukkan deskripsi gambar di sini

  1. periksa satu IBDesignablesAgent-iOSdan tinjau crash log

Menggunakan Konsol itulah yang membantu saya memecahkan masalah saya. Pesan yang jauh lebih terperinci daripada yang ada di Xcode.
Andrew Moore


3

Saya mencoba membersihkan dan menjalankan proyek tidak akan menyelesaikan masalah ini.

Tapi Tutup dan buka kembali proyek itu.


2

Ketika saya debug ini saya menemukan ada beberapa kelas yang memodifikasi UI. Biasanya marquelabel yang merupakan subclass dari UILabel atau kelas subclass lainnya dari UIView dan menggambar ui pada saat run time dan bertabrakan dengan mesin Autolayout. Coba berikan lebar atau tinggi tetap untuk tampilan khusus ini. Jika tidak menyelesaikan masalah Anda, coba solusi berikut: -

Solusi 1: - Batalkan komentar #use_frameworks di dalam file pod Anda.

Solusi 2: - Coba hapus data yang diturunkan

  1. Tutup jendela Editor Xcode Anda dan keluar dari simulator ->
  2. Pergi ke Preferensi Xcode -> Lokasi ->
  3. Klik panah abu-abu kecil yang menunjukkan jalur data turunan ->
  4. Pilih proyek Anda ->
  5. Hapus semua folder di dalam ->
  6. Keluarlah dari Xcode dan buka kembali

1
Bisakah Anda menguraikan bagaimana ini sebenarnya memecahkan masalah?
Paula Hasstenteufel

ini menyelesaikan masalah tetapi masih tidak tahu mengapa tidak menggunakan itu use_frameworks karena itu untuk proyek cepat benar
Abhishek

Podfile saya sudah menggunakan kerangka kerja, ada saran di masa lalu yang tidak memberi komentar?
mmr118

@ moni15 saya menambahkan satu solusi lagi yang mungkin. Silakan periksa.
Ashish Pisey

Membatalkan komentar #use_frameworks dalam file pod dan menghapus DerivedData bekerja untuk saya.
Jugal Desai

2

Saya memiliki masalah yang sama dan datang ke sini untuk mencoba dan mencari tahu apa yang terjadi. Saya perhatikan jawaban berperingkat teratas dan jawaban itu sendiri tidak membantu saya, karena IBDesignable tidak ada di folder log dan saya sudah mencoba semua opsi lain di sana, namun dalam komentar saya perhatikan seseorang berbicara tentang init bingkai.

Saya memutuskan untuk mencoba mengomentari ekstensi IBDesignable saya untuk UIView dan itu langsung memperbaiki masalah. Jadi, untuk memperbaiki ini, temukan ekstensi yang menyebabkan masalah dan pastikan untuk mengatur init yang diperlukan dengan membuat kelas IBDesignable dan menyediakan inisialisasi yang diperlukan sebagai berikut:

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

PENTING: ingatlah untuk menambahkan kelas baru ke item yang Anda gunakan pada yang dirancang.


1
Seperti yang dikatakan oleh dokumentasinya, jangan lupa untuk memanggil super.prepareForInterfaceBuilder () dalam implementasi Anda dari readyForInterfaceBuilder ().
Jaime S

1

Menghadapi Kesalahan yang sama: Jika mengkustomisasi UITextField dan menggunakan pembuat antarmuka, kesalahan di konsol adalah -Gunakan inisialisasi init yang tidak diimplementasikan '(frame :)' untuk kelas "CustomField"

Menambahkan penginisialisasi untuk memperbaiki kesalahan


1

Saya menghadapi masalah ini setelah pembaruan ke versi XCode terbaru. Setelah mencoba beberapa solusi yang dijelaskan di atas, saya hanya cukup Xcode dan kemudian mematikan sistem dan menyalakannya dan itu bekerja untuk saya.


0

Setelah Anda melakukan perubahan yang diperlukan, ubah storyboard atau dalam kasus saya a. Xib untuk membuka di "XCode 7", simpan dan tutup. Ini hanya penghentian kesenjangan ukuran untuk mengatasi kesalahan tetapi pada akhirnya Anda harus memperbaikinya atau melakukan ini sampai Anda tidak lagi mampu.


0

Dalam kasus saya, saya menggunakan perpustakaan yang subkelas UIView. Itu menggunakan IB_DESIGNABLE, dan tidak ada panggilan untuk [super awakeFromNib]. Setelah saya menambahkan panggilan ke metode ini, bug hilang.

Saya tidak yakin apakah fakta bahwa implementasi IB_DESIGNABLEitu berdampak dalam hal ini.


Di mana Anda menambahkan kode untuk [super awakeFromNib]? Bisakah Anda membagikan kode Anda?
TheJeff

0

Ini cara termudah bagi saya: tambahkan skrip ini ke blog Anda 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

Sumber:

Solusi untuk @IBDesignable ini dapat ditemukan di sini: https://github.com/CocoaPods/CocoaPods/issues/5334

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.