2015-10-26 1 views
6

Я хочу написать свои тесты пользовательского интерфейса, чтобы они проверяли все семь состояний динамического типа, от самого маленького до самого большого. Как мне это сделать?Dynamic Type & iOS Simulator: Как я могу установить значение?

Могу ли я установить переменную окружения для симулятора в моей Схеме, а затем просто сделать разные схемы?

Или я могу установить динамическую переменную типа программным образом в своем тесте?

Я бы предпочел не делать DynamicTypeController, а затем заставить его сказать, какой тип он есть, потому что я бы рискнул использовать его для некоторых элементов, а затем не должен корректно тестировать поведение.

Приветствия

Nik

ответ

3

Прошу прощения за неполноту этого ответа, но это слишком долго для комментариев и не будет никакого кода форматирования.

Короткий ответ: это не поддерживается: https://forums.developer.apple.com/thread/21503, но, вероятно, он требует радар.

Более длинный ответ: вы можете что-то взломать. Настройка динамического типа в симуляторе доступна в вашей файловой системе по адресу: ~/Library/Developer/CoreSimulator/Devices/<device identifier>/data/Library/Preferences/com.apple.UIKit.plist. Вы можете программно получить путь к симулятору файловой системе из внутри XCTest с помощью:

let environment = NSProcessInfo.processInfo().environment 
    if let resourcesDir = environment[ "SIMULATOR_SHARED_RESOURCES_DIRECTORY" ] 
    { 
     print("-- Simulator Shared Resources Directory: \(resourcesDir)") 
     let dictionary = NSMutableDictionary(contentsOfFile: "\(resourcesDir)/data/Library/Preferences/com.apple.UIKit.plist")! 
     print("Dictionary: \(dictionary)") 
    } 

Однако тест песочницы из каталога тренажера, так что вы можете на самом деле не открыты или изменить свои предпочтения. Этот фрагмент кода не работает при попытке развернуть словарь. Я также никогда не пробовал это с Xcode Server.

Вы можете изменить plist используя скрипт оболочки следующим образом: plutil -replace UIPreferredContentSizeCategoryName -string UICTContentSizeCategoryAccessibilityXXXL com.apple.UIKit.plist. Симулятор необходимо перезапустить после изменения файла, чтобы он не мог летать в среде совместной сборки. К сожалению, путь к файловой системе симулятора недоступен для сценариев Pre-action в Xcode. Вы можете изменить настройку для всех симуляторов, но опять же, может не летать в общей среде сборки.

В конце дня вам может быть полезно создать DynamicTypeController и добавить некоторый процесс, чтобы никто не использовал UIApplication.preferredContentSizeCategory.

Все это было протестировано с использованием Xcode 7.1 (7B91b).

+0

Эй, Карлос, не нужно извиняться, я думаю, что ваш ответ такой же полный, как и он. Подход, который я начал, заключался в создании разных тренажеров, но теперь я полностью переключусь на редактирование этого plist. Сервер Xcode используется для одной и той же команды в одном проекте, поэтому это не должно быть проблемой. Огромное спасибо! :-) – niklassaers

+0

Я добавил RADAR # 23459874. PS, извините, я только заметил, что щедрость истекло, прежде чем я должен отметить ответ как правильный. :-( – niklassaers

+0

Отличная находка. Похоже, вы можете добавить -UIPreferredContentSizeCategoryName UICTContentSizeCategoryAccessibilityXXXL в качестве аргумента запуска (например, в схеме Xcode). Спасибо за этот ответ, который действительно помог мне. – Clafou

Смежные вопросы