iOS Xcode SPM, üst sınıfı çözemedi


9

Uygulamam birçok projeden (çerçevelerden) oluşur, her ana özellik için bir tane ve birden fazla özellikte erişmem gereken her türlü şeyle ortak bir çerçeve.

Bağımlılık eklemek için Xcode 11'in Swift Paket Yöneticisi'ni kullanıyorum.

Ortak çerçeve, tüm proje boyunca kullandığım bir RxSwift bağımlılığı içeriyor.

Özellik çerçevelerimden herhangi birinde RxTest kullanmaya çalıştığımda sorunlarla karşılaşıyorum.

RxTest'i SPM üzerinden doğrudan test hedefine ekler ve testleri çalıştırırsam,

'class name' üst sınıfını, 'diğer sınıf adı' adı verilen addan çıkaramadı

ve çok

"Sınıf adı" sınıfı hem "ortak çerçeve yolu" hem de "test hedefi yolu" nda uygulanır

burada tüm bu sınıflar Rx ile ilişkilidir. 'Demangle başarısız oldu' hatası testi çöküyor ve yalnızca bir RxTest sınıfı başlatmaya çalıştığınızda oluşur.

Ortak çerçeveye RxTest eklersem, testler iyi çalışır, ancak uygulamayı çalıştırdığımda,

dyld: Kütüphane yüklenmedi: @ rpath / XCTest.framework / XCTest

Bu mantıklı, çünkü test dışı bir çerçeveye test çerçevesi ekliyorum ve bu iyi bir şey değil.

Temel olarak, hem testlerin hem de uygulamanın iyi çalıştığı bir yapılandırma elde edemedim. Uygulama çalışır veya testler çalışır.

Bunu nasıl çalıştırabilirim? RxTest'i ortak çerçeveye yalnızca bir test hedefi üzerine oluşturduğumda dahil etmenin bir yolu var mı? Yoksa RxTest yalnızca test hedeflerine dahil edilmeli ve bazı yapılandırmaları eksik mi?

Yanıtlar:


2

SPM bağımlılığı olan Xcode, şu anda birbirine bağımlı olan birden çok hedefte aynı SPM bağımlılığını işleyemiyor. Her bağımlılığın şu anda yalnızca tek bir hedefte olması gerekir. Neden şu andan itibaren bilmiyorum, ama henüz dosyalanmış değilse daha fazla araştırmak ve dosya hatası deneyeceğim.


Merhaba, daha fazla bilgi edinmek için şansın var mı?
janh

Bununla ilgili bir şey buldun mu?
bogen

Şimdiye kadar hiçbir şey :) Sorun gerçekten, bağımlılıkları hedeflere statik olarak bağlamasıdır.
Zdeněk Topič

0

Sorununuz büyük olasılıkla kütüphanenin dinamik bağlantı yerine statik bağlantı kullanıyor olması. SwiftPM'de isterseniz bir kütüphaneyi statik veya dinamik olarak belirtebilirsiniz veya derleme sisteminin çoğu paketin hangisi olduğuna karar vermesine izin verebilirsiniz. Xcode, SwiftPM ile birlikte inşa edildiğinde karşılaştığınız derleme sorunlarına neden olan statik yaklaşımı destekliyor gibi görünüyor.

Eğer değiştirirseniz Package.swiftolması RxTestdinamik bir kütüphane olmak yerine o çalışmalıdır. RxSwiftBu satırı klonlayarak ve değiştirerek kolayca test edebilirsiniz :

.library(name: "RxTest", targets: ["RxTest"]),

içine:

.library(name: "RxTest", type: .dynamic, targets: ["RxTest"]),

ve ardından yerel kopyasını RxSwiftXcode Project Navigator'ınıza sürükleyin . Daha sonra Xcode tarafından klonlanan yerine yerel paketinizi kullanır.

Bunu yaptıktan sonra, ihtiyacınız olan hedeflere bağlayabilirsiniz ve çalışması gerekir. Bu gerçekten sorunu çözüyorsa, uzun vadeli çözümleriniz muhtemelen:

1) Dinamik bir kütüphaneye dönüştüren bir çatalınız olsun.

2) RxSwiftTopluluğunu, ürünlerini varsayılana ek olarak dinamik olarak değiştirmeye veya dinamik sürümler satmaya ikna edin .

3) RxTestBirden fazla yerde benzeri şeyler kullanmayın .


Ayrıca, Xcode 11.3 ve önceki sürümlerin dinamik Swift Paketleri ile arşivlemeyi desteklemediğini de belirtmek gerekir. Dinamik rotadan aşağı inerseniz Xcode 11.4'ü beklemeniz gerekecek.


Her bağımlılığı klonlamak ve değiştirmek benim için bir çözüm gibi görünmüyor. Paketlerin çoğu varsayılan tür kullanıyor, bu biraz otomatik inandığım ve her zaman bir nedenden dolayı statik bağlantı seçiyor. Paket birden fazla hedefe bağlı olduğundan, dinamik olarak bağlamayı seçeceğini umuyorum.
Zdeněk Topič

Ya bu bir acı. Dinamikin burada beklenen davranış olacağını kabul ediyorum. Bunu değiştirmek için yapabileceğimiz en iyi şey, Apple ile bir geri bildirim isteği dosyası.
bscothern
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.