Odpowiedzi:
W swoim głównym celu musisz ustawić Enable Testabilityopcję 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 Testabilityjest 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 cocoapodsjako menedżera zależności
Musiałem dodać następujące wiersze na końcu mojego, Podfileaby 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 cocoapodsustawia ENABLE_TESTABILITYsię YEStylko na Debugkompilacje
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 Testabilityustawiono główny cel NO. Powinieneś ustawić to na YESw 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 Testabilityw 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 Targetpodstawie lub na Schemapodstawie, to jest na Configurationpodstawie. Wybierz Target-> Build Settingszakł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: