NSUserDefaults
সরাসরি যা সংরক্ষণ করা হয়েছে তা দেখার কোনও উপায় আছে ? আমি দেখতে চাই যে আমার ডেটা সঠিকভাবে সংরক্ষণ হয়েছে কিনা।
NSUserDefaults
সরাসরি যা সংরক্ষণ করা হয়েছে তা দেখার কোনও উপায় আছে ? আমি দেখতে চাই যে আমার ডেটা সঠিকভাবে সংরক্ষণ হয়েছে কিনা।
উত্তর:
আপনি যদি যান তবে আপনি সিমুলেটারে আপনার অ্যাপ্লিকেশনটির জন্য পিলিস্ট ফাইলটি খুঁজে পেতে পারেন:
/ ব্যবহারকারী / আপনার ব্যবহারকারীর নাম / গ্রন্থাগার / অ্যাপ্লিকেশন সহায়তা / আইফোন সিমুলেটর / <সিম সংস্করণ> / অ্যাপ্লিকেশন
এই ডিরেক্টরিতে জিইউডির নামের একাধিক ডিরেক্টরি রয়েছে। আপনি যদি কয়েকটি অ্যাপে কাজ করছেন তবে তাদের মধ্যে কয়েকটি থাকবে। সুতরাং আপনার অ্যাপ্লিকেশন বাইনারি সন্ধান করতে হবে:
find . -name foo.app
./1BAB4C83-8E7E-4671-AC36-6043F8A9BFA7/foo.app
তারপরে জিইউইডি ডিরেক্টরিতে লাইব্রেরী / পছন্দসমূহ ডিরেক্টরিতে যান। তাই:
cd 1BAB4C83-8E7E-4671-AC35-6043F8A9BFA7/Library/Preferences
আপনার দেখতে এমন একটি ফাইল খুঁজে পাওয়া উচিত:
<Bundle Identifier>.foo.pList
এটি পিএলিস্ট সম্পাদকটিতে খুলুন এবং আপনার হৃদয়ের সামগ্রীতে স্থির মানগুলি ব্রাউজ করুন।
NSUserDefaults
, তারপর NSUserDefaults
একটি .plist ফাইলে স্থায়ী নেই বরং মেমরি পরিচালিত ছিল: stackoverflow.com/questions/6193597/...
আপনি লগতে সমস্ত বর্তমান এনএসইউসার ডেফাল্ট মুদ্রণ করতে পারেন:
জাস্ট কীগুলি:
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]);
কী এবং মানসমূহ:
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
for (key, value) in UserDefaults.standard.dictionaryRepresentation() {
print("\(key) = \(value) \n")
}
print(Array(UserDefaults.standard.dictionaryRepresentation()))
// Using dump since the keys are an array of strings.
dump(Array(UserDefaults.standard.dictionaryRepresentation().keys))
আমরা এখানেও ডাম্প ব্যবহার করতে পারি, তবে এটি মান অ্যারেতে প্রতিটি উপাদানটির সম্পূর্ণ উত্তরাধিকারের স্তরক্রম ফিরিয়ে দেবে। যদি বস্তুগুলি সম্পর্কে আরও তথ্যের প্রয়োজন হয় তবে ডাম্প ব্যবহার করুন, অন্যথায় সাধারণ মুদ্রণ বিবৃতিটি নিয়ে এগিয়ে যান।
// dump(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(Array(UserDefaults.standard.dictionaryRepresentation().values))
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation())
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array)
print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().values.array)
আপনি অ্যারেতে প্রতিটি কী-এর মানগুলি পরীক্ষা করতে পারেন by
[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys]
সিমুলেটারে চলার সময় আমি কখনও কখনও নীচের স্নিপেটটি আমার NSUserDephaults ফাইলের অবস্থান মুদ্রণ করতে ব্যবহার করি
এনএসআরাই * পাথ = এনএসএস অনুসন্ধানপথের নির্দেশিকাআইডোমাইনস ( এনএসলিবারি ডিরেক্টরী, এনএসউজারডোমাইনমাস্ক, ইয়েস); এনএসএসস্ট্রিং * ফোল্ডার = [পাথ অবজেক্টএটিআইডেক্স: 0]; এনএসএলগ (@ "আপনার এনএসউসারডেফল্টগুলি এই ফোল্ডারে সংরক্ষণ করা হয়েছে:% @ / পছন্দসমূহ", ফোল্ডার);
এটি পছন্দসই ফোল্ডারে পাথ দেয়
আপনার এনএসউসারডেফল্টগুলি এই ফোল্ডারে সংরক্ষণ করা হয়েছে: / ব্যবহারকারী / দুর্গ / গ্রন্থাগার / অ্যাপ্লিকেশন সহায়তা / আইফোন সিমুলেটর / ব্যবহারকারী / অ্যাপ্লিকেশনস / বিসি 5056 এ0-এফ 46 বি -4 এফ 1-এ 6ডিসি -3 এ 7 ডিএবি 984960 / গ্রন্থাগার / পছন্দসমূহ
আপনার এনএসউসারডেফল্টস ফাইলটি পছন্দসই ফোল্ডারে অবস্থিত এবং আপনার উপসর্গ এবং অ্যাপ্লিকেশন নাম অনুসারে নামকরণ করা হয়েছে যেমন
dk.castleandersen.dreamteam.grid.plist
আমি প্রকৃত ডিভাইসের ক্ষেত্রেও একই হতে পারে বলে আশা করি।
সহজ, যেহেতু প্লাস্ট ফাইলের নাম <app-bundle-identifier>.plist
, আপনি find
এর পথটি সন্ধান করতে কমান্ডটি ব্যবহার করতে পারেন । আপনি যদি পুরো কম্পিউটারটি অনুসন্ধান করেন তবে এটি খুব দীর্ঘ সময় নিতে পারে, তাই আপনাকে ~/Library/Developer/CoreSimulator
এক্সকোড 6 এর মতো একটি ভাল সুযোগ বাছাই করতে হবে ।
উদাহরণ:
find ~/Library/Developer/CoreSimulator -type f -name com.awesome.app.plist
আউটপুটটি এরকম কিছু হবে ...
/Users/hlung/Library/Developer/CoreSimulator/Devices/B61913F6-7D7C-4E45-AE2F-F45220A71823/data/Containers/Data/Application/E4CC51CF-11E5-4168-8A74-6BAE3B89998F/Library/Preferences/com.awesome.app.plist
এবং সেখান থেকে আপনি open
কমান্ড ব্যবহার করতে পারেন । অথবা আপনি যদি আইটার্ম 2 ব্যবহার করেন তবে এটি খোলার পথে কমান্ড ক্লিক করুন।
সুইফটে ৪.০
//func dictionaryRepresentation() -> [String : AnyObject]
কারণ অভিধানআনসুজারডেফাল্টস স্ট্যান্ডার্ড ইউজারডেফল্টস () স্ট্রার্ড: যেকোনওজেক্ট] এর উপস্থিতি
আমরা এটি একটি নিক্ষেপ NSDictionary
। তারপরে এটি বন্ধনী '()' এ চারপাশে রাখার মাধ্যমে আমাদের .allKeys বা .Avalues কল করার অনুমতি দেবে ঠিক যেমন আপনি কোনও এনএসডিকোরিয়ানে আছেন
print((UserDefaults.standard.dictionaryRepresentation() as NSDictionary).allKeys)
কোড নীচে ব্যবহার করুন।
NSLog(@"NSUserDefault: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
জন্য OS X এর অ্যাপ্লিকেশন , পরিবর্তে অ্যাপ্লিকেশানের অক্ষমতা plist ফাইল খুঁজে বের করার, এটা সহজ ব্যবহার করা defaults
কমান্ড লাইন ইউটিলিটি।
NAME এর
defaults -- access the Mac OS X user defaults system
সংক্ষিপ্তসার
defaults [-currentHost | -host hostname] read [domain [key]] defaults [-currentHost | -host hostname] read-type domain key defaults [-currentHost | -host hostname] write domain { 'plist' | key 'value' } defaults [-currentHost | -host hostname] rename domain old_key new_key defaults [-currentHost | -host hostname] delete [domain [key]] defaults [-currentHost | -host hostname] { domains | find word | help }
বর্ণনা
defaults
ব্যবহারকারীদের একটি কমান্ড-লাইন শেল থেকে ম্যাক ওএস এক্স ব্যবহারকারী ডিফল্ট পড়তে, লিখতে এবং মুছতে দেয়। ম্যাক ওএস এক্স অ্যাপ্লিকেশন এবং অন্যান্য প্রোগ্রামগুলি ডিফল্ট সিস্টেমটি ব্যবহার করে ব্যবহারকারীর পছন্দসমূহ এবং অন্যান্য তথ্য রেকর্ড করতে ব্যবহার করতে হবে যা অ্যাপ্লিকেশনগুলি চলমান না থাকলে অবশ্যই বজায় রাখতে হবে (যেমন নতুন নথির জন্য ডিফল্ট ফন্ট, বা কোনও তথ্য প্যানেলের অবস্থান)। এই তথ্যগুলির বেশিরভাগটি একটি অ্যাপ্লিকেশনটির পছন্দসমূহ প্যানেলের মাধ্যমে অ্যাক্সেসযোগ্য তবে এর কিছু নয় যেমন তথ্য প্যানেলের অবস্থান। আপনি এই তথ্য অ্যাক্সেস করতে পারেনdefaults
উদাহরণ:
$ defaults read com.apple.Safari
{
AutoplayPolicyWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
AutoplayQuirksWhitelistConfigurationUpdateDate = "2018-08-24 17:33:48 +0000";
DefaultBrowserPromptingState2 = 4;
...
এক্সকোড 7 এর জন্য
এনএসউসারডেফল্টস স্ট্যান্ডার্ড ডেফল্টগুলি এখানে সংরক্ষণ করা হয়:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Data/Application/{UUID}
স্যুট / অ্যাপ্লিকেশন গোষ্ঠীর জন্য এনএসইউসারডেফল্টগুলি এখানে সঞ্চিত রয়েছে:
/Users/{USER}/Library/Developer/CoreSimulator/Devices/{UUID}/data/Containers/Shared/AppGroup/{UUID}/Library/Preferences/{GROUP_NAME}.plist
আমি https://github.com/scinfu/NCSimulatorPlugin ব্যবহার করার পরামর্শ দেব কারণ আজকাল সমস্ত কিছু ইউআইডি-র পিছনে রয়েছে এবং এটি খুঁজে পাওয়ার ব্যথা। এটি আপনার সিমুলেটর অ্যাপ্লিকেশন ডিরেক্টরিগুলিতে সহজে অ্যাক্সেসের অনুমতি দেয়।
আমি আরও ভাল উপস্থাপনের জন্য মরিওনের পরামর্শের ভিত্তিতে এই পদ্ধতিটি তৈরি করেছি। কল করে এটি ব্যবহার করুন[self logAllUserDefaults]
- (void) logAllUserDefaults
{
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys];
NSArray *values = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allValues];
for (int i = 0; i < keys.count; i++) {
NSLog(@"%@: %@", [keys objectAtIndex:i], [values objectAtIndex:i]);
}
}
NSLog(@"%@", [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] debugDescription]);
(। প্রায় হিসাবে উপরে উত্তর টপ ভোট)
সিমপোল্ডার 2 নামে পরিচিত ম্যাক অ্যাপটির সন্ধান করুন । এটি মেনু বারে বাস করে এবং আপনার ব্যবহৃত সমস্ত সিমুলেটর তালিকাভুক্ত করে এবং তারপরে আপনার প্রতিটি অ্যাপ্লিকেশন দেখায়। একটি নির্বাচন করুন এবং আপনি একটি নতুন ফাইন্ডার উইন্ডো পেয়েছেন, ইতিমধ্যে অ্যাপ্লিকেশনটির ডিরেক্টরিতে খোলা। এটি আপনার অ্যাপ্লিকেশন এবং এর সমস্ত ডিরেক্টরি খুঁজে পাওয়া অত্যন্ত সহজ করে তোলে। এটি একটি বিশাল সময় সাশ্রয়কারী (এবং আমি সহজেই লেখককে দান করেছি)।
এই শেল স্ক্রিপ্টটি অ্যাপ্লিকেশনটির নামের জন্য অনুসন্ধান করে , বান্ডেল আইডিটি অর্জন করে এবং প্লিস্ট ফাইলযুক্ত ফোল্ডার খুলুন ।
#!/bin/bash
appname="$1"
[ -z $appname ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices/ -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
find ~/Library/Developer/CoreSimulator/Devices/ -name "$appbundle.plist" -exec bash -c 'open "$(dirname "$1")"' -- {} \;
else
echo "No application found by that name: $appname.app"
fi
ব্যবহার: iphone-app-folder "My App"
#!/bin/bash
appname="$1"
[ -z "$appname" ] && read -p "Application name : " appname
apppath=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appname.app" -print -quit)
if [[ ! -z $apppath ]]; then
appbundle=$(osascript -e "id of app \"$apppath\"")
echo "Found app $appname (${appbundle})"
echo -e "\033[1;30m$apppath\033[0m"
plists=$(find ~/Library/Developer/CoreSimulator/Devices -name "$appbundle.plist" -print -quit)
count=$(echo plists | wc -l | sed "s/ //g")
if [[ $count -eq 1 ]] && [[ -f "$plists" ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
echo -e "\033[1;30m$plists\033[0m"
plistutil -i "$plists"
/usr/bin/open $(dirname "$plists")
elif [[ ${#plists} -gt 0 ]]; then
echo -e "\033[1;32mUserDefaults found for $appname\033[0m"
i=1
while read line; do
echo "[${i}] ${line} "
i=$((i+1))
done < <(echo "$plists")
echo
read -p "Select defaults to read: [1-${count}] " choice
plist=$(echo ${plists} | sed -n "${choice}p")
plistutil -i "$plist"
/usr/bin/open $(dirname "$plist")
else
echo -e "\033[31mNo UserDefaults plist found for $appname\033[0m"
fi
else
echo -e "\033[31mNo application found by that name: $appname.app\033[0m"
fi
অ্যাপ্লিকেশনটি আমার অ্যাপ (com.organisation.Myapp) / ব্যবহারকারী / প্রতিষ্ঠান / গ্রন্থাগার / বিকাশকারী / কোরসিমুলেটর / ডিভাইসগুলি / 3E4C8DC3-6FF4-428F-A624-B78DBE0B8C83 / ডেটা / ধারক / বান্ডেল / অ্যাপ্লিকেশন / 960A5232-219D-4C46-8CA3- পাওয়া গেছে 01E259D8DDAD / আমার অ্যাপ.এপ
আমার অ্যাপ্লিকেশনটির জন্য ব্যবহারকারীর ডেফাল্টগুলি পাওয়া গেছে
defaults read com.bundleid.app
সুইফটে ২.২
let path = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true)
let folder = path[0]
NSLog("Your NSUserDefaults are stored in this folder: \(folder)/Preferences")
এক্সকোড ডিবাগ কনসোলে NSUserDefaults এর plist ফাইল ফোল্ডারের অবস্থান মুদ্রণ করবে। পাথের স্ট্রিংটি অনুলিপি করুন। আপনার ফাইন্ডারটি খুলুন, গো মেনু আইটেমের ফোল্ডারে যান নির্বাচন করুন, পাথ স্ট্রিংটি আটকান। প্লিস্ট ফাইলটিতে ডাবল ক্লিক করুন। আপনি আপনার এক্সকোড সম্পাদকটিতে সামগ্রীগুলি দেখতে পাবেন।
কেবল সিমুলেটারে কাজ করুন
ধন্যবাদ @ নিলস ক্যাসল
আমি আমার ডেস্কটপে সিমুলেটারের ফোল্ডারে শর্টকাট রাখি যেখানে এটি অ্যাপস রাখে, অর্থাত:
/Users/gary/Library/Application Support/iPhone Simulator/User/Applications
সর্বাধিক সাম্প্রতিক তারিখ অনুসারে বাছাই করা হয়েছে, তারপরে কেবল সাম্প্রতিকতম অ্যাপ্লিকেশন ফোল্ডারের লাইব্রেরি / পছন্দসমূহে যান এবং প্লাস্ট সম্পাদকের মধ্যে ফাইলটি দেখুন।
সুইফট 3
print(UserDefaults.standard.dictionaryRepresentation())
সুইফ্ট 5 এক্সকোড 11.2 সমাধান
এটিই পুরো পথ যেখানে আপনার ব্যবহারকারীর ডেফল্ট কী মানগুলি প্লিস্ট ফাইলে থাকবে। আপনার অ্যাপ্লিকেশন বান্ডেল সনাক্তকারী .plist ফাইল অনুসরণ করুন এবং সন্ধান করুন।
/ ব্যবহারকারী / 'আপনার ব্যবহারকারীর নাম' / গ্রন্থাগার / বিকাশকারী / কোরসিমুলেটর / ডিভাইস / 4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2 / ডেটা / ধারক / তথ্য / অ্যাপ্লিকেশন / 56D7CE31-9A8B-4371-9B0F-9604E239423B0 / লাইব্রেরি / পছন্দসমূহ
এখানে "4176EED3-B9FC-4C77-A25E-ASD201B9FDFG2" আপনার ডিভাইস আইডি
এবং "56D7CE31-9A8B-4371-9B0F-9604E239423B0" আপনার অ্যাপ্লিকেশন আইডি
আমি সাধারণত ফাইন্ডারে পরিবর্তিত শেষ তারিখ অনুসারে ফোল্ডারগুলি বাছাই করে এগুলি পাই। এবং সর্বাধিক সাম্প্রতিক সম্পাদিত ফোল্ডারটি হ'ল আমার ডিভাইস আইডি এবং অ্যাপ্লিকেশন আইডি।
উপভোগ করুন!
এই প্রশ্নের গৃহীত উত্তরটি পড়ার পরে, আমি এই সাধারণ স্ক্রিপ্টটি একসাথে রেখেছি যা আইওএস সিমুলেটর দ্বারা ব্যবহৃত প্লাস্ট ফাইলগুলি NSUserDefaults
পছন্দগুলি সংরক্ষণ করার জন্য খোলে এবং এটি একটি নির্দিষ্ট সেটআপ গ্রহণ করার সময় (আমার পুরোপুরি ফিট করে) এটি অন্যদের জন্য একটি সূচনা পয়েন্ট হিসাবে কাজ করতে পারে ।
$ cat open-prefs-plist.sh
#!/bin/sh
# The project name based on the workspace path, e.g. "MyProject" from "./MyProject.xcworkspace"
WORKSPACE_NAME=$(echo `find . -name *.xcworkspace -type d -exec basename {} \;` | cut -d'.' -f1)
SIMULATOR_PATH="$HOME/Library/Application Support/iPhone Simulator"
# The App's bundle ID taken from its info plist, e.g "com.myproject" from "./MyProject/MyProject-Info.plist"
BUNDLE_ID=`/usr/libexec/PlistBuddy -c Print:CFBundleIdentifier $WORKSPACE_NAME/$WORKSPACE_NAME"-Info.plist"`
# Open all plist files in the simulator path that match the app's bundle ID
# normally one per iOS version
find "$SIMULATOR_PATH" -name $BUNDLE_ID".plist" -type f -print0 \
| while IFS= read -r -d '' PLIST; do
echo $PLIST
open "$PLIST"
done
স্থাপনার উদাহরণ:
$ ls -1
MyProject
MyProject Tests
MyProject.xcodeproj
MyProject.xcworkspace
Podfile
open-prefs-plist.sh
ব্যবহারকারীর পছন্দসই, ক্যাশে এবং অন্যান্য অনেক ডেটাতে পুরো পথ পেতে আপনি এটি ব্যবহার করতে পারেন
print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true))
আপনি application:didFinishLaunchingWithOptions:
আপনার অ্যাপডেলিজেটে কলব্যাক থেকে পছন্দসই ডিরেক্টরিটির পথটি মুদ্রণ করতে পারেন :
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print(FileManager.default.urls(for: .preferencePanesDirectory, in: .userDomainMask).first!)
return true
}
তারপরে আপনি সেখানে কী সংরক্ষণ করেছেন তা দেখতে সরাসরি প্লাস্ট ফাইলটি দেখতে পারেন।