Xcode 8 mengkompilasi ulang kode yang lengkap setiap saat


131

Dengan perubahan kode apa pun (meskipun file tidak dalam .pch), selesaikan proyek yang dikompilasi ulang setiap waktu.


31
Mengapa ini diturunkan ?! Ini adalah masalah yang sah. Membutuhkan 4 menit untuk mengkompilasi setiap waktu, nuked semua produktivitas tim.
Josh

1
Saya juga mendapatkan masalah ini.
AJ9

3
Apakah Anda memodifikasi xib / storyboard dengan beberapa hal yang dapat didisain dengan IBD?
Larme

1
Utas forum apel terkait: forums.developer.apple.com/thread/62737 . Tidak ada solusi lagi.
Tepat

1
Pastikan untuk membuka laporan bug, seperti yang disarankan di forum Apple.
Leo Natan

Jawaban:


34

Perbarui 2017/1/2

Masalah ini belum diselesaikan di Xcode 8.2.1 (untuk proyek saya)

Bagaimana cara bertahan?

Code IDE: Xcode/Atom
Build: xcrun
Debug: Xcode (Control + Command + R)

Pembaruan 2016/12/17

Masalah ini belum diselesaikan di Xcode 8.2.

Pembaruan 2016/12/12

Atom ke kode dan baris perintah untuk membangun dan debug adalah pilihan saya sekarang. Semoga Apple akan segera memperbaiki bug yang sah ini.

Pembaruan 2016/12/04

Masalah ini tampaknya diselesaikan dengan Xcode 8.2 (beta 2) .

Tetapi bagi saya ini tidak dapat diselesaikan, saya menghadapi masalah ini bahkan ketika saya menggunakan Xcode 8.2. Anda dapat mencobanya (unduh Xcode8.2 beta2 di sini )

Build System • Xcode tidak akan membangun kembali seluruh target ketika hanya perubahan kecil yang terjadi. (28892475)


Jawaban lama: Ini adalah solusi:

masukkan deskripsi gambar di sini "Bangun Pengaturan" tab -> "C Bahasa Dialek" -> Ubah ke "Compiler Default".

Untuk referensi :

"C Language Dialect" disetel ke "GNU99" bukan "Compiler Default". Sebelumnya standar adalah GNU99 tetapi sekarang tidak. Pada titik tertentu Xcode tidak memigrasi pengaturan proyek perpustakaan dengan benar dan itu diatur ke GNU99. Setelah saya mengubahnya ke GNU99, ia berhenti mengkompilasi ulang semua kode saya setiap waktu!


1
Sejauh ini baik!!! Beri saya satu jam dan hadiah itu milik Anda jika terus naik.
Adam Waite

7
Argh kembali mengkompilasi segalanya
Adam Waite

1
Saya memiliki perilaku yang sama. Jika saya menghapus data yang diturunkan (atau mengubah dialek bahasa C) itu akan bekerja selama sekitar 10 build. Setelah itu jatuh kembali untuk membangun kembali semuanya.
bluebamboo

1
Xcode 8.2 (beta 2) berfungsi untuk 10 build kemudian membangun kembali semuanya dari awal, tetapi masih lebih baik dari yang sebelumnya.
Markus

3
Sayangnya masalah ini tetap ada di Xcode 8.3 beta 2 (setidaknya untuk kami). Tidak ada peningkatan nyata yang dapat diukur dalam proyek kami.
Kasper Munck

20

Pergi ke Produk -> Skema -> Edit Skema. Pilih Bangun di kolom sisi kiri dan hapus centang " Temukan dependensi tersirat "

Tetapi bendera ini harus tetap diperiksa ketika Anda membangun proyek untuk pertama kalinya ..


@Josh, apakah Anda menggunakan beberapa proyek dalam proyek Anda (mis. Sub proyek atau termasuk). Dan apakah Anda yakin dengan melihat output build Anda bahwa itu benar-benar membangun kembali segalanya?
Ponsel Ben

3
Ini adalah ruang kerja dasar dengan cocoapods dan proyek utama. CocoaPods tetap dibangun, tetapi proyek utama membangun kembali setiap file; menonton output build dan pasti 100+ file yang dibangun kembali.
Josh

