मैं iPhone सिम्युलेटर में समय और समय क्षेत्र कैसे बदल सकता हूं ?
मैं iPhone सिम्युलेटर में समय और समय क्षेत्र कैसे बदल सकता हूं ?
जवाबों:
मैं अनुमान लगा रहा हूं कि यह आपके सिस्टम टाइमजोन का उपयोग करता है, इसलिए सिस्टम प्रेफरेंस में टीबी को बदलना शायद चाल चलेगा
सिस्टम दिनांक समय वरीयताओं को बदलने के बाद सिम्युलेटर को फिर से शुरू करें और आप उन परिवर्तनों को परिलक्षित देखेंगे। इसने मेरे लिए काम किया।
यह उपयोगी होगा यदि Apple ने "Simulate date" प्रदान की क्योंकि वे "Simulate Location" मेनू प्रदान करते थे। मैं क्या कर रहा हूँ एक ब्रेकपॉइंट सेट करने के तुरंत बाद दिनांक (एक चर में बचत) और फिर मूल्य को संशोधित करें। या बस उस स्थान को संशोधित करें जहां मैं तिथि परिवर्तन के लिए जांच करता हूं और इसे वापस लौटाता हूं।
स्क्रीनशॉट लेने के उद्देश्य से, Apple ने आखिरकार simctl टूल का उपयोग करके iOS सिम्युलेटर ( Xcode 11 के बाद से ) की स्थिति पट्टी पर समय को ओवरराइड करना संभव बना दिया है :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
यहाँ iOS 13 और Xcode 11 से कम से कम एक समाधान उपलब्ध है। (पिछले संस्करणों के साथ परीक्षण नहीं किया था)
डिफ़ॉल्ट रूप से iOS सिम्युलेटर आपके मैक पर जो भी समय है, दिखाता है, हालाँकि, आप Xcode की कमांड लाइन का उपयोग टर्मिनल में इस कमांड के साथ ओवरराइड करने के लिए कर सकते हैं:
xcrun simctl status_bar "iPhone 11 Pro Max" override --time '9:41'
सिम्युलेटर नाम को उस डिवाइस से बदलें, जिसे आप बदलना चाहते हैं।
स्टेटस बार के लिए आपके पास यह ओवरराइड है:
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.
समय कोई भी हो सकता है। लेकिन अगर आप चाहते हैं कि डिवाइस आपको तारीख दिखाने के लिए आईएसओ प्रारूप का उपयोग करे । उदाहरण के लिए एक वैध आईएसओ तिथि स्ट्रिंग '2007-01-09T10: 41: 00 + 01: 00' होगी।
अन्यथा आप समय पैरामीटर को एक स्ट्रिंग के रूप में उपयोग कर सकते हैं और इसमें जो भी आप पास करते हैं वह प्रदर्शित होगा।
पॉल हडसन द्वारा मूल पोस्ट के लिए धन्यवाद के साथ यहाँ लिंक है !
आप TZ
उस एप्लिकेशन के लिए समय क्षेत्र निर्धारित करने के लिए Xcode स्कीम में पर्यावरण चर सेट कर सकते हैं ।
आप उपयोग कर सकते हैं UTC
, PST
, EST
, साथ ही इस तरह के रूप को स्थान-आधारित समय क्षेत्र नामों के रूप में America/Los_Angeles
। यह अच्छी तरह से प्रलेखित नहीं है, लेकिन मुझे संदेह है कि किसी भी समय क्षेत्र का नाम काम करना चाहिए।
यह अच्छी तरह से प्रलेखित नहीं है, लेकिन स्रोत डेवलपर मंचों पर एक Apple डेवलपर समर्थन प्रतिनिधि है ।
टाइमजोन बदलते समय, मुझे ऐसा करने का सबसे आसान तरीका मिला, मेनूबार में घड़ी पर क्लिक करके। और फिर "ओपन डेट एंड टाइम प्रेफरेंस" का चयन करें और फिर टैब टाइम जोन चुनें।
वैकल्पिक रूप से सिस्टम प्राथमिकताएं -> दिनांक और समय और टैब समय क्षेत्र चुनें।
बस किसी के लिए एक सूचक जो OSX के आसपास अपना रास्ता नहीं जानता हो सकता है।
यह एक पुराना धागा है लेकिन यह मेरे सवाल के सबसे करीब है। मुझे यूरोप के लिए समय क्षेत्र का अनुकरण करने की आवश्यकता है, यह विधि मेरे लिए काम करती है। 'दिनांक और समय' नल के बजाय 'टाइमज़ोन' टैप पर जाएं। अपने सिस्टम के समय का अनुकरण करने के लिए 'सेट टाइम ज़ोन को स्वचालित रूप से करेंट लोकेशन' बॉक्स का उपयोग करके अनचेक करें और वर्टिकल रेक्टेंगल बार (उस पर ब्लू डॉट के साथ) को स्लाइड करें।
मैंने उस समय को बदलने की समस्या के लिए एक स्वचालित समाधान का प्रस्ताव दिया है जिसमें हैक करने की विधि शामिल है स्विज़लिंग: https://stackoverflow.com/a/34793193/829338 । मुझे लगता है कि तदनुसार समय क्षेत्र को बदलने के लिए भी काम करना चाहिए।
मुझे अपने ऐप का स्वचालित रूप से परीक्षण करने की आवश्यकता थी, जिसके लिए sys समय को बदलना आवश्यक था। मैंने किया था, टॉम ने क्या सुझाव दिया था: खुश हैकॉई विधि स्वाइलिंग।
प्रदर्शनकारी उद्देश्यों के लिए, मैं केवल परिवर्तन करता हूं [NSDate date]
लेकिन नहीं [NSDate dateWithTimeIntervalSince1970:]
।
सबसे पहले आपको अपनी कक्षा विधि बनाने की आवश्यकता है जो नए [NSDate दिनांक] के रूप में कार्य करती है। मैंने इसे लागू करने के लिए बस एक निरंतर timeDifference द्वारा समय बदलने के लिए।
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];
}
अब तक, बहुत आसान है। अब मज़े वाला हिस्सा आया। हम दोनों वर्गों और विनिमय कार्यान्वयन से विधियां प्राप्त करते हैं (यह मेरे लिए ऐपडेलगेट में काम करता था, लेकिन मेरे यूआईटैस्ट वर्ग में नहीं)। इसके लिए आपको आयात करना होगा 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 है और मेरे कुछ यूनिट परीक्षणों में पीएसटी होने के लिए टाइमज़ोन की आवश्यकता थी। 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
सिस्टम दिनांक समय वरीयताओं को बदलने के बाद मुझे Hardware
> चुनना था Reset All Content And Settings
।
केवल इसने मेरे लिए संस्करण 10.3 (SimulatorApp-880.5 CoreSimulator-681.5.4) में काम किया।