Odpowiedzi:
W swoim głównym celu musisz ustawić Enable Testability
opcję kompilacji na Tak.
Zgodnie z komentarzem @earnshavian poniżej, powinno to być używane tylko w kompilacjach debugowania zgodnie z uwagami do wydania Apple: „Ustawienie Włącz kompilację testowalności powinno być używane tylko w konfiguracji debugowania, ponieważ zabrania optymalizacji, które polegają na nieeksportowaniu symboli wewnętrznych z aplikacja lub platforma ” https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
@testable
), ale trzeba je przesłać do App Store? Jeśli Enable Testability
jest przeznaczony tylko do kompilacji debugowania, jak można to obejść? Czy muszę wyciągnąć kod testowy, aby go zwolnić?
W moim przypadku użyłem niestandardowej konfiguracji kompilacji do testowania (wywoływanej Test
), a także cocoapods
jako menedżera zależności
Musiałem dodać następujące wiersze na końcu mojego, Podfile
aby umożliwić testowalność
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
Domyślnie cocoapods
ustawia ENABLE_TESTABILITY
się YES
tylko na Debug
kompilacje
Upewnij się, że prawidłowo ustawiłeś pola wyboru w schemacie aplikacji. POWINIENEŚ ODCZYTAĆ cele testowe dla kompilacji archiwum.
Dla tych z Was, którzy doświadczają tego tylko po uruchomieniu Xcode Profiler: zmień konfigurację budowania profilu w zarządzaniu schematem na taką, która ma włączoną testowalność - i w większości przypadków będzie to debugowanie:
Dzieje się tak prawdopodobnie dlatego, że Enable Testability
ustawiono główny cel NO
. Powinieneś ustawić to na YES
w schemacie debugowania (który jest używany do uruchamiania testów).
Jeśli używasz Carthage, ten problem może być spowodowany importowaniem frameworków z @testable
, ponieważ są one zbudowane przy użyciu schematu wydania.
W większości przypadków importowanie frameworków z tym prefiksem jest złą praktyką, więc można tego uniknąć. Jeśli nie możesz, powinieneś Enable Testability
w schemacie wydawania frameworków. https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
Zacząłem otrzymywać ten błąd podczas uruchamiania testów przy użyciu Bitrise.
W przeciwieństwie do innych użytkowników, to nie jest na Target
podstawie lub na Schema
podstawie, to jest na Configuration
podstawie. Wybierz Target
-> Build Settings
zakładka -> szukaj testability
-> Włącz ją w używanej konfiguracji .
Zwróć uwagę, że Apple zaleca włączenie tego w konfiguracji używanej do debugowania, a nie w AppStore.
Jeśli próbujesz przetestować framework:
Przejdź do celu testowego -> Faza kompilacji -> Utwórz nową fazę kopiowania plików -> Wybierz frameworki -> Dodaj wszystkie rekurencyjnie używane frameworki
Jeśli przypadkiem masz
install! 'cocoapods',
generate_multiple_pod_projects: true,
incremental_installation: true
To jest sposób na zrobienie tego.
# 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
Nie miało to miejsca w moich projektach sprzed Xcode 8, ale po uaktualnieniu do Xcode 8 wprawiło mnie to w zakłopotanie.
Opublikowane tutaj odpowiedzi nie pomogły w rozwiązaniu moich problemów. Dla mnie po prostu porzuciłem te testy, ponieważ nie są potrzebne. Więc odznacz przyciski testowe: