Xcode 8 - IB Designables - Otomatik düzen durumu işlenemedi ve güncellenemedi, Aracı çöktü


167

Son zamanlarda Xcode 8'e geçtim ve Storyboard ile ilgili sorunlar yaşıyorum.

Projeyi açarsam ve Storyboard'um açık değilse, derlenir ve iyi çalışır. Storyboard'u açtıktan sonra, aşağıda gösterildiği gibi IB Designables hakkında birden fazla hata alıyorum.

resim açıklamasını buraya girin

Bu görünümler elde özel görünümler kullanan tek pozisyondur TextFieldEffectsve BEMCheckboxben Cocoapods kullanılarak içe olduğunu.


Belki de kullandığınız Pod'un deposunu kontrol edin ve bu sorunun diğer kullanıcılar arasında yaygın olup olmadığını görün?
Zolnoor

Bununla ilgili herhangi bir cevap var mı?
Mohsin Khubaib Ahmed

1
Herhangi bir çözüm buldunuz mu?
daldırma

Dikkat edin, sorun gömülü bir kütüphane için bir FAT YAPI İHTİYACINIZ olabilir . benim örneğimde Swifter gömülmüştü. Doğal olarak, bir yağ yapısı (geliştirme için - simülatör / telefon) ve sadece bir telefon yapımı (uygulama mağazası, sadece telefon için) ve TestFlight'a göndermek için gerektiğinde sadece telefona takas edersiniz. projede sadece telefon kütüphanesi vardı !!!!! Doh! "Doğru" yağ ile değiştirilmesi sorunu çözdü.
Fattie

Yanıtlar:


179

Nedeni bulmak için aşağıdakilerden birini deneyebilirsiniz:

  1. IBDesignablesAgentCocoaTouchbu dizindeki günlükleri arayın : ~/Library/Logs/DiagnosticReportsve nedenini görün.

Not: Catalina kullanan kullanıcılar için: IBDesignablesAgent-iOS_<DATE>-<MAC_NAME>.crash

  1. @IBDesignable UIViewFilm şeridinizde seçiminizi yaparken Editör -> Seçilen Görünümde Hata Ayıkla'ya gidin ve yığın izlemesini görün.

  2. Derive Data klasörünü sil.

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

  4. Projenizi oluşturun Command + B .


35
Bu yaklaşımı kullanarak bunun nedenini bulabildim Fatal error: Use of unimplemented initializer 'init(frame:)' for class 'TestIBKit.Button'. Bunun yerine IBDesignablesAgentCocoaTouchsüreç çağrılarını bilmiyordum . init(frame:)init?(coder aDecoder:)
Yevhen Dubinin

5
@YevhenDubinin Teşekkür ederim, bu bana yardımcı oldu. init(frame:)UIButton alt sınıfımda uygulandıktan sonra her şey yolundaydı
doraemon

2
Bu sorunumu düzeltti, ancak türetilmiş verileri silmeden önce xCode'dan çıkmak zorunda kaldım
Husam

2
en iyi cevap başlangıcı (çerçeve :) ortak sorun
Michał Ziobro

1
Xcode çıkın ve DerivedData temizleyin. Sorunu çözdü.
Mubashar

80

Sorunu aşağıdakileri yaparak çözdüm:

  1. Adresine gidin File > Workspace settings.
  2. "Türetilmiş veriler" in yanındaki küçük sağ oku tıklayın. Bu, DerivedDataklasör konumunda Finder uygulamasını açar .
  3. DerivedDataKlasörün içine gidin ve projenize karşılık gelen klasörü silin.
  4. Xcode'dan çıkın ve yeniden açın.
  5. Projenizi temizleyin shiftcommandk.
  6. projenizi oluşturun commandb.
  7. Film şeridinizi açın.
  8. Adresine gidin Editor > Refresh all views.

Güncellenmiş

Bazen doğrudan Editor > Refresh all viewsişe git . Eğer Refresh all viewsdevre dışı, Xcode çıkıp tekrar deneyin.


Bunu gönderdiğiniz için teşekkür ederiz. Bir "eski okul" komut satırı türetilmiş veri silme yaptım, ama sorun devam etti. Metodunu kullanmak benim için problemi çözdü.
Adrian

Benim için kazanmak için tüm görüşlerini yenile. Teşekkürler!
Mike K.7

56

Sadece başarısız olan görünümü siliyorum ve silme işlemini geri almak için command + Z tuşlarına basın. Benim için çalışıyor.

