Artikel ini akan kecil, saya akan memberi tahu Anda masalah apa yang muncul saat membuat target untuk pengujian dalam proyek ObjectiveC + Swift yang agak lama dan campuran, dan bagaimana saya berhasil menyelesaikannya.
Hal pertama yang membingungkan: kesalahan dalam satu target pengujian dapat mempengaruhi peluncuran autotest dari target pengujian lain. Anda dapat menambahkan sejumlah target untuk pengujian dalam proyek, mereka biasanya didasarkan pada target utama proyek, dan secara otomatis ditambahkan ke skema peluncurannya. Jadi, ketika menjalankan autotest pada skema ini, sisanya akan dikompilasi, dan kesalahan pada salah satu target tes akan mengganggu peluncuran yang lain. Untuk mengisolasi efek ini, Anda dapat membuat skema berbeda untuk target tes yang berbeda.
Saya akan menyertakan tangkapan layar yang sangat sepele, hanya untuk kejelasan:


Masalah berikutnya adalah ketergantungan antara Objecive-C dan Swift.
Dalam proyek Anda dibuat:
MyProject-Bridging-Header.h : file ini berisi nama-nama file ObjectiveC-header yang digunakan dalam cepat.
MyProject-swift.h : ia membuat kode implisit untuk kelas swift yang digunakan dalam kelas ObjectiveC.
MyProject-Prefix.pch : file precompilation juga dapat berisi dependensi dengan berbagai cara, termasuk konstruksi seperti:
#ifdef __OBJC__ #import "MyProject-Swift.h" #endif
Autotest Anda juga dapat membuat dependensi seperti itu. Saat menambahkan file cepat pertama, Xcode menawarkan untuk membuat file jembatan-header untuk target pengujian ini. Semuanya bekerja seperti pesona. Secara teori, isi autotest jembatan-header harus melengkapi jembatan utama, tetapi pada kenyataannya, terjadi penggantian. Oleh karena itu, untuk memiliki akses ke semua kelas proyek di autotest, dalam opsi ini saya tentukan header-header dari target utama (gambar di atas).
Pergi ke
Target Xcode
-> BuildSetting dan periksa parameter berikut:
Objective-C Bridging HeaderNama Header Antarmuka Dihasilkan Objective-CTentukan file target utama.
Namun, jika Anda menarik header-jembatan utama, maka semua dependensi mulai meregang. Karena itu, Anda juga harus mengisi parameter berikut dengan data dari proyek utama:
Jalur pencarian kerangka kerjaJalur pencarian tajukJalur pencarian perpustakaanBendera penghubung lainnyaJalur Pencarian Runpath TIDAK perlu diubah.
Kemudian masalah aneh lain ditemukan:
Untuk beberapa alasan, dalam proyek yang lebih lama, target pengujian diberikan
Nama Modul Produk yang sama dengan yang utama. Ini tidak menghentikan ObjectiveC tunggal, tetapi ketika menambahkan cepat ke proyek, dua masalah muncul.
Masalah pertama adalah dalam hal ini
@testable import MyProject
file autotest diabaikan dan Anda tidak dapat mengakses kelas Swift.
Masalah kedua adalah bahwa target pada kompilasi menimpa MyProject-swift dari target utama dan mencegah kompilasi target lainnya. Parameter ini perlu diganti namanya.
Mengenai hal ini, autotest saya mulai dan dapat menggunakan file proyek, yang juga saya harapkan!
Saya tidak sering bekerja untuk menyiapkan proyek, jadi semua komentar praktis dan saran tentang topik ini dipersilakan.
Terima kasih untuk semua orang yang membacanya.