2009-11-09 60 views
90

Làm cách nào để thay đổi múi giờ và múi giờ trong trình mô phỏng iPhone?Làm cách nào để thay đổi múi giờ và thời gian trong trình mô phỏng iPhone?

+0

để thay đổi Giờ và ngày của hệ thống không có giải pháp. Điều đó ảnh hưởng đến tất cả các ứng dụng Mac bao gồm cả tem thời gian xcode. Hành vi đúng là bất kỳ thay đổi nào của vị trí Trình mô phỏng phải thay đổi múi giờ và thời gian. Tất cả những thứ khác chỉ là cách giải quyết. Hy vọng rằng Apple sẽ sửa lỗi này asap – Rudi

Trả lời

141

Tôi đoán nó sử dụng múi giờ hệ thống của bạn, vì vậy thay đổi TZ trong System Preferences có lẽ sẽ làm các trick

Screenshot for description

+0

Hmm ... Tôi không có tùy chọn này trên trình mô phỏng của mình. Trên điện thoại của tôi, trong Cài đặt -> Chung -> Ngày & Giờ. Trên trình mô phỏng của tôi, phần Ngày & Giờ không tồn tại. –

+5

Oh ...thay đổi nó trong tùy chọn hệ thống của máy, không phải cài đặt của trình mô phỏng. Đúng. Điều đó đã hiệu quả! –

+2

một vấn đề trong điều này, thời gian mô phỏng được cập nhật sau 2 phút thay đổi thời gian hệ thống. bất kỳ phương pháp nào thay đổi thời gian giả lập đồng thời .... – AsifHabib

21

Khởi động lại Simulator sau khi thay đổi các ưu đãi thời gian ngày hệ thống và bạn sẽ thấy sự thay đổi được phản ánh. Nó làm việc cho tôi.

+93

Giải pháp khủng khiếp (trên phần của Apple, không phải câu trả lời của bạn). Đây chính xác là loại điều mà trình giả lập có thể thực hiện như một giải pháp thay thế an toàn để thực sự thay đổi thời gian hệ thống của bạn và có khả năng phá vỡ mọi thứ trên máy tính của bạn. – devios1

+3

@devios thật tuyệt vời hơn bao giờ hết với  Xem – Lewis42

+0

@ Lewis42, ý của bạn là gì? –

1

Khi thay đổi múi giờ, tôi thấy cách dễ nhất để làm điều đó là bằng cách nhấp vào đồng hồ trong thanh thực đơn. Và sau đó chọn "Ngày mở & Tùy chọn thời gian", sau đó chọn Múi giờ của tab.

Hoặc tùy chọn hệ thống -> Ngày và giờ và chọn tab Múi giờ.

Chỉ cần một con trỏ cho bất kỳ ai có thể không biết cách của họ xung quanh OSX.

+3

Đây không phải là câu trả lời, do đó, nó phải là một bình luận. Số lượng nhà phát triển iOS không biết cách của họ xung quanh OS X là ... không. – phatmann

18

Sẽ rất hữu ích nếu Apple cung cấp "Ngày mô phỏng" khi họ cung cấp trình đơn "Mô phỏng vị trí". Những gì tôi làm là đặt điểm ngắt ngay lập tức sau khi nhận được ngày (lưu nó trong một biến) và sau đó sửa đổi giá trị. Hoặc chỉ sửa đổi vị trí mà tôi kiểm tra sự thay đổi ngày và làm cho nó trở lại đúng sự thật.

1

Đây là một chuỗi cũ nhưng gần nhất với câu hỏi của tôi. Tôi cần phải mô phỏng múi giờ cho châu Âu, phương pháp này làm việc cho tôi. Chuyển đến vòi 'TimeZone' thay vì nhấn 'Ngày & Thời gian'. Bỏ chọn hộp 'Đặt múi giờ tự động bằng vị trí hiện tại' và trượt thanh hình chữ nhật dọc (có chấm màu xanh lam trên đó) để mô phỏng thời gian hệ thống của bạn.

enter image description here

2

tôi đã đề xuất một giải pháp tự động cho vấn đề của việc thay đổi thời gian đó bao gồm phương pháp swizzling hacky: https://stackoverflow.com/a/34793193/829338. Tôi giả định rằng cũng nên làm việc để thay đổi múi giờ cho phù hợp.


Tôi cần tự động kiểm tra ứng dụng, yêu cầu thay đổi thời gian của người quản lý. Tôi đã làm, những gì Tom gợi ý: phương pháp hacky vui nhộn.

Vì mục đích minh họa, tôi chỉ thay đổi [NSDate date] nhưng không thay đổi [NSDate dateWithTimeIntervalSince1970:].

Trước tiên, bạn cần tạo phương thức lớp học làm [NSDate date] mới. Tôi thực hiện nó chỉ đơn giản là thay đổi thời gian bằng một timeDifference không đổi.

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

Cho đến nay, khá dễ dàng. Bây giờ đến phần thú vị. Chúng tôi nhận được các phương pháp từ cả hai lớp và thực hiện trao đổi (nó làm việc cho tôi trong AppDelegate, nhưng không phải trong lớp UITests của tôi). Đối với điều này, bạn sẽ cần phải nhập 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 điều này sẽ không hoạt động để thử nghiệm các thông báo cục bộ. –

Các vấn đề liên quan