2009-11-09 17 views
90

Come si modifica l'ora e il fuso orario nel simulatore iPhone?Come cambiare il fuso orario e il fuso orario nel simulatore iPhone?

+0

per modificare l'ora e la data di sistema non è una soluzione. Ciò influisce su tutte le applicazioni Mac, compresi i timestamp xcode. Il comportamento corretto è che qualsiasi modifica della posizione del Simulatore deve modificare l'ora e il fuso orario. Tutte le altre cose sono solo una soluzione. Spero che Apple risolverà questo appena possibile – Rudi

risposta

141

Sto indovinando che usa il fuso orario del sistema, in modo da cambiare il TZ in Preferenze di Sistema, probabilmente farebbe il trucco

Screenshot for description

+0

Hmm ... Non ho questa opzione sul mio simulatore. Sul mio telefono è in Impostazioni -> Generale -> Data e ora. Sul mio simulatore, la sezione Data e ora non esiste. –

+5

Oh ...cambiarlo nelle preferenze di sistema della tua macchina, non nelle impostazioni del simulatore. Destra. Ha funzionato! –

+2

un problema in questo, il tempo del simulatore viene aggiornato dopo 2 minuti di modifica dell'ora del sistema. qualsiasi metodo che modifica simultaneamente il tempo del simulatore .... – AsifHabib

21

Riavviare il simulatore dopo aver modificato le preferenze temporali data di sistema e vedrete la cambiamenti riflessi. Ha funzionato per me.

+93

Soluzione orribile (da parte di Apple, non la tua risposta). Questo è esattamente il tipo di cosa che il simulatore dovrebbe essere in grado di fare come un'alternativa sicura per modificare effettivamente il tempo del tuo sistema e potenzialmente rompere le cose sul tuo computer. – devios1

+3

@devios questo è più vero che mai con  Guarda – Lewis42

+0

@ Lewis42, cosa intendi? –

1

Quando si modifica il fuso orario, ho trovato che il modo più semplice per farlo era facendo clic sull'orologio nella barra dei menu. E quindi selezionando "Data apertura & Preferenze tempo" quindi selezionare la scheda Fuso orario.

In alternativa Preferenze di sistema -> Data e ora e selezionare la scheda Fuso orario.

Solo un puntatore per chiunque non sapesse come orientarsi su OSX.

+3

Questa non è una risposta, quindi dovrebbe essere un commento. Il numero di sviluppatori iOS che non conoscono il loro modo in giro per OS X è ... zero. – phatmann

18

Sarebbe utile se Apple fornisse una "Data di simulazione" poiché forniva un menu "Simula posizione". Quello che faccio è impostare un punto di interruzione immediatamente dopo aver ottenuto la data (salvandola in una variabile) e quindi modificare il valore. O semplicemente modifica il punto in cui controllo la modifica della data e la restituisco vera.

1

Questo è un thread precedente ma è il più vicino alla mia domanda. Ho bisogno di simulare il fuso orario per l'Europa, questo metodo funziona per me. Vai a toccare "TimeZone" invece di "Data & Time". Deseleziona la casella "Imposta il fuso orario automaticamente utilizzando la posizione corrente" e fai scorrere la barra del rettangolo verticale (con un punto blu su di essa) per simulare l'ora del tuo sistema.

enter image description here

2

ho proposto una soluzione automatica al problema di cambiare il tempo comprendente metodo hacky swizzling: https://stackoverflow.com/a/34793193/829338. Presumo che dovrebbe anche funzionare per cambiare il fuso orario di conseguenza.


Avevo bisogno di testare automaticamente la mia app, che richiedeva la modifica del tempo del sistema. L'ho fatto, quello che Tom ha suggerito: il metodo hacky felice sta girando.

A scopo dimostrativo, cambio solo [NSDate date] ma non [NSDate dateWithTimeIntervalSince1970:].

Prima di tutto è necessario creare il metodo di classe che funge da nuova [data NSDate]. L'ho implementato per spostare semplicemente il tempo di una costante differenza di tempo.

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]; 
} 

Finora, abbastanza facile. Ora arriva la parte divertente. Otteniamo i metodi da entrambe le classi e l'implementazione dello scambio (ha funzionato per me in AppDelegate, ma non nella mia classe UITests). Per questo è necessario importare 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); 
+0

IIRC non funzionerà per testare le notifiche locali. –