@Testable kullanırken 'Modül test için derlenmedi'


147

@testableSınıflarımı test hedefine maruz bırakmak için Swift 2'nin yeni bildirimini kullanmaya çalışıyorum . Ancak bu derleyici hatası alıyorum:

resim açıklamasını buraya girin

Intervalsgöstermeye çalıştığım sınıfları içeren modüldür. Bu hatadan nasıl kurtulurum?

Yanıtlar:


239

Ana hedefinizde Enable Testabilityderleme seçeneğini Evet olarak ayarlamanız gerekir .

Aşağıdaki @earnshavian'ın açıklamasına göre, bu yalnızca Apple sürüm notlarına göre hata ayıklama yapılarında kullanılmalıdır: "Testability yapılarını etkinleştir ayarı yalnızca Hata Ayıklama yapılandırmanızda kullanılmalıdır, çünkü iç sembolleri dışa aktarmaya bağlı optimizasyonları yasaklar uygulama veya çerçeve " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


Merhaba, aynı hatayı alıyorum, ancak test edilebilirliği etkinleştir seçeneğini görmüyorum ve xcode 7 kullanıyorum. Ne yapmalıyım?
user1601259

2
@ user1601259 - Üst düzey projeyi seçerek, Oluşturma Ayarları'na gidip Oluşturma Seçenekleri başlığı altına bakarak seçeneği bulabilirsiniz.
hgwhittle

@hgwhittle - Üst düzey projeyi seçtiğimde, derleme seçeneklerinde gördüğüm tek şey "hata ayıklama bilgi biçimi" ve "derleme ürününü doğrula" dır. Oluşturma seçeneklerinde hedefi seçtiğimde "katıştırılmış içerik hızlı kod içeriyor" ifadesini görüyorum. Bu kadar. Derleme ayarlarında arama yaptığımda bulamıyorum. Bu xcode 7 yüzünden mi?
user1601259

1
"Derleme Ayarları" nızda "Temel" i seçmiş olabilirsiniz. Sol tarafta "Tümü" nü seçerseniz, "Testabiliteyi Etkinleştir" i görürsünüz
Array

1
Bu sürümler için tam olarak nasıl çalışmalı, burada testler yürütülecek (bu yüzden ihtiyaç duyulacak @testable) ancak App Store'a sunulması gerekiyor? Eğer Enable Testabilitysadece hata ayıklama oluşturmak içindir, bu çevrede yolu nedir nedir? Test kodumu serbest bırakmak için çıkarmam gerekir mi?
timgcarlson

15

Benim durumumda test için (derleme Test) ve ayrıca cocoapodsbağımlılık yöneticisi olarak özel bir yapılandırma yapılandırması kullandım

PodfileTest edilebilirliği sağlamak için sonuna aşağıdaki satırları eklemek zorunda kaldım

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

Varsayılan olarak yalnızca derlemeler için cocoapodsayarlanırENABLE_TESTABILITYYESDebug



8

Bunu yalnızca Xcode Profiler'ı çalıştırdıktan sonra yaşayanlar için: şema yönetiminizdeki profil oluşturma yapılandırmasını test edilebilirliği etkinleştirmiş olana geçirin - ve çoğu durumda hata ayıklanır:

resim açıklamasını buraya girin


4

Bunun nedeni büyük olasılıkla ana hedefinizin Enable Testabilityayarlanmış olmasıdır NO. Sen bunu belirlesin YES(testlerinizi çalıştırmak için kullanılır) ayıklama düzeni.

Carthage kullanıyorsanız, bu sorun, bir çerçeve @testabledüzeniyle oluşturulduğundan , çerçevelerin içe aktarılmasından kaynaklanabilir .

Çoğu zaman bu önekle çerçeveleri içe aktarmak kötü bir uygulamadır, böylece bundan kaçınabilirsiniz. Yapamıyorsanız Enable Testability, çerçevelerin yayınlama şemasında bulunmalısınız . https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


2
@Testable kullanarak çerçeveleri içe aktarmayı nasıl önleyebilirim? Buradaki iyi uygulama nedir?
Jonathan Cabrera

3

Bitrise kullanarak test çalıştırırken bu hatayı almaya başladım.

Diğer kullanıcıların diyor aksine, bu değil başına Targettemelinde, ya başına Schematemelinde, bu ise başına Configurationtemelinde. Kullandığınız Yapılandırma'daTarget -> Build Settingssekmesi -> ara testability-> Etkinleştir'i seçin .

Apple'ın AppStore için değil, hata ayıklama için kullandığınız yapılandırmada bunu etkinleştirmeyi önerdiğini lütfen unutmayın.


0

Pod / Carthage kullanıyorsanız yukarıdaki çözüm iyidir. Ancak iOS'un kendisinden 'örneğin Kişiler''den çerçeveler kullanıyorsanız, ana projenizin hedefinin' Kütüphane Arama Yolları'nda bu çerçevelere yol eklemeniz gerekir. resim açıklamasını buraya girin


0

Çerçeveyi test etmeye çalışıyorsanız:

Test hedefine gidin -> Derleme Aşaması -> Yeni kopya dosyaları oluşturma aşaması -> Çerçeveleri seç -> Özyinelemeli olarak kullanılan tüm çerçeveleri ekle


0

Herhangi bir şansınız varsa

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

O zaman, bunu yapmanın yolu budur.

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

Bu, Xcode 8'den önceki projelerimde olmadı, ancak Xcode 8'e yükselttikten sonra beni şaşırttı.

Burada gönderilen cevaplar sorunlarımı çözmedi. Benim için bu testleri gerekmediği için terk ettim. Test düğmelerinin işaretini kaldırın:

resim açıklamasını buraya girin Ve şimdi hata çıktı.


1
Testlere ihtiyacınız yoksa, test hedeflerini tüm yapılardan kaldırmak yerine projenizden kaldırmak daha iyi olabilir.
Jonathan Cabrera
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.