Başarısız görünümü daha sonra düzenlerseniz hata tekrar oluşabilir, yukarıdakileri tekrar yapın.


6
Bu çok saçma ama işe yaradı.
Ansari

1
Korku veren !! Benim için çalıştı
Nupur Sharma

1
Bunun cevabı olabileceğini kim bilebilir. Hala inanamadım
Asad Amodi

37

Bu sorunla CocoaPod 1.5.0'da karşılaştım. Çözüm, bu hatayı gösterdikten sonra podu tekrar kurmak (pod install tekrar) veya bunun yerine CocoaPod 1.4.0'ı kullanabilirsiniz. 1.4.0'da iyi çalışıyor (en azından benim için.)

Güncelleme:

Podfile'da aşağıdaki komut dosyasını ekle 1.5.0'daki sorunu çözmeme yardımcı olun

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

başvuru: https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911


100 doğru. 1.4.0 sürümüne geçme sorunu benim için çözdü.
ale_stro

4
Çalıştı, 1.5.0 bakla.
Andrey Oshev

3
o s work for me, you should add kodun son Sonu '.
Mehdi

1
Benim için de çalıştı. Diğer tüm önerileri başarılı olmadan denedim. Pod.1.3.1
Sal

18

Sınıfıma aşağıdaki kodu eklemek @IBDesignablehile yaptı.

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

Bu benim için çalışıyor. Aslında, genişletmek için iki geçersiz kılma ekledim UITextView. (1) init(frame: CGRect, textContainer: NSTextContainer?), (2) init?(coder aDecoder: NSCoder). Sonra yeniden inşa ve uyarı (hata) gitti. Yapı klasörünü temizlemeye bile gerek yok.
John Pang

Teşekkürler! İyi cevap)
JiosDev

13

Bu IBDesignablesAgentCocoaTouchdosyayı bulamayan veya Editör'den 'Seçili Görünümlerde Hata Ayıkla' çalışırken bir hata alırsa, bu "Oluşturulamadı" hatalarında hata ayıklamanın başka bir yolu.

'Konsol' uygulamasını açın, kenar çubuğundan mevcut Mac'inizi seçin (muhtemelen varsayılan olarak otomatik olarak seçilecektir) ve ardından arama çubuğunda "IBSceneUpdate" i arayın ve enter tuşuna basın.

Bu şekilde, IBDesignableişlenemediği için her Xcode hatası aldığınızda, hata hakkında daha fazla ayrıntı içeren yeni bir "IBSceneUpdate" girişi alırsınız.

En azından IBDesignablehatalarımı bu şekilde ayıklayabildim !

IBSceneUpdate hatalarını gösteren konsol uygulaması


1
Uygulama sadece FYI gibi Terminal yerine gerçek Konsol.
Carl Upton

İyi yakalama! Cevabımı düzenledi.
Stelabouras

12

Özel uiview için xib dosyası kullanıyorsanız. Bunu dene:

Şundan değiştir

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

Kime:

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

8

Film şeridinizde kullanılan özel görünümler için sahip olabileceğiniz herhangi bir xib dosyası için 'Özellik Varyasyonlarını Kullan'ı (Kimlik ve Tür paneli) devre dışı bırakmayı deneyin.


7

benim sorun türetilmiş veri klasöründen (bu proje ile ilgili) klasörleri silerek çözüldü. bunu Dosya -> Proje Ayarı -> öğesini tıklatarak /Users/.../Xcode/DerivedData öğesini tıklatarak projenin adlı klasörlerin bunları sildiğini göreceksiniz. xcode projenizi açmak için çıkın, bu adımı kullanarak projeyi temizleyin Product-> clean sonra projeyi derleyin: Product-> Build Bunlar bu sorunları çözecektir.


4

@Maria tarafından verilen doğru cevap :

çökme raporunu kontrol et ~/Library/Logs/DiagnosticReports

Alternatif yol :

  1. açık Spotlight

resim açıklamasını buraya girin

  1. tip console.app

resim açıklamasını buraya girin

  1. seçmek Crash reports

resim açıklamasını buraya girin

  1. birini kontrol et IBDesignablesAgent-iOSve kilitlenme günlüğünü gözden geçir

Konsolumu kullanmak sorunumu çözmeme yardımcı oldu. Xcode'dakinden çok daha ayrıntılı mesajlar.
Andrew Moore


3

Temizlemeyi denedim ve projeyi bu sorunu çözmeyecek şekilde çalıştırdım.

Ancak Kapat ve yeniden açtı proje.


2

