SwiftUI ile çalışıyorsanız veya SwiftUI önizlemelerini henüz denediyseniz, bu can sıkıcı mesajı gördünüz: otomatik önizleme güncellemesi duraklatıldı. Bazı geliştiriciler için bu her zaman olur ve son derece sinir bozucudur.
Bu yazıda, bunun neden olduğunu ve nasıl çözülebileceğini açıklayacağım. Hadi kazalım!
Ne olduğunu anlamak için kırıntıları takip edelim.
Mesajı aldığımızda, (i) sembolü biraz daha bağlam sunar:
Automatic preview updating pauses when the preview file is edited in a way that causes the containing module to be rebuilt.
Bu biraz mantıklı. Bir modüldeki (örneğin uygulama modülünüz) herhangi bir kodu değiştirmek, normalde yeni değişiklikleri ürüne almak için yeniden oluşturmayı garanti eder. Ama neden aniden bir sorun oldu? Zaten öyle olmuyor mu? Anlaşıldı, hayır. Şimdi düzenleme işlerinin nasıl yaşanacağına bir göz atalım.
Görünüşe göre, bir önizlemeyi canlı olarak düzenlerken (olması gerektiği gibi çalıştığında), Xcode her değişiklikte modülü yeniden oluşturmaz.
Önizlemeler etkinleştirildiğinde, Xcode test için geçerli şemayı oluşturur . Sonraki değişiklikleri yaptığınızda, değişiklikleri tuvale yansıtacak bir yeniden oluşturma olmaz.
Swift, SwiftUI önizlemelerinin canlı değişikliklerini desteklemek için özel bir özelliğe sahiptir -
dynamic function replacement. Bunun için niteliktir
@_dynamicReplacement(for:). Bu özellik resmi evrim sürecinden geçmedi - SwiftUI'nin ilk açıklanmasından önce 2018'de tanıtıldı ve uygulandı .
struct MyStruct { dynamic func x() { print("x") } } extension SettingsRoute { @_dynamicReplacement(for: x()) func y() { print("y - replaced dynamically") } }
'Sıcak yeniden yükleme' dinamik değiştirme kullanılarak uygulandığından, sınırlamaları vardır:
Diğer değişiklikler dinamik değiştirme tarafından desteklenmez. Örneğin:
internala geçse bile
private)
SwiftUI önizlemelerinin gizli çalışmaları hakkında daha fazla bilgi edinmek istiyorsanız, Damian Malarczyk'in Behind SwiftUI Previews kitabını beğeniyorum.
Benim için, olayların neden olduğunu anlamak zaten hayal kırıklığını gidermeye yardımcı oluyor. Ama nasıl düzelteceğimizi görelim
Peki durumu iyileştirmek için ne yapabiliriz?
İlk olarak, kodumuzu daha dinamik değiştirmeye izin verecek şekilde yazabiliriz.
Ancak yine de önizlemelerin duraklatılması gereken birçok durum olacaktır. Bir düşünün, en çok neye kızıyoruz? Onları devam ettirmek zorunda! O halde bunu otomatikleştirelim.
Gördüğüm önizleme duraklamalarının en yaygın nedeni değişken bildirimleridir:
Başlangıç değerine sahip bir değişken bildiriminiz varsa, onu düzenlemek önizlemeleri duraklatacaktır:
var color = Color.red // change to Color.green, previews are paused
Bunu düzeltmek için hesaplanacak değişkeni değiştirin. Bu şekilde, düzenlendiğinde dinamik olarak değiştirilebilir:
var color: Color { Color.red }
Bunu hayal edin - kodda değişiklikler yapıyorsunuz ve önizlemeler duraklatılıyor. Önizlemeleri devam ettirmeye çalışıyorsunuz - başarısız oluyorlar. Muhtemelen yapı hatalarından kaynaklanmaktadır, ancak hatalar her zaman düzgün bir şekilde ortaya çıkmaz. Belki test kodunu değiştirmeyi unuttunuz - oradaki hatalar da önizlemelerin başarısız olmasına neden olur (çünkü önizlemeler test için oluşturulmuştur).
Bunu çözmenin en iyi yolunu bulmak için bir adım geri gittim. Kod değişikliklerimizi normal şekilde doğrulamak için ne yapıyoruz? İnşa ederiz veya çalıştırırız. Sonra ya daha fazla derleme hatası alırız ve onları düzeltmeye devam ederiz ya da hepsi başarılı olur ve mutlu oluruz.
Başarılı bir derlemeden sonra önizlemelerin otomatik olarak devam etmesi gerektiğini düşündüm. Ve şimdiye kadar benim için oldukça iyi çalışıyor.
Xcode'da önizlemeleri devam ettirmenin programlı bir yolunu bulamadım, ancak klavye kısayolunu tetikleyebiliriz.
Bunu kurmak için sadece iki basit adım:
İlk olarak, komut dosyasını sisteminizde bir yere yerleştirin, örneğin
~/scripts:
touch ~/scripts/cmd_opt_p.sh chmod +x ~/scripts/cmd_opt_p.sh open ~/scripts/cmd_opt_p.sh #edit with your favorite editor
#!/bin/sh osascript -e 'tell application "System Events" to keystroke "p" using {command down, option down}'
içinde
Preferences -> Behaviours -> Build Succeeds -> Run, yeni oluşturulan komut dosyasını seçin:
İşte! Komut dosyası ilk kez tetiklendiğinde, bilgisayarı kontrol etmek için Xcode'un erişilebilirlik özelliklerini kullanmasına izin verilmesini isteyecektir.
İşte akılda tutulması gereken birkaç şey:
osascript -e 'activate application "Xcode"'.
Cmd+Bkullanmak yerine.
Cmd+Shift+BBaşarılı olduğunda, otomasyon tekrar tetiklenecektir.
Özellikle bu yaklaşımla ilgili herhangi bir sorun yaşarsanız, bunun sizin için nasıl çalıştığını bana bildirin!
Okuduğunuz için teşekkürler.
Want to Connect? I hope you enjoyed the post. To get notified about new posts, follow me on Twitter or subscribe to the feed. This post is licensed under CC BY NC SA 4.0 by the author. Originally published at https://hybridcattt.com
Bilinç nedir? Yüzyıllardır filozofların ve bilim adamlarının kafasını karıştıran bir sorudur. Bazıları bunun bedenlerimizden bağımsız olarak gerçekten anlayamadığımız geçici bir şey olduğunu söylüyor.
Yıllık ortalama 154 bin dolar maaş ve istikrarlı iş büyümesi ile şimdi blok zinciri geliştirmeyi öğrenmek için ideal zaman. Blok zinciri teknolojilerini oluşturmak ve geliştirmek için blok zinciri geliştiricileri, bilgisayar ağı, kriptografi, algoritmalar ve veri yapıları dahil olmak üzere çeşitli beceriler kullanır.
"Tren kazası" kelimesinden nefret ediyorum. İnsanlar kendi ahlaki pusulalarında teselli bulur ve bunu yaparken kendilerini yargıda bulunurken bulurlar.
Çevrimiçi ödeme sahtekarlığının ortaya çıktığını ve yeni olmadığının herkes için açık olduğunu düşünüyorum. Alıcı konumundaki herhangi birinin bir dolandırıcılığa düşmekten korktuğu veya halihazırda düşmüş olduğu veya dolandırıcılara yakalanmış birini tanıdığı açıktır.
28 Temmuz 2022'de Güneş, Yeni Ay, Aslan'da Ceres kavuşumu Jüpiter RX'i üçgen yapacak, Merkür ise Uranüs'ü Merkür, Uranüs-Mars, Satürn'e T-karesinin bir parçası olarak veya düğümler ise sabit bir Büyük Haç ile kare yapacak. dahildir. Venüs, Kara Ay Lilith ve Yengeç burcundaki sabit yıldız Sirius ile kavuşum halindedir.
Abha'da spor aktiviteleri için bir deneyim tasarlayalım! Programın neredeyse yarısına geldik ve 3. proje zamanı geldi! Yalan söylemeyeceğim bu proje şimdiye kadar yaptığım en bunaltıcı, stresli ama eğlenceli proje olabilir. Başlamak için, güzel Abha şehrinde spor aktiviteleri için bir deneyim tasarlamak olan meydan okumamızla tanıştık.