Як змінити час та часовий пояс у тренажері iPhone ?
Як змінити час та часовий пояс у тренажері iPhone ?
Відповіді:
Я здогадуюсь, що він використовує часовий пояс у вашій системі, тому зміна TZ в системних налаштуваннях, ймовірно, зробить свою справу
Перезавантажте симулятор після зміни налаштувань часу на системну дату, і ви побачите, що зміни відображаються. Це працювало для мене.
Було б корисно, якби Apple надала "Моделювання дати", оскільки вони надали меню "Імітувати місце". Що я роблю, це встановити точку розриву відразу після отримання дати (збереження її в змінній), а потім змінити значення. Або просто змінити місце, де я перевіряю на зміну дати, і змусити його повернути справжнє.
Для того, щоб зробити знімок екрана, Apple, нарешті, дала можливість переосмислити час на панелі стану тренажера iOS (починаючи з Xcode 11 ) за допомогою інструмента simctl :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
Ось рішення, доступне як мінімум з iOS 13 та Xcode 11. (не тестувався з попередніми версіями)
За замовчуванням iOS Simulator показує, який час на вашому 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"
В іншому випадку ви можете використовувати параметр часу як рядок, і він відображатиме все, що ви передаєте в ньому.
З подякою оригінальної публікації Пола Хадсона Ось посилання !
Ви можете встановити TZ
змінну середовища в схемі Xcode, щоб встановити часовий пояс саме для цієї програми.
Ви можете використовувати UTC
, PST
, EST
, а також місце на основі імен часових поясів , такі як America/Los_Angeles
. Це недостатньо задокументовано, але я підозрюю, що назва часового поясу має працювати.
Це недостатньо задокументовано, але джерелом є представник підтримки для розробників Apple на форумах розробників .
Змінюючи часовий пояс, я знайшов найпростіший спосіб це зробити, натиснувши годинник у меню. Потім виберіть "Відкрити налаштування дати та часу", а потім виберіть вкладку "Часова зона".
Крім того, Системні налаштування -> Дата та час та виберіть вкладку Часова зона.
Просто вказівник для тих, хто може не знати свого шляху навколо OSX.
Це стара тема, але вона найближча до мого питання. Мені потрібно імітувати часовий пояс для Європи, цей метод працює для мене. Перейдіть до "TimeZone", а не "Date & Time". Зніміть прапорець "Встановити часовий пояс автоматично, використовуючи поточне місцеположення" та пересуньте вертикальну смугу прямокутника (із синьою крапкою на ньому), щоб імітувати ваш системний час.
Я запропонував автоматичне вирішення проблеми зміни часу, що включає в себе нескінченний метод шипування: https://stackoverflow.com/a/34793193/829338 . Я припускаю, що також слід працювати на зміну часового поясу відповідно.
Мені потрібно було тестувати свою програму автоматично, що вимагало зміни часу системи. Я зробив те, що запропонував Том: щасливий хекі-метод шиплять.
Для демонстраційних цілей я лише змінюю, [NSDate date]
але ні [NSDate dateWithTimeIntervalSince1970:]
.
Спочатку вам потрібно створити метод свого класу, який слугуватиме новою [датою NSDate]. Я реалізував це, щоб просто зрушити час на постійну часову різницю.
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).