Aplikasi saya terdiri dari banyak proyek (kerangka kerja), satu untuk setiap fitur utama dan kerangka kerja umum dengan segala macam hal yang perlu saya akses di banyak fitur saya.
Saya menggunakan Manajer Paket Swift Xcode 11 untuk menambahkan dependensi.
Kerangka umum berisi ketergantungan RxSwift, yang saya gunakan di seluruh proyek.
Saya menghadapi masalah ketika saya mencoba menggunakan RxTest di salah satu kerangka kerja fitur saya.
Jika saya menambahkan RxTest via SPM ke target tes secara langsung dan menjalankan tes, saya dapatkan
gagal membuat superclass 'nama kelas' dari nama yang rusak 'nama kelas lain'
dan banyak
'Nama kelas' kelas diimplementasikan di 'jalur kerangka kerja umum' dan 'jalur target pengujian'
di mana semua kelas ini terkait Rx. Kesalahan 'gagal untuk demangle' membuat crash tes dan hanya terjadi ketika saya mencoba menginisialisasi kelas RxTest.
Jika saya menambahkan RxTest ke kerangka umum, tes berjalan dengan baik, tetapi ketika saya menjalankan aplikasi, saya mengerti
dyld: Library tidak dimuat: @ rpath / XCTest.framework / XCTest
Yang masuk akal, karena saya menambahkan kerangka uji ke kerangka non-tes, dan itu bukan sesuatu yang baik untuk dilakukan.
Jadi pada dasarnya, saya tidak bisa mendapatkan konfigurasi tempat tes dan aplikasi berjalan dengan baik. Baik aplikasi berjalan atau tes berjalan.
Bagaimana saya bisa membuatnya bekerja? Apakah ada cara untuk memasukkan RxTest pada kerangka kerja umum hanya ketika saya membangunnya pada target uji? Atau haruskah RxTest hanya disertakan pada target pengujian dan saya kehilangan beberapa konfigurasi?
sumber
Masalah Anda kemungkinan bahwa perpustakaan menggunakan tautan statis dan bukannya tautan dinamis. Di SwiftPM Anda dapat menentukan perpustakaan sebagai statis atau dinamis jika Anda inginkan atau Anda dapat membiarkan sistem build memutuskan apa yang dilakukan sebagian besar paket. Xcode tampaknya lebih menyukai pendekatan statis ketika dibangun dengan SwiftPM yang menghasilkan masalah build yang Anda alami.
Jika Anda memodifikasi
Package.swift
untukRxTest
menjadi pustaka dinamis, itu seharusnya berfungsi. Anda dapat dengan mudah menguji ini dengan mengkloningRxSwift
dan memodifikasi baris ini:ke:
dan kemudian menyeret salinan lokal
RxSwift
ke dalam Xcode Project Navigator Anda. Kemudian akan menggunakan salinan lokal paket Anda daripada yang diklon oleh Xcode.Setelah Anda melakukan ini, Anda dapat menautkannya dengan target yang Anda butuhkan dan itu akan berfungsi. Jika itu benar-benar memperbaiki masalah maka kemungkinan solusi jangka panjang Anda:
1) Memiliki garpu yang hanya mengubahnya ke perpustakaan dinamis.
2) Meyakinkan
RxSwift
komunitas untuk mengubah produk mereka ke versi dinamis atau ke versi dinamis selain default.3) Jangan gunakan
RxTest
atau hal serupa di banyak tempat.Perlu juga dicatat, bahwa Xcode 11.3 dan sebelumnya tidak mendukung pengarsipan dengan Paket Swift dinamis. Jadi, jika Anda turun rute dinamis Anda harus menunggu Xcode 11.4.
sumber