1
Pembaruan: sepertinya solusi ini berfungsi untuk beberapa bangunan setelah melakukannya, namun demikian membersihkan seluruh proyek dan membangun kembali. Namun pada saat 2-8 kali membangun kembali, ia mulai mengkompilasi ulang semuanya lagi. Ada ide? Melebihi frustasi.
Josh

Ini tidak berfungsi, setidaknya tidak dengan ruang kerja CocoaPods. Semuanya membangun, setiap saat. Sangat menjengkelkan, terutama karena Apple sudah bertahun-tahun memperbaiki masalah ini.
Womble

7

Perbaikan untuk saya adalah hanya menutup storyboard, saya memiliki file sumber dibuka dengan editor yang dibantu dan file storyboard dibuka juga (menutup storyboard --- karena saya tidak membuat perubahan padanya) menghapus semua kompilasi yang tidak perlu


1
Ha itu bisa sangat mudah :)
manmal

5

DIPERBARUI

Satu-satunya peningkatan terbesar yang dapat saya lakukan adalah memodulasi proyek saya. Secara khusus memodulasi lapisan ORM yang digunakan di hampir setiap kelas lainnya. Dengan memindahkan kode itu ke target terpisah dalam proyek saya dan mengimpornya sebagai modul, saya dapat meningkatkan waktu kompilasi. Xcode tidak lagi memutuskan untuk mengkompilasi ulang file yang tidak perlu ketika saya membangun.

Sekarang saya menggunakan metode kompilasi File Tunggal untuk membangun debug inkremental cepat.

Ada beberapa saran bagus lainnya di tautan ini termasuk refactoring kode, https://medium.com/rocket-fuel/optimizing-build-times-in-swift-4-dc493b1cc5f5

TUA

Masih menjadi masalah konstan bagi saya dengan Xcode 9. Seperti banyak dari Anda, saya sedang mengerjakan proyek swiftap 4 / cocoapods besar dengan banyak file sumber dan mengkompilasi ulang setiap file setiap kali menyebalkan.

Sejauh ini saya mendapatkan hasil terbaik dengan pengaturan berikut. Saya sarankan Anda mencobanya dan melihat cara kerjanya untuk Anda.

  • Skema -> Bangun -> "Find Dependencies Implisit" = TRUE
  • Pengaturan Bangun -> Optimasi Tautan-Waktu = Tambahan
  • Pengaturan Bangun -> Level Optimasi (Debug) = Tidak Ada [-OO]
  • Pengaturan Bangun -> Level Optimasi (Rilis) = Tercepat, Terkecil [-Os]
  • Pengaturan Bangun -> Tingkatkan Berbagi Header Terkompilasi = YES
  • Pengaturan Bangun -> Aktifkan Penyulingan Tambahan = YA

Menambahkan pengaturan bangunan Buatan Pengguna yang ditetapkan,

  • Pengaturan Bangun -> HEADERMAP_USERS_VFS = YA

Catatan: Saya tidak memiliki pengaturan kustom yang ditentukan pengguna untuk optimasi seluruh modul.


3

Saya mengubah beberapa hal dengan kode saya mengenai header awalan yang tampaknya telah memperbaiki masalah ini. Saya tidak tahu yang mana yang benar-benar berhasil, tetapi saya akan membagikan semuanya dengan harapan dapat membantu orang lain di luar sana. Jika Anda tidak memiliki set header awalan, maka saya kira ini bukan masalahnya (atau masalahnya multifaset).

  1. Hapus impor apa pun dari header awalan yang merupakan file dari direktori produk bawaan sehingga Anda dapat mengubah pengaturan build untuk ini ("Header Terkompilasi Menggunakan File Dari Direktori Build") menjadi "Tidak". Pastikan tidak diimpor secara tidak langsung melalui impor lain juga.
  2. Hapus impor dari header awalan yang menggunakan modul Dentang (perpustakaan atau kerangka kerja yang memiliki file module.modulemap di direktori Header mereka, sehingga Anda dapat menulis kode seperti @import MyModule). (Bagi saya, ini dan langkah 1 adalah satu dan sama.)
  3. Setel pengaturan bangun untuk berbagi header awalan ke "Ya". (Saya pikir ini tidak perlu, dan seharusnya tidak berpengaruh pada proyek saya sendiri. Saya hanya menyatakan ini karena saya mengubahnya karena saya mau mencoba apa saja. :))
  4. Keluarlah dari Xcode dan hapus direktori DerivedData / ModuleCache Anda (dikonfigurasi untuk berada di ~ / Library / Developer jika saya ingat dengan benar).

