Как изменить время и часовой пояс в iPhone симулятор?
Как изменить время и часовой пояс в симуляторе iPhone?
Ответ 1
Я предполагаю, что он использует часовой пояс вашей системы, поэтому изменение TZ в системных настройках, вероятно, сделает трюк
Ответ 2
Перезагрузите симулятор после изменения настроек времени в системе, и вы увидите, что изменения отражены. Это сработало для меня.
Ответ 3
Было бы полезно, если Apple предоставила "Имитировать дату", поскольку они предоставили меню "Имитация местоположения". То, что я делаю, устанавливается точкой останова сразу после получения даты (сохранение ее в переменной), а затем изменения значения. Или просто измените место, где я проверяю изменение даты и верну его true.
Ответ 4
При изменении часового пояса я нашел самый простой способ сделать это, щелкнув часы в строке меню. Затем выберите "Open Date and Time Preferences", затем выберите вкладку "Часовой пояс".
Альтернативно Системные настройки → Дата и время и выберите вкладку Часовой пояс.
Просто указатель для всех, кто может не знать своего пути в OSX.
Ответ 5
Это старый поток, но он ближе всего к моему вопросу. Мне нужно смоделировать часовой пояс для Европы, этот метод работает для меня. Перейдите к пункту "TimeZone" вместо "Date & Time". Снимите флажок "Установить часовой пояс автоматически с помощью текущего местоположения" и сдвиньте вертикальную панель прямоугольника (с синей точкой на нем), чтобы имитировать ваше системное время.
Ответ 6
Apple наконец-то сделала возможным моделировать время в строке состояния симулятора iOS (начиная с Xcode 11) с помощью инструмента simctl :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
Ответ 7
Я предложил автоматическое решение проблемы изменения времени, которое включает взломанный метод swackling: fooobar.com/questions/65898/.... Я предполагаю, что это также должно работать для изменения часового пояса соответственно.
Мне нужно было проверить приложение автоматически, что потребовало изменения времени sys. Я сделал то, что предложил Том: счастливый хакерский метод swizzling.
В демонстрационных целях я меняю только [NSDate date]
, но не [NSDate dateWithTimeIntervalSince1970:]
.
Сначала вам нужно создать свой метод класса, который будет использоваться в качестве новой [NSDate date]. Я реализовал его, чтобы просто сдвинуть время на постоянное время.
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);
Ответ 8
Мой сервер сборки установлен в формате 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