Ne zaman bu hata ayıklama UI değiştiren bazı sınıflar olduğunu öğrendim. Genellikle UILabel'in bir alt sınıfı veya UIView'in başka bir sınıf alt sınıfı olan ve çalışma zamanında UI çizim ve Autolayout motoru ile çarpışan bir marka etiketi. Bu özel görünümler için sabit genişlik veya yükseklik vermeyi deneyin. Sorununuzu çözmezse Aşağıdaki çözümleri deneyin: -

1.Çözüm : - Pod dosyanızın içindeki #use_frameworks komutunu kaldırın.

Çözüm 2: - Türetilmiş verileri silmeyi deneyin

  1. Xcode'unuzun Editör penceresini kapatın ve simülatörden çıkın ->
  2. Xcode Tercihleri ​​-> Konumlar ->
  3. Türetilmiş veri yolunu gösteren küçük gri oku tıklayın ->
  4. Projenizi seçin ->
  5. İçindeki tüm klasörleri sil ->
  6. Xcode'dan çıkın ve yeniden açın

1
Bunun sorunu nasıl çözdüğünü açıklayabilir misiniz?
Paula Hasstenteufel

Bu sorunu çözdü ama hala bilmiyorum neden kullanımı_çerçeveler uncoment çünkü hızlı proje hakkı için şu
Abhishek

Pod dosyam zaten çerçeveler kullanıyor, bunu uncommenting geçmiş herhangi bir öneri?
mmr118

@ moni15 Bir olası çözüm daha ekledim. Lütfen kontrol edin.
Ashish Pisey

Pod dosyasında #use_frameworks öğesinin kaldırılması ve DerivedData'nın temizlenmesi benim için çalıştı.
Jugal Desai

2

Aynı sorunu yaşadım ve ne olduğunu anlamaya çalışmak için buraya geldim. En yüksek puanlı yanıtı fark ettim ve cevabın kendisi bana yardımcı olmadı, çünkü IBDesignable günlük klasöründe yoktu ve orada diğer tüm seçenekleri denedim, ancak yorumlarda birisinin bir çerçeve başlangıcı hakkında konuştuğunu fark ettim.

UIView için IBDesignable uzantımı yorumlamaya karar verdim ve bu sorunu anında düzeltti. Bu nedenle, bunu düzeltmek için soruna neden olan uzantıyı bulun ve IBDesignable sınıfı oluşturarak ve gerekli başlatıcıları aşağıdaki gibi sağlayarak gerekli girişleri ayarladığınızdan emin olun:

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

ÖNEMLİ: tasarlanabilen öğeyi kullandığınız öğeye yeni sınıf eklemeyi unutmayın.


1
Belgelerinde belirtildiği gibi, preparForInterfaceBuilder () uygulamanızda super.prepareForInterfaceBuilder () öğesini çağırmayı unutmayın.
Jaime S

1

Aynı Hatayla Karşılaştı: UITextField özelleştirildi ve arayüz oluşturucu kullanıldı, konsoldaki hata "CustomField" sınıfı için eklenmemiş başlatıcı 'init (frame :)' kullanıldı

Hatayı düzeltmek için başlatıcı eklendi


1

En son XCode sürümüne güncelledikten sonra bu sorunla karşı karşıya kaldım.Yukarıda açıklanan çoklu çözümü denedikten sonra, sadece oldukça Xcode ve sonra sistemi kapatıp açtım ve bu benim için çalıştı.


0

Gerekli değişiklikleri yaptıktan sonra, film şeridini veya benim durumumda "XCode 7" de açmak, kaydetmek ve kapatmak için bir .xib dosyasını değiştirin. Bu sadece hataları gidermek için bir durma boşluğu ölçüsüdür, ancak sonuçta bunları artık çözemezsiniz veya artık yapamayacaksınız.


0

Benim durumumda, alt sınıf olan bir kütüphane kullanıyordum UIView. Kullanıyordu IB_DESIGNABLEve çağrı eksikti [super awakeFromNib]. Bu yöntemin çağrısını ekledikten sonra hata ortadan kalktı.

Uygulamasının gerçekte bunun IB_DESIGNABLEbir etkisi olup olmadığından emin değilim .


[Super awakeFromNib] kodunu nereye eklediniz? Kodunuzu paylaşabilir misiniz?
TheJeff

0

Bu benim için en kolay yol: bu betiği 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

Kaynak:

@IBDesignable için bu geçici çözümü şu adreste bulabilirsiniz: https://github.com/CocoaPods/CocoaPods/issues/5334

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.