Làm cách nào để thay đổi thời gian và múi giờ trong trình giả lập iPhone?


143

Làm cách nào để thay đổi thời gian và múi giờ trong trình giả lập iPhone ?


để thay đổi hệ thống thời gian và ngày là không có giải pháp. Điều đó tác động đến tất cả các ứng dụng Mac bao gồm tem thời gian xcode. Hành vi đúng là mọi thay đổi của vị trí Trình mô phỏng phải thay đổi thời gian và múi giờ. 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 càng sớm càng tốt
Rudi

Câu trả lời:


214

Tôi đoán nó sử dụng múi giờ hệ thống của bạn, vì vậy việc thay đổi TZ trong Tùy chọn hệ thống có thể sẽ thực hiện thủ thuật

Ảnh chụp màn hình để mô tả


1
Hmm ... Tôi không có tùy chọn này trên trình giả lập của mình. Trên điện thoại của tôi, nó nằm trong Cài đặt -> Chung -> Ngày & Giờ. Trên trình giả lập của tôi, phần Ngày & Giờ không tồn tại.
Vito Andolini

6
Ồ ... thay đổi tùy chọn trong hệ thống của máy, không phải cài đặt của trình giả lập. Đúng. Điều đó đã làm việc!
Vito Andolini

2
một vấn đề trong vấn đề này, thời gian giả lập được cập nhật sau 2 lần 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

1
Tôi đã thay đổi thời gian của Mac và thời gian giả lập không thay đổi, tôi đang kiểm tra xem tôi đã làm đúng bước chưa, thời gian giả lập đã thay đổi. Vì vậy, tôi đã kết luận rằng thời gian giả lập được cập nhật sau 10 đến 15 giây, nhưng điều đó là ổn đối với tôi. @JPK Tôi không biết vấn đề của hệ thống của bạn, cách tốt nhất là in nhật ký thời gian hoàn chỉnh và kiểm tra xem sự cố ở đâu.
AsifHabib

2
Thay đổi thời gian hệ thống của mac, sau đó khởi động lại trình giả lập của bạn.
John Wong

41

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


170
Giải pháp khủng khiếp (về phần của Apple, không phải câu trả lời của bạn). Đây chính xác là điều mà trình giả lập có thể làm như một sự 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 đây là sự thật hơn bao giờ hết với  Watch
lewis

@ Lewis42, ý bạn là gì?
Iulian Onofrei

2
@lulian chỉ là có một thiết bị mới để biết thời gian, nhưng bạn vẫn phải loay hoay như thế này để kiểm tra múi giờ. đó là một bình luận ném đi, tôi đã nhận được thất vọng! :)
lewis

Rất đúng, @ Lewis42. Loay hoay với thời gian hệ thống trên điện thoại của bạn thực sự làm hỏng mọi thứ như dữ liệu chuyển động trên Apple Watch của bạn. Làm cho thử nghiệm có vấn đề, nếu bạn quan tâm đến dữ liệu trên đồng hồ của bạn.
James White

35

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


Để làm cho điều này một câu trả lời tốt hơn: làm thế nào để bạn sửa đổi nó? Bạn thêm một khoảng cho nó? Bạn có thể chia sẻ một số mã?
Mật ong

Bạn có thể làm ngay bây giờ, tại đây stackoverflow.com/a/62155632/2025766 bạn có thể tìm cách thực hiện
Fede Henze

10

Với mục đích chụp ảnh màn hình, Apple cuối cùng đã có thể ghi đè thời gian trên thanh trạng thái của trình giả lập iOS (kể từ Xcode 11 ) bằng cách sử dụng công cụ simctl :

xcrun simctl status_bar "iPhone Xs" override --time "21:08"

5
Tôi nghĩ rằng điều này chỉ ghi đè lên thanh trạng thái (cho mục đích chụp ảnh màn hình). Nhưng nó sẽ không ảnh hưởng đến kết quả của API thời gian / ngày.
Roun

7

Đây là một giải pháp có sẵn từ iOS 13 và Xcode 11 ít nhất. (không thử nghiệm với các phiên bản trước)

Theo mặc định, Trình mô phỏng iOS hiển thị bất cứ lúc nào trên máy Mac của bạn, tuy nhiên, bạn có thể sử dụng dòng lệnh của Xcode để ghi đè lên điều đó bằng lệnh này trong thiết bị đầu cuối:

xcrun simctl status_bar "iPhone 11 Pro Max" override --time '9:41'

Thay thế tên giả lập bằng thiết bị bạn muốn thay đổi.

ảnh chụp màn hình thời gian iPhone

Đối với thanh trạng thái, bạn có phần ghi đè này:

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.

Thời gian có thể là bất kỳ chuỗi. Nhưng nếu bạn muốn thiết bị hiển thị ngày, bạn sẽ cần sử dụng định dạng ISO . Ví dụ: chuỗi ngày ISO hợp lệ sẽ là '2007-01-09T10: 41: 00 + 01: 00'