Jika itu masih tidak berhasil, Anda dapat mencoba menghapus beberapa impor lagi dari header awalan Anda. Mungkin ada sesuatu yang tersandung ...


3

Sepertinya mereka secara aktif mengerjakannya sesuai dengan https://forums.developer.apple.com/thread/62737 tetapi solusinya adalah menambahkan

HEADERMAP_USES_VFS = YES

di bawah pengaturan build target Anda (Proyek -> Target -> Pengaturan Build -> Ditetapkan Pengguna).

Solusi ini bekerja setiap saat untuk saya hari ini, setelah tidak ada solusi lain yang bekerja secara konsisten selama sebulan terakhir.

EDIT: Kadang-kadang masih mengkompilasi ulang semuanya, meskipun tampaknya melakukannya lebih jarang dengan pengaturan ini ditetapkan.


Saya juga menambahkan nilai ini, waktu pembuatan lebih cepat tetapi tidak menyelesaikan pembangunan tambahan. Saya telah mengubah Swift Compiler - Pembuatan Kode / Debug menjadi Cepat, Optimalisasi Modul Utuh ... adalah hasil terbaik hingga sekarang
Antonio Junior

saya bahkan tidak dapat menemukan User Defined)
David Seek

2
@ DavidSeek di bagian paling bawah Build Settings
Laser Hawk

1
jika Anda tidak melihatnya maka bacalah ini meandmark.com/blog/2011/03/xcode-4-accessing-build-settings
Laser Hawk

3

Periksa semua kode Anda tentang @IBDesignablearahan dalam kasus khusus saya, proyek pembangunan Xcode sepanjang waktu karena saya memiliki beberapa pandangan di storyboard saya yang berisi @IBDesignableatribut ini di dalamnya. Hal kedua adalah saya juga membuka storyboard di jendela terpisah (bukan tab) yang mendorong Xcode saya membuat build untuk semua simulator selamanya.


Kami menggunakan cukup banyak @IBDesignablearahan ... adakah yang khususnya harus kita cari?
Stan

Saya pikir itu mungkin untuk menemukan mereka dengan mengecualikan satu per satu, dan periksa hasilnya, kasus saya itu hanya 2 dari arahan @IBDesignable di seluruh proyek.
ua24

2

Madhuri Mane benar tentang ini. Untuk menambahkan sedikit kejelasan, beberapa hal penting yang perlu diperhatikan:

Ini HANYA berlaku jika Anda memiliki ketergantungan tersirat pada perpustakaan / kerangka kerja yang diandalkan oleh target Anda.

Jika "Temukan Ketergantungan Tersirat" dinonaktifkan:

Hasil: Perpustakaan tidak akan dibangun sebelum membangun target aplikasi. Target aplikasi gagal dibangun.

Solusi: Untuk memastikan bahwa skenario kedua tidak terjadi, Anda harus menambahkan target yang diperlukan ke dalam daftar target dan memesannya dengan benar.

Sumber dan bacaan lebih lanjut tentang topik ini: https://pewpewthespells.com/blog/managing_xcode.html#scheme-action

Sekarang jika seluruh proyek Anda ditempatkan dalam satu target dan yang membutuhkan 4 menit untuk mengkompilasi tidak ada banyak yang dapat Anda lakukan kecuali memecahnya menjadi kerangka kerja untuk mengambil keuntungan dari yang di atas atau mencari tahu di mana kompilasi tertinggal. Jika Anda menggunakan sesuatu seperti PaintCode atau memiliki potongan besar kode UIKit dengan cepat mengubahnya menjadi Objective-c itu mengkompilasi jauh lebih cepat


2

Buka pengaturan build target Anda dan atur Defines Moduleke Yes.

Bekerja untuk saya untuk membangun pasangan, terlalu cepat untuk mengklaim ini adalah solusi yang pasti, tapi setidaknya kami mencoba.


2

Apple merilis versi beta baru Xcode kemarin (14 Nov)

Xcode 8.2 beta 2

Dan masalah ini telah ditandai sebagai terselesaikan dalam catatan rilis.

Membangun Sistem

• Xcode tidak akan membangun kembali seluruh target ketika hanya perubahan kecil yang terjadi. (28892475)

Ini bekerja untuk saya. Kecepatan build kembali seperti biasa. Setiap orang yang menghadapi masalah ini, harus mencobanya!

https://developer.apple.com/download/


2

Silakan pergi ke pengaturan build proyek dan ubah "Dialek Bahasa C".

"C Language Dialect" diatur ke "GNU99" dan bukan "Compiler Default" ketika Anda memperbarui versi xcode. Pada titik tertentu Xcode tidak memigrasi pengaturan proyek perpustakaan dengan benar dan itu diatur ke GNU99. Ini akan menyelesaikan masalah


1

Jika Anda telah membuat perubahan pada file Swift mulai membangun aplikasi, buka tab terakhir dan klik pada log build, selama tahap "Periksa dependensi" hentikan build dan jalankan lagi. Pada jalankan kedua itu seharusnya hanya membangun file yang Anda modifikasi. Jika dilakukan dengan benar, saya menemukan itu berfungsi setiap saat. Tidak perlu melakukan perubahan pengaturan proyek.

Tampaknya ini adalah bug di Xcode.

masukkan deskripsi gambar di sini

Jika Anda melihat aplikasi melakukan build penuh maka hentikan build dan coba trik ini lagi.

Jika Anda tidak membuat perubahan pada kode gunakan CMD + CTRL + R untuk menjalankan tanpa membangun aplikasi yang melampirkan debugger. Tidak akan membangun aplikasi tetapi dapat membantu menghemat waktu yang tidak perlu.


Ini benar-benar berfungsi, tetapi kadang-kadang XCode akan gagal dengan kode 1 dan Anda harus membuat Clean Build. Ini mimpi buruk
Antonio Junior

Ada skenario lain di mana Xcode akan selalu melakukan pembangunan penuh. Saya telah menemukan jika Anda memodifikasi file .h termasuk dalam bridging header itu akan membangun kembali semua file Swift. Mungkin ada skenario lain yang tidak terkait dengan bug Xcode.
Vlad

Ada skenario di mana satu-satunya perubahan adalah penggantian nama fungsi atau properti baru yang ditambahkan ke kelas / struct yang ada yang menghasilkan seluruh pembangunan kembali.
Antonio Junior

Merujuk pada pertanyaan / jawaban ini, utas ini adalah duplikat dari ini: Punya solusi yang berfungsi lebih baik: stackoverflow.com/questions/39456223/…
Vlad

1

Masalah dari sisi saya diperbaiki dengan menerapkan hapus centang pada solusi "Temukan Ketergantungan Implisit".

TAPI ingat jika Anda menggunakan cocoapods, untuk menerapkan pengaturan ini juga ke proyek pod Anda dengan memilihnya

Produk -> Skema -> Pods- "yourProjectName"

juga berlaku di:

Produk -> Skema -> "NamaProyek Anda"

Ini membantu saya, jadi saya harap petunjuk ini membantu orang lain.

Terima kasih


1

Coba: 1. Navigasikan ke Proyek 2. Klik Bangun Pengaturan 3. Periksa apakah OptimizationLevel diatur ke None untuk debugging. 4. Klik Tambah Pengaturan Buatan Pengguna 5. Setel SWIFT_WHOLE_MODULE_OPTIMIZATION ke YES.

masukkan deskripsi gambar di sini


tidak ada yang berhasil masih dikompilasi ketika saya menulis satu surat.
Chandni

-2

untuk memupuk waktu kompilasi xcode, dapat menggunakan IRAMDISK (disk memori virtual). Berarti sangat berguna dan efektif untuk mengurangi waktu kompilasi.

Juga dapat digunakan untuk mempercepat aplikasi yang sering digunakan.

lihat tautan berikut untuk mengunduh dan menggunakan: http://iramdisk.findmysoft.com/mac/


Ini tidak akan mempercepat kompilasi jika Anda sudah memiliki disk SSD.
Jano
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.