Как изменить время и часовой пояс в симуляторе iPhone ?
objective-c
xcode
timezone
ios-simulator
Рахул Вьяс
источник
источник
Ответы:
Я предполагаю, что он использует ваш системный часовой пояс, поэтому изменение TZ в системных настройках, вероятно, поможет
источник
После изменения настроек системной даты и времени перезапустите симулятор, и вы увидите отраженные изменения. У меня это сработало.
источник
Было бы полезно, если бы Apple предоставила «Имитацию даты», поскольку они предоставили меню «Имитировать местоположение». Что я делаю, так это устанавливаю точку останова сразу после получения даты (сохраняя ее в переменной), а затем изменяю значение. Или просто измените место, где я проверяю изменение даты, и сделайте его верным.
источник
Вы можете установить
TZ
переменную среды в схеме Xcode, чтобы установить часовой пояс только для этого приложения.Вы можете использовать
UTC
,PST
,EST
, а также место на основе имен часовых поясов , такие какAmerica/Los_Angeles
. Это плохо документировано, но я подозреваю, что любое имя часового пояса должно работать.Это плохо документировано, но источником является представитель службы поддержки разработчиков Apple на форумах разработчиков .
источник
Чтобы сделать снимок экрана, Apple наконец-то сделала возможным переопределение времени в строке состояния симулятора iOS (начиная с Xcode 11 ) с помощью инструмента simctl :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
источник
Вот решение, доступное как минимум для iOS 13 и Xcode 11. (не тестировал с предыдущими версиями)
По умолчанию симулятор iOS показывает любое время на вашем Mac, однако вы можете использовать командную строку Xcode, чтобы переопределить это с помощью этой команды в терминале:
xcrun simctl status_bar "iPhone 11 Pro Max" override --time '9:41'
Замените имя симулятора на устройство, которое вы хотите изменить.
Для строки состояния у вас есть следующие переопределения:
You may specify any combination of these flags (at least one is required): --time <string> Set the date or time to a fixed value. If the string is a valid ISO date string it will also set the date on relevant devices. --dataNetwork <dataNetworkType> If specified must be one of 'wifi', '3g', '4g', 'lte', 'lte-a', or 'lte+'. --wifiMode <mode> If specified must be one of 'searching', 'failed', or 'active'. --wifiBars <int> If specified must be 0-3. --cellularMode <mode> If specified must be one of 'notSupported', 'searching', 'failed', or 'active'. --cellularBars <int> If specified must be 0-4. --batteryState <state> If specified must be one of 'charging', 'charged', or 'discharging'. --batteryLevel <int> If specified must be 0-100.
Время может быть любой строкой. Но если вы хотите, чтобы устройство отображало дату, вам необходимо использовать формат ISO . Например, допустимая строка даты ISO будет '2007-01-09T10: 41: 00 + 01: 00'.
В противном случае вы можете использовать параметр времени как строку, и он будет отображать все, что вы в нем передаете.
Благодаря оригинальному сообщению Пола Хадсона. Вот ссылка !
источник
При изменении часового пояса я обнаружил, что самый простой способ сделать это - щелкнуть часы в строке меню. Затем выберите «Открыть настройки даты и времени», затем выберите вкладку «Часовой пояс».
Или же Системные настройки -> Дата и время и выберите вкладку Часовой пояс.
Просто указатель для тех, кто не разбирается в OSX.
источник
Это старая ветка, но она ближе всего к моему вопросу. Мне нужно смоделировать часовой пояс для Европы, этот метод работает для меня. Перейти к «Часовой пояс» нажмите вместо «Дата и время». Снимите флажок «Установить часовой пояс автоматически с использованием текущего местоположения» и сдвиньте вертикальную прямоугольную полосу (с синей точкой), чтобы смоделировать системное время.
источник
Я предложил автоматическое решение проблемы изменения времени, которое включает хакерский метод swizzling: https://stackoverflow.com/a/34793193/829338 . Я предполагаю, что это также должно работать для изменения часового пояса соответственно.
Мне нужно было автоматически протестировать мое приложение, что потребовало изменения системного времени. Я сделал то, что посоветовал Том: веселый хакерский метод swizzling.
В демонстрационных целях меняю только,
[NSDate date]
но не[NSDate dateWithTimeIntervalSince1970:]
.Сначала вам нужно создать метод класса, который будет служить новой [NSDate date]. Я реализовал это, чтобы просто сдвинуть время на постоянную timeDifference.
int timeDifference = 60*60*24; //shift by one day NSDate* (* original)(Class,SEL) = nil; +(NSDate*)date{ NSDate* date = original([NSDate class], @selector(date)); return [date dateByAddingTimeInterval:timeDifference]; }
Пока все довольно просто. Теперь самое интересное. Мы получаем методы из обоих классов и обмениваемся реализацией (у меня это сработало в AppDelegate, но не в моем классе UITests). Для этого вам нужно будет импортировать
objc/runtime.h
.Method originalMethod = class_getClassMethod([NSDate class], @selector(date)); Method newMethod = class_getClassMethod([self class], @selector(date)); //save the implementation of NSDate to use it later original = (NSDate* (*)(Class,SEL)) [NSDate methodForSelector:@selector(date)]; //happy swapping method_exchangeImplementations(originalMethod, newMethod);
источник
Мой сервер сборки - это UTC, и некоторые из моих модульных тестов требовали, чтобы часовой пояс был PST. Используя категорию в NSTimeZone, вы можете переопределить реализацию Apple, чтобы использовать свой код. Также работает для быстрых проектов.
//NSTimeZone+DefaultTimeZone.h #import <Foundation/Foundation.h> @interface NSTimeZone (DefaultTimeZone) +(NSTimeZone *)defaultTimeZone; @end //NSTimeZone+DefaultTimeZone.m #import "NSTimeZone+DefaultTimeZone.h" @implementation NSTimeZone (DefaultTimeZone) +(NSTimeZone *)defaultTimeZone { return [NSTimeZone timeZoneWithName:@"America/Los_Angeles"]; } @end
источник
После изменения настроек системной даты и времени мне пришлось выбрать
Hardware
>Reset All Content And Settings
.Только это сработало для меня в версии 10.3 (SimulatorApp-880.5 CoreSimulator-681.5.4).
источник