Bagaimana cara mengubah zona waktu dan waktu dalam simulator iPhone ?
Bagaimana cara mengubah zona waktu dan waktu dalam simulator iPhone ?
Jawaban:
Saya menduga itu menggunakan zona waktu sistem Anda, jadi mengubah TZ di System Preferences mungkin akan melakukan trik
Nyalakan kembali Simulator setelah mengubah preferensi waktu tanggal sistem dan Anda akan melihat perubahan tersebut tercermin. Ini berhasil untuk saya.
Akan bermanfaat jika Apple memberikan "tanggal Simulasikan" karena mereka menyediakan menu "Lokasi Simulasikan". Apa yang saya lakukan adalah menetapkan breakpoint segera setelah mendapatkan tanggal (menyimpannya dalam variabel) dan kemudian mengubah nilainya. Atau cukup modifikasi tempat di mana saya memeriksa perubahan tanggal dan membuatnya kembali benar.
Untuk keperluan mengambil tangkapan layar, Apple akhirnya memungkinkan untuk mengganti waktu pada bilah status simulator iOS (sejak Xcode 11 ) dengan menggunakan alat simctl :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
Berikut adalah solusi yang tersedia dari iOS 13 dan Xcode 11 setidaknya. (tidak menguji dengan versi sebelumnya)
Secara default, iOS Simulator menunjukkan waktu apa pun pada Mac Anda, Anda dapat menggunakan baris perintah Xcode untuk menimpanya dengan perintah ini di terminal:
xcrun simctl status_bar "iPhone 11 Pro Max" override --time '9:41'
Ganti nama simulator dengan perangkat yang ingin Anda ubah.
Untuk bilah status Anda memiliki penggantian ini:
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.
Waktu dapat berupa string apa pun. Tetapi jika Anda ingin perangkat menampilkan tanggal, Anda perlu menggunakan format ISO . Misalnya string tanggal ISO yang valid adalah '2007-01-09T10: 41: 00 + 01: 00'
Kalau tidak, Anda dapat menggunakan parameter waktu sebagai string dan itu akan menampilkan apa pun yang Anda lewati.
Dengan terima kasih kepada posting asli oleh Paul Hudson Inilah tautannya !
Anda dapat mengatur TZ
variabel lingkungan dalam Skema Xcode untuk mengatur zona waktu hanya untuk aplikasi itu.
Anda dapat menggunakan UTC
, PST
, EST
, serta nama-nama zona berbasis tempat seperti America/Los_Angeles
. Ini tidak didokumentasikan dengan baik, tetapi saya curiga nama zona waktu mana pun bisa digunakan.
Ini tidak didokumentasikan dengan baik, tetapi sumbernya adalah perwakilan Dukungan Pengembang Apple di forum pengembang .
Ketika mengubah zona waktu, saya menemukan cara termudah untuk melakukannya adalah dengan mengklik jam di menubar. Dan kemudian pilih "Open Date & Time Preferences" lalu pilih tab Time Zone.
Atau Preferensi Sistem -> Tanggal dan Waktu dan pilih tab Zona Waktu.
Hanya sebuah penunjuk untuk siapa saja yang mungkin tidak tahu jalan di OSX.
Ini adalah utas lama tetapi yang terdekat dengan pertanyaan saya. Saya perlu mensimulasikan zona waktu untuk Eropa, metode ini berfungsi untuk saya. Buka ketuk 'Zona Waktu' alih-alih ketuk 'Tanggal & Waktu'. Hapus centang pada kotak 'Tetapkan zona waktu secara otomatis menggunakan lokasi saat ini' dan geser bilah persegi panjang vertikal (dengan titik biru di atasnya) untuk mensimulasikan waktu sistem Anda.
Saya telah mengusulkan solusi otomatis untuk masalah mengubah waktu yang mencakup metode hacky swizzling: https://stackoverflow.com/a/34793193/829338 . Saya berasumsi bahwa itu juga harus bekerja untuk mengubah zona waktu.
Saya perlu menguji aplikasi saya secara otomatis, yang perlu mengubah waktu sistem. Saya lakukan, apa yang disarankan Tom: metode hacky bahagia berputar-putar.
Untuk tujuan demonstratif, saya hanya berubah [NSDate date]
tetapi tidak [NSDate dateWithTimeIntervalSince1970:]
.
Pertama, kebutuhan Anda untuk membuat metode kelas yang berfungsi sebagai [tanggal NSDate] baru. Saya menerapkannya hanya untuk menggeser waktu dengan perbedaan waktu konstan.
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];
}
Sejauh ini, cukup mudah. Sekarang tiba bagian menyenangkan. Kami mendapatkan metode dari kedua kelas dan implementasi pertukaran (itu bekerja untuk saya di AppDelegate, tetapi tidak di kelas UITests saya). Untuk ini, Anda perlu mengimpor 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);
Server build saya adalah UTC dan beberapa unit test saya membutuhkan zona waktu untuk menjadi PST. Menggunakan kategori di NSTimeZone Anda dapat mengesampingkan implementasi Apple untuk menggunakan kode Anda. Bekerja hanya untuk proyek cepat juga.
//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
Setelah mengubah preferensi waktu tanggal sistem saya harus memilih Hardware
> Reset All Content And Settings
.
Hanya ini yang bekerja untuk saya di Versi 10.3 (SimulatorApp-880.5 CoreSimulator-681.5.4).