Masalah Kompilasi, Bangun, atau Arsipkan dengan Xcode 4 (dan dependensi)

96

Pertanyaan ini telah berkembang selama beberapa minggu terakhir untuk membahas masalah yang lebih umum (dan proyek peningkatan versi lebih lama s).

Namun banyak masalah yang dapat diselesaikan dengan mengikuti instruksi yang sama.

Jika Anda mengalami salah satu masalah berikut, coba metode dalam jawaban yang diterima:

  • Xcode 4 gagal mengarsipkan Aplikasi
  • Xcode 4 membuat arsip yang tidak dapat digunakan
  • Xcode 4 tidak membuat .ipa
  • Xcode 4 gagal untuk dikompilasi karena kesalahan preprocessor
  • Xcode 4 tidak dapat menemukan header
  • Kode Xcode 4 lengkap tidak berfungsi
  • Ketergantungan proyek tidak dapat dikompilasi
  • Menambahkan ketergantungan menyebabkan salah satu masalah di atas

Pertanyaan Asli

Judul: "file masalah leksikal atau preprocessor tidak ditemukan" di Xcode 4

Saya memiliki proyek di Xcode 4 yang akan dibangun dengan baik dan berjalan di perangkat dan simulator tetapi ketika mencoba Mengarsipkan kesalahan ketika mencari file header yang terkait dengan perpustakaan statis:

In file included from /Volumes/Development/Path/LBProject/LBProject/LBProject-Prefix.pch:15:
In file included from /Volumes/Development/Path/LBProject/LBFDefines.h:23:
In file included from /Volumes/Development/Path/LBProject/Classes/LBProjectAppDelegate.h:11:
In file included from /Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDirectoryManager.h:10:
/Volumes/Development/Path/LBProject/LBProject/../FKNDirectory/FKNDataModel.h:11:9: fatal error: 'Merchant.h' file not found [1]
 #import "Merchant.h"
         ^
1 error generated. 

Xcode memberikan kesalahan

lexical or preprocessor issue file not found 

Banyak Googling telah menunjukkan banyak orang mengalami masalah ini tetapi tidak ada solusi. Siapapun mendapat perbaikan atau bahkan petunjuk.

Pembaruan: Jalur user headerpencarian diatur ke ${BUILT_PRODUCTS_DIR}dalam semua konfigurasi. Itu dibangun dengan baik menggunakan konfigurasi apa pun kecuali saat mengarsipkan.

Pembaruan 2: Merchant.h adalah kelas Data Inti yang dihasilkan secara otomatis dan karena itu di dalam .xcdatamodeldpaket, namun semua header disalin ke direktori header publik saat perpustakaan dibangun.

Richard Stelling
sumber

Jawaban:

119

NB: Langkah-langkah di bawah ini akan menyelesaikan 90% masalah arsip Xcode Anda, namun dari komentar disarankan Anda mencoba keluar dari Xcode terlebih dahulu. Ini dapat menghemat waktu berjam-jam untuk menyetel tweaker.

  1. Periksa apakah "jalur tajuk pengguna" sudah benar (Tambahkan "" ke jalur untuk spasi, baik dalam proyek Anda maupun dependensi)
  2. Setel "Selalu cari jalur pengguna" ke YA
  3. Buat panggilan grup "Header pengindeksan" dalam proyek Anda dan seret header ke grup ini, JANGAN tambahkan ke target apa pun saat diminta. Ini termasuk semua header di dalam .xcdatamodeld Anda, Anda harus mengklik kanan dan melihat konten paket untuk menemukannya.
  4. Untuk semua dependensi, setel setelan build "Lewati Pemasangan" ke "Ya"
  5. Memindahkan header "Publik" apa pun dalam Build Phases ke "Project"
  6. Setel Pengaturan Build "Direktori Instalasi" pada Target Anda ke$(LOCAL_APPS_DIR)
  7. Ubah pengaturan target build "pindai semua file sumber untuk menyertakan" ke YES. ( tautan )
  8. Dengan versi Xcode yang lebih baru (> 4.2) Anda mungkin ingin membaca pertanyaan ini terkait dengan ruang kerja.
  9. Hapus file project.xcworkspace secara manual dari semua project yang direferensikan
