IT

iPhone 시뮬레이터에서 시간과 존재를 변경하는 방법은 무엇입니까?

lottoking 2020. 7. 8. 22:38
반응형

iPhone 시뮬레이터에서 시간과 존재를 변경하는 방법은 무엇입니까?


iPhone 시뮬레이터 에서 말하는 것과 제시를 어떻게 변경 합니까?


시스템을 사용하는 것으로 생각합니다. 시스템 환경 설정에서 TZ를 변경하면 트릭을 수행 할 수 있습니다.

설명을위한 스크린 샷


시스템 날짜 시간 환경 설정을 변경 한 후 시뮬레이터를 다시 시작하면 변경 사항이 반영됩니다. 그것은 나를 위해 일했다.


Apple이 "시뮬레이션 위치"메뉴를 제공 할 때 "시뮬레이션 날짜"를 제공하는 경우 유용합니다. 내가하는 일은 날짜를받은 것입니다. (만약에 저장) 중단 점을 설정 한 다음 값을 수정하는 것입니다. 또는 날짜 변경을 확인한 지점을 수정하여 true로 반환하십시오.


가장 쉬운 방법은 메뉴 막대에서 시계를 클릭하는 것입니다. 그런 다음 "날짜 및 시간 환경 설정 열기"를 선택한 다음 선택 탭을 선택하십시오.

또는 시스템 환경 설정-> 날짜 및 시간을 선택하고 탭을 선택하십시오.

OSX와 관련하여 자신의 길을 모르는 사람을위한 포인터입니다.


이것은 일반적이지만 내 질문에 가장 가깝습니다. 시간대를 시뮬레이트해야합니다.이 방법은 저에게 유럽입니다. '날짜 및 시간'탭 대신 'TimeZone'탭으로 이동하십시오. '현재 위치를 사용하여 선언을 자동으로 설정'확인란의 선택을 취소하고 세로 사각형 막대 (파란 점이 있음)를 확장 시스템 시간을 시뮬레이션합니다.

여기에 이미지 설명을 입력하십시오


Apple은 마침내 simctl 도구 를 사용하여 iOS 시뮬레이터 ( Xcode 11 부터) 상태 표시 줄에서 시간을 시뮬레이션 할 수 있습니다 .

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

해키 메소드 스위 즐링 ( https://stackoverflow.com/a/34793193/829338) 을 포함하여 시간을 변경하는 문제에 대한 자동 솔루션을 제안했습니다 . 제시를 결정하게 변경해야합니다.


시스템 시간을 변경해야하는 앱을 자동으로 테스트해야합니다. 나는 Tom이 제안한 것 : 행복한 해키 방법 스위 즐링.

목적으로 만 실증 변경 [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

참고 URL : https://stackoverflow.com/questions/1699671/how-to-change-time-and-timezone-in-iphone-simulator

반응형