Как изменить время и часовой пояс в симуляторе iPhone?

Как изменить время и часовой пояс в iPhone симулятор?

Ответ 1

Я предполагаю, что он использует часовой пояс вашей системы, поэтому изменение TZ в системных настройках, вероятно, сделает трюк

Screenshot for description

Ответ 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