Saya menggunakan Xcode 6 Beta 6.
Ini adalah sesuatu yang telah menggangguku selama beberapa waktu sekarang, tetapi mencapai titik di mana itu hampir tidak dapat digunakan sekarang.
Proyek saya mulai memiliki ukuran yang layak yaitu 65 file Swift dan beberapa file Objective-C yang dijembatani (yang sebenarnya bukan penyebab masalah).
Sepertinya ada sedikit modifikasi pada setiap file Swift (seperti menambahkan ruang putih sederhana di kelas yang hampir tidak digunakan dalam aplikasi) akan menyebabkan seluruh file Swift untuk target yang ditentukan untuk dikompilasi ulang.
Setelah penyelidikan yang lebih dalam, saya telah menemukan bahwa apa yang mengambil cukup banyak 100% dari waktu kompiler adalah CompileSwift
fase di mana Xcode menjalankan swiftc
perintah pada semua file Swift dari target Anda.
Saya melakukan penyelidikan lebih lanjut, dan jika saya hanya menyimpan delegasi aplikasi dengan pengontrol default kompilasi sangat cepat, tetapi karena saya menambahkan semakin banyak file proyek saya, waktu kompilasi mulai menjadi sangat lambat.
Sekarang dengan hanya 65 file sumber, dibutuhkan sekitar 8/10 detik untuk mengkompilasi setiap kali. Tidak terlalu cepat sama sekali.
Saya belum melihat posting yang membahas masalah ini kecuali yang ini , tapi itu adalah versi lama dari Xcode 6. Jadi saya bertanya-tanya apakah saya satu-satunya dalam hal ini.
MEMPERBARUI
Saya telah memeriksa beberapa proyek Swift di GitHub seperti Alamofire , Euler dan CryptoSwift , tetapi tidak satupun dari mereka yang memiliki cukup file Swift untuk dibandingkan. Satu-satunya proyek yang saya temukan yang memulai memiliki ukuran yang layak adalah SwiftHN , dan meskipun hanya memiliki selusin file sumber saya masih dapat memverifikasi hal yang sama, satu ruang sederhana dan seluruh proyek membutuhkan kompilasi ulang yang mulai mengambil sedikit waktu (2/3 detik).
Dibandingkan dengan kode Objective-C di mana penganalisis dan kompilasi sangat cepat, ini benar-benar terasa seperti Swift tidak akan pernah bisa menangani proyek-proyek besar, tapi tolong katakan padaku saya salah.
UPDATE Dengan Xcode 6 Beta 7
Masih tidak ada perbaikan apa pun. Ini mulai menjadi konyol. Dengan kurangnya #import
Swift, saya benar-benar tidak melihat bagaimana Apple akan dapat mengoptimalkan ini.
UPDATE Dengan Xcode 6.3 dan Swift 1.2
Apple telah menambahkan build tambahan (dan banyak optimisasi kompiler lainnya). Anda harus memigrasi kode Anda ke Swift 1.2 untuk melihat manfaatnya, tetapi Apple menambahkan alat dalam Xcode 6.3 untuk membantu Anda melakukannya:
NAMUN
Jangan bersukacita terlalu cepat seperti saya. Pemecah grafik yang mereka gunakan untuk membuat incremental build belum dioptimalkan dengan baik.
Memang pertama, itu tidak melihat perubahan tanda tangan fungsi jadi jika Anda menambahkan spasi di blok satu metode, semua file tergantung pada kelas itu akan dikompilasi ulang.
Kedua, sepertinya membuat pohon berdasarkan file yang dikompilasi ulang bahkan jika perubahan tidak memengaruhi mereka. Misalnya, jika Anda memindahkan ketiga kelas ini ke file yang berbeda
class FileA: NSObject {
var foo:String?
}
class FileB: NSObject {
var bar:FileA?
}
class FileC: NSObject {
var baz:FileB?
}
Sekarang jika Anda memodifikasi FileA
, kompiler jelas akan menandai FileA
untuk dikompilasi ulang. Itu juga akan mengkompilasi ulang FileB
(yang akan OK berdasarkan perubahan FileA
), tetapi juga FileC
karena FileB
dikompilasi ulang, dan itu sangat buruk karena FileC
tidak pernah digunakan di FileA
sini.
Jadi saya berharap mereka memperbaiki pemecah ketergantungan pohon ... Saya sudah membuka radar dengan kode sampel ini.
PEMBARUAN Dengan Xcode 7 beta 5 dan Swift 2.0
Kemarin Apple merilis beta 5 dan di dalam catatan rilis kita bisa melihat:
Swift Language & Compiler • Build tambahan: mengubah tubuh saja dari suatu fungsi seharusnya tidak lagi menyebabkan file dependen dibangun kembali. (15352929)
Saya telah mencobanya dan saya harus mengatakan itu berfungsi dengan baik (sungguh!) Dengan baik sekarang. Mereka sangat mengoptimalkan build inkremental dengan cepat.
Saya sangat menyarankan Anda membuat swift2.0
cabang dan memperbarui kode menggunakan XCode 7 beta 5. Anda akan senang dengan penyempurnaan dari kompiler (namun saya mengatakan kondisi global XCode 7 masih lambat & bermasalah)
PEMBARUAN DENGAN Xcode 8.2
Sudah lama sejak pembaruan terakhir saya tentang masalah ini jadi ini dia.
Aplikasi kami sekarang sekitar 20 ribu baris kode Swift yang hampir secara eksklusif, yang layak tetapi tidak luar biasa. Itu mengalami migrasi cepat 2 dan dari cepat 3. Dibutuhkan sekitar 5 / 6m untuk dikompilasi pada pertengahan 2014 Macbook pro (2,5 GHz Intel Core i7) yang oke pada build bersih.
Namun build tambahan masih menjadi lelucon meskipun Apple mengklaim bahwa:
Xcode tidak akan membangun kembali seluruh target ketika hanya perubahan kecil yang terjadi. (28892475)
Jelas saya pikir banyak dari kita hanya tertawa setelah memeriksa omong kosong ini (menambahkan satu properti (pribadi!) Pribadi ke file proyek saya akan mengkompilasi ulang semuanya ...)
Saya ingin mengarahkan kalian ke utas ini di forum pengembang Apple yang memiliki beberapa informasi lebih lanjut tentang masalah ini (dan juga menghargai komunikasi pengembang Apple mengenai masalah ini sesekali)
Pada dasarnya orang telah membuat beberapa hal untuk mencoba meningkatkan pembangunan bertahap:
- Tambahkan
HEADER_MAP_USES_VFS
pengaturan proyek ketrue
- Nonaktifkan
Find implicit dependencies
dari skema Anda - Buat proyek baru dan pindahkan hierarki file Anda ke yang baru.
Saya akan mencoba solusi 3 tetapi solusi 1/2 tidak bekerja untuk kami.
Apa yang ironisnya lucu dalam seluruh situasi ini adalah bahwa melihat posting pertama tentang masalah ini kami menggunakan Xcode 6 dengan saya percaya kode swift 1 atau swift 1.1 ketika kami mencapai kelesuan kompilasi pertama dan sekarang sekitar dua tahun kemudian meskipun ada perbaikan nyata dari Apple. situasinya sama buruknya dengan Xcode 6. Sungguh ironis.
Saya benar- benar menyesal telah memilih Swift daripada Obj / C untuk proyek kami karena frustrasi sehari-hari yang terlibat. (Saya bahkan beralih ke AppCode tapi itu cerita lain)
Ngomong-ngomong, saya melihat posting SO ini memiliki 32k + view dan 143 up pada tulisan ini jadi saya kira saya bukan satu-satunya. Bertahanlah di sana, kawan-kawan meskipun pesimistis dengan situasi ini, mungkin ada sedikit cahaya di ujung terowongan.
Jika Anda punya waktu (dan keberanian!) Saya kira Apple menyambut baik radar tentang ini.
Sampai lain kali! Bersulang
PEMBARUAN DENGAN Xcode 9
Tersandung pada ini hari ini . Xcode diam-diam memperkenalkan sistem build baru untuk meningkatkan kinerja mengerikan saat ini. Anda harus mengaktifkannya melalui pengaturan ruang kerja.
Telah mencoba tetapi akan memperbarui posting ini setelah selesai. Terlihat menjanjikan.