Nếu không, bạn có thể sử dụng tham số thời gian dưới dạng chuỗi và nó sẽ hiển thị bất cứ thứ gì bạn vượt qua trong đó.

Cảm ơn bài viết gốc của Paul Hudson Đây là liên kết !


1
Khả năng rất tốt, nhưng không cho phép thực sự thay đổi múi giờ để kiểm tra chức năng ứng dụng ở múi giờ khác. Khi sử dụng, ví dụ: xcrun simctl status_bar "iPad Pro (11 inch)" ghi đè - time '2020-01-12T10: 41: 00-06: 00', nó chuyển đổi thời gian đó thành múi giờ CET hiện tại của tôi và đặt thời gian giả lập iOS thành 5 : 41pm
Randomcontrol

1
Để giải thích: Tôi muốn kiểm tra xem ứng dụng của tôi phản ứng thế nào nếu việc sử dụng di chuyển đến múi giờ khác.
ngẫu nhiên

Bạn nói đúng, điều này chỉ ảnh hưởng đến thanh trạng thái, tôi mới thực hiện in thử thời gian hiện tại trên màn hình và nó không thay đổi thời gian hệ thống của thiết bị mô phỏng chỉ hiển thị trên cùng. Tôi đã chỉnh sửa bài viết của mình để phản ánh điều đó. Cảm ơn
nhiều

5

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

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

Chỉ là một con trỏ cho bất cứ ai có thể không biết đường đi quanh OSX.


6
Đây không phải là một câu trả lời, vì vậy nó nên 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

5

Đây là một chủ đề cũ nhưng nó là gần nhất với câu hỏi của tôi. Tôi cần mô phỏng múi giờ cho châu Âu, phương pháp này hiệu quả với tôi. Chuyển đến vòi 'TimeZone' thay vì chạm 'Ngày & Giờ'. 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 trên đó) để mô phỏng thời gian hệ thống của bạn.

nhập mô tả hình ảnh ở đây


4

Bạn có thể đặt TZbiến môi trường trong Lược đồ Xcode để đặt múi giờ chỉ cho ứng dụng đó.

Quản lý các chương trình

Bạn có thể sử dụng UTC, PST, EST, cũng như tên múi giờ nơi có trụ sở như America/Los_Angeles. Nó không được ghi chép tốt, nhưng tôi nghi ngờ bất kỳ tên múi giờ nào cũng hoạt động.

Nó không được ghi chép tốt, nhưng nguồn là một đại diện Hỗ trợ Nhà phát triển của Apple trên các diễn đàn của nhà phát triển .


2
Tại sao điều này được bỏ phiếu? Đó là điều duy nhất làm việc cho tôi thực sự.
Jacob Rohde

Đây là một giải pháp thực sự sạch sẽ. Thật tuyệt vời nếu bạn muốn kiểm tra nhiều múi giờ khác nhau: thêm cài đặt TZ cho từng múi giờ, nhưng hãy nhớ chỉ chọn một múi giờ một lần. Tôi vừa thêm Mỹ / Chicago, Châu Âu / Istanbul, Châu Á / Hong_Kong và Thái Bình Dương / Honolulu để có một loại để tôi có thể theo dõi một lỗi phụ thuộc múi giờ. Điều này sẽ KHÔNG hoạt động nếu bạn cần chụp ảnh màn hình hoặc làm việc với nhiều ứng dụng, nhưng đây là cách rất nhanh để chuyển đổi giữa nhiều múi giờ để kiểm tra một ứng dụng.
Hal Mueller

2

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


Tôi cần kiểm tra ứng dụng của mình một cách tự động, yêu cầu thay đổi thời gian hệ thống. Tôi đã làm, những gì Tom đề nghị: hạnh phúc phương pháp hacky swizz.

Đối với mục đích trình diễn, tôi chỉ thay đổi [NSDate date]nhưng không [NSDate dateWithTimeIntervalSince1970:].

Trước tiên, bạn cần tạo phương thức lớp đóng vai trò là [ngày NSDate] mới. Tôi đã thực hiện nó để đơn giản thay đổi thời gian bằng một thời gian 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 thức từ cả hai lớp và thực hiện trao đổi (nó hoạt động với 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 khẩu 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);

IIRC này sẽ không hoạt động để kiểm tra thông báo địa phương.
Steve Moser

1

Máy chủ xây dựng của tôi là UTC và một số bài kiểm tra đơn vị của tôi cần múi giờ là PST. Sử dụng một danh mục trên NSTimeZone, bạn có thể ghi đè triển khai của Apple để sử dụng mã của mình. Làm việc cho các dự án chỉ nhanh chóng quá.

//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

0

Sau khi thay đổi tùy chọn thời gian ngày hệ thống, tôi phải chọn Hardware> Reset All Content And Settings.
Chỉ điều này hoạt động với tôi trong Phiên bản 10.3 (SimulatorApp-880.5 CoreSimulator-681.5.4).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.