আইফোন সিমুলেটারে আমি কীভাবে সময় এবং সময় অঞ্চল পরিবর্তন করব ?
আইফোন সিমুলেটারে আমি কীভাবে সময় এবং সময় অঞ্চল পরিবর্তন করব ?
উত্তর:
আমি অনুমান করছি এটি আপনার সিস্টেমের টাইমজোন ব্যবহার করে, তাই সিস্টেমের পছন্দগুলিতে টিজেড পরিবর্তন করা সম্ভবত কৌশলটিই করতে পারে
সিস্টেমের তারিখের সময় পছন্দগুলি পরিবর্তন করার পরে সিমুলেটর পুনরায় আরম্ভ করুন এবং আপনি পরিবর্তনগুলি প্রতিফলিত দেখতে পাবেন। এটা আমার জন্য কাজ করেছে।
এটি কার্যকর হবে যদি অ্যাপল "সিমুলেট অবস্থান" মেনু সরবরাহ করায় তারা একটি "সিমুলেট তারিখ" সরবরাহ করে। আমি যা করি তা হ'ল তারিখ পাওয়ার পরে অবধি একটি ব্রেকপয়েন্ট নির্ধারণ করা হয় (এটি একটি ভেরিয়েবলে সংরক্ষণ করা) এবং তারপরে মানটি সংশোধন করে। অথবা যেখানে আমি তারিখের পরিবর্তন পরীক্ষা করে দেখি ঠিক সেই জায়গাটি সংশোধন করে সত্যে ফিরে আসুন।
স্ক্রিনশট নেওয়ার উদ্দেশ্যে, শেষ পর্যন্ত অ্যাপল আইএমএস সিমুলেটারের স্ট্যাটাস বারে ( এক্সকোড 11 সাল থেকে ) সিমক্টেল সরঞ্জামটি ব্যবহার করে ওভাররাইড করা সম্ভব করেছে :
xcrun simctl status_bar "iPhone Xs" override --time "21:08"
আইওএস 13 এবং কমপক্ষে এক্সকোড 11 থেকে এখানে একটি সমাধান পাওয়া যায়। (পূর্ববর্তী সংস্করণ দিয়ে পরীক্ষা করা হয়নি)
ডিফল্টরূপে আইওএস সিমুলেটর আপনার ম্যাকের সময়টি যা দেখায় তা দেখায়, তবে, আপনি টার্মিনালে এই কমান্ডটি দিয়ে ওভাররাইড করতে এক্সকোডের কমান্ড লাইনটি ব্যবহার করতে পারেন:
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
কেবলমাত্র সেই অ্যাপ্লিকেশনের জন্য সময় অঞ্চল নির্ধারণ করতে একটি এক্সকোড স্কিমে পরিবেশ পরিবর্তনশীল সেট করতে পারেন ।
আপনি ব্যবহার করতে পারেন UTC
, PST
, EST
, পাশাপাশি যেমন জায়গা ভিত্তিক টাইমজোন নাম America/Los_Angeles
। এটি ভালভাবে নথিভুক্ত করা হয়নি তবে আমি কোনও টাইম জোনের নাম সন্দেহ করি কাজ করা উচিত।
এটি ভালভাবে নথিভুক্ত করা হয়নি, তবে উত্স হ'ল বিকাশকারী ফোরামে অ্যাপল বিকাশকারী সমর্থন প্রতিনিধি ।
: আমি সময় যে হল hacky পদ্ধতি swizzling অন্তর্ভুক্ত পরিবর্তন সমস্যার একটি স্বয়ংক্রিয় সমাধান প্রস্তাব https://stackoverflow.com/a/34793193/829338 । আমি ধরে নিয়েছি যে সেই অনুযায়ী সময় অঞ্চল পরিবর্তন করার জন্যও কাজ করা উচিত।
আমার নিজের অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে পরীক্ষা করা দরকার, যার জন্য প্রয়োজন সময় পরিবর্তন করা। টম যে পরামর্শ দিয়েছে তা আমি করেছি: হ্যাপি হ্যাকি পদ্ধতি সুইজলিং
প্রদর্শনের উদ্দেশ্যে, আমি কেবল পরিবর্তন করি [NSDate date]
তবে পরিবর্তন করি না [NSDate dateWithTimeIntervalSince1970:]
।
প্রথমে আপনার শ্রেণি পদ্ধতি তৈরি করার দরকার যা নতুন [এনএসডিট তারিখ] হিসাবে কাজ করে। আমি এটিকে বাস্তবায়িত করে ধীরে ধীরে সময় পরিবর্তন করে সময়কে স্থানান্তরিত করতে।
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);
আমার বিল্ড সার্ভারটি ইউটিসি এবং আমার কয়েকটি ইউনিট পরীক্ষার জন্য টাইমজোনটি পিএসটি হওয়ার দরকার পড়ে। এনএসটিমেজেনে একটি বিভাগ ব্যবহার করে আপনি আপনার কোড ব্যবহার করতে অ্যাপলের বাস্তবায়নটিকে ওভাররাইড করতে পারেন। শুধুমাত্র দ্রুত প্রকল্পগুলির জন্যও কাজ করে।
//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 (সিমুলেটর অ্যাপ্লিকেশন -880.5 কোরসিমুলেটর -681.5.4) এ আমার জন্য কাজ করেছে।