Richard Stelling
sumber
28
Saran terakhir yang saya butuhkan untuk memperbaiki masalah ini. Tutup & buka kembali Xcode.
Chris Miles
1
Yup, sama saja buat saya, cuma harus restart Xcode. Itu terjadi setelah saya mengganti nama & memindahkan file di dalam proyek.
Maurizio
Saya juga. Tidak ada yang lebih membuat frustrasi daripada bug yang seharusnya tidak ada. Senang rasanya bisa diselesaikan dengan mudah.
maxedison
3
Catatan untuk pengguna Three20 yang memigrasi proyek lama dari xcode3 ke xcode4: Anda (mungkin) harus mengubah Preferensi xcode / lokasi / lanjutan / -> Lokasi yang ditentukan oleh target. Lihat stackoverflow.com/questions/5261447/… untuk lebih lanjut
Ben G
1
Sialan di nomor 1. Kutipannya! Lingkungan $ (SRC_ROOT) tentu saja, "mungkin" diselesaikan dengan jalur dengan spasi. Tidak dapat memahami mengapa men-zip proyek saya dan mengekstraksi di tempat lain mengakibatkan kegagalan pembuatan!
Erik Kerber
13

Saya memiliki masalah yang sama di XCode 4: "Masalah leksikal atau preprocessor MyFile.h tidak ditemukan". Namun, MyFile.m bukanlah pustaka statis, hanya kelas standar. Dan MyFile.m dan MyFile.h disertakan dengan benar dan diindeks dalam proyek.

Jadi ... Saya keluar dari XCode dan Simulator, lalu memulai ulang dan masalahnya hilang.

richardsun
sumber
Saya mengalami situasi yang sama, tetapi kesalahan yang tidak diinginkan ditampilkan karena salah merujuk properti yang tidak terkait yang berada di kelas yang sama (pada dasarnya saya lupa menggunakan diri.) - yang aneh.
JARC
11

Saya menemukan bahwa masalahnya hilang ketika saya mengubah pengaturan target build "memindai semua file sumber untuk menyertakan" dari tidak menjadi ya.

doc taco
sumber
6

Saya dapat menyelesaikan masalah ini tanpa perubahan apa pun pada pengaturan build apa pun hanya dengan menyalin file .h ke direktori Proyek di finder. Saya TIDAK menambahkannya ke proyek sama sekali. Hanya dengan menempatkan mereka di direktori filesystem project tampaknya cukup untuk memungkinkan penautan implisit Xcode bekerja dengan benar. Lebih lengkapnya di sini .

David Avendasora
sumber
+1 Saya telah menambahkan tautan ke pertanyaan int dia menerima jawaban, terima kasih atas infonya!
Richard Stelling
4

Saya punya masalah aneh seperti ini. Mengubah "Pindai semua file sumber daya ..." ke Ya tidak membantu. Saya melihat pada Framework Search Paths dan menyadari bahwa saya memilikinya

  • $ (diwariskan)
  • "$ (SRCROOT)"
  • "$ (SRCROOT) / my / correct / path"

Kelihatannya benar tapi masih gagal. Saya kemudian mencoba mengatur ulang urutan 2 & 3 dan tiba-tiba itu dibuat dengan baik. Jadi tidak yakin mengapa itu hickup, tetapi ingin menambahkannya ke daftar hal-hal yang harus dicoba jika itu membantu orang lain.

pusing
sumber
4

Solusi saya adalah mengubah saya

#import "HeaderFile.h"

untuk

#import <FrameworkName/HeaderFile.h>

dan semuanya mulai bekerja kembali. Yang tidak biasa adalah itu berhenti bekerja tiba-tiba setelah dibangun beberapa kali.

slcott
sumber
Saya mencoba semua yang lain dengan subproyek saya dan ini adalah satu-satunya hal yang akan berhasil. Terima kasih.
dirkoneill
Anda masih harus menggunakan tanda kutip ganda untuk perpustakaan statis. Tanda kurung sudut mencari jalur tajuk sistem dan tidak akan mencari jalur tajuk pengguna kecuali Anda juga mengaktifkan opsi Selalu Cari Jalur Pengguna , yang seharusnya tidak Anda lakukan jika Anda tidak perlu.
devios1
2

Masalah teratasi dengan sendirinya saat saya mengatur

Bangun Pengaturan-> Proyek-> Jalur Pencarian ke Ya

Karolyn
sumber
2

Saya memiliki yang sama - 2 target dalam proyek saya ( Project dan ProjectTest of GHUnit). Ketika skema saya diatur ke Project , impor <GHUnitIOS/GHUnit.h>adalah masalah "file masalah leksikal atau preprocessor tidak ditemukan" . Tapi ketika saya menetapkan ProjectTest sebagai skema , semuanya OK. Jadi, saya juga menambahkan GHUnitIOS.frameworkdi Project .

selamat tinggal
sumber
Saya memiliki masalah sebaliknya. Lihat jawaban saya: stackoverflow.com/a/16783389/629014
slcott
1

Sepertinya jalur pencarian header Anda salah tidak dikonfigurasi dengan benar di pengaturan build Anda untuk skema aktif. Verifikasi mereka dan perbarui pertanyaan Anda dengan pengaturan saat ini.

Joshua Nozzi
sumber
1

Saya mengalami masalah serupa di simulator tetapi tidak pada perangkat dan bidang jalur pencarian header saya kosong (Sepertinya default). Tetapi mengubah Ruang Kerja tampaknya telah menyelesaikan masalah ini. Mungkin Anda dapat mencoba membuat Ruang Kerja baru, menambahkan proyek Anda ke dalamnya dan melihat apakah itu membantu. Sekarang saya sedang menyelidiki mengapa.

Norman G
sumber
1

Saya mendapatkan kesalahan "file tidak ditemukan" ini untuk satu file .h tertentu dalam proyek saya. Saya menyelesaikan masalah dengan menghapus file .h itu dari proyek (memilih "Hapus referensi") dan menambahkannya kembali.

cduhn
sumber
1

Menambahkan lebih banyak varian: Saya memiliki dua contoh foo.mdalam Compile Sourcefase membangun, yang beberapa penyebab mengapa "Header tidak ditemukan" untuk foo.h.

ruang bebas
sumber
1

Kesempatan lain:

Dalam proyek ruang kerja: perhatikan di Target untuk bagian Build Phases. Seperti yang dikatakan banyak manual, Anda perlu memiliki Fase Pembuatan File Salin untuk menyalin semua header Anda ke tempat lain, karena Kerangka Kerja iOS tidak dapat berisi file header untuk dibagikan (ini kasus saya).

Pilih untuk opsi Salin File sebagai Tujuan "Direktori Produk". Atau direktori lain yang Anda sukai tempat header akan berada.

Itu berhasil untuk saya. Mungkin build untuk direktori Archive (atau Release) sangat berbeda dari yang diharapkan dalam build untuk Debug.

Juga periksa di pengaturan ruang kerja Anda direktori build Anda.

XD

SubstanceMX
sumber
0

Bagi saya, masalah ini terjadi setelah saya menambahkan file baru ke proyek; sebuah .m kosong dan .h diturunkan dari NSObject. Inilah cara saya menyelesaikannya:

  1. Menutup dan memulai ulang xCode
  2. Menghapus dua file baru melalui XCode
  3. Berhasil dikompilasi ulang

Saya kemudian menambahkannya kembali setelah itu dan itu juga berhasil.

Pasti bug di xCode ...

g-dog
sumber