IPhone सिम्युलेटर अपना डेटा कहां संग्रहीत करता है?


234

मेरे पास एक SQLite DB है जिसे मैं ऐप डेटा स्टोर करने के लिए उपयोग कर रहा हूं, और मैं इसके अंदर एक नज़र डालने के साथ कर सकता हूं कि मुझे एक समस्या हो रही है - लेकिन iPhone सिम्युलेटर अपने डेटा को आमतौर पर कहां संग्रहीत करता है?

जवाबों:


290

SDK 3.2 के लिए स्वीकृत उत्तर सही है - SDK 4 उस पथ में / उपयोगकर्ता फ़ोल्डर को बदल देता है जिसमें प्रत्येक लीगेसी iPhone OS / iOS संस्करणों के लिए एक संख्या हो सकती है, जिससे पथ बन सकता है:

~ / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / [ओएस संस्करण] / अनुप्रयोग / [appGUID] /

यदि आपके पास पिछले SDK स्थापित है, तो इसका 3.1.x सिम्युलेटर अपना डेटा सहेजना जारी रखेगा:

~ / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / उपयोगकर्ता / अनुप्रयोग / [appGUID] /

Xcode6 और iOS8 के लिए

~ / Library / डेवलपर / CoreSimulator / उपकरण / [DeviceID] / डेटा / कंटेनर / डेटा / आवेदन / [AppID] /


6
cd ~/Library/Application\ Support/iPhone\ Simulator/
राबर्ट

174
खोजकर्ता के लिए खोज करने के बजाय जिसमें GUID आपका है, नीचे pisca46 का उत्तर नोट करें: po NSHomeDirectory()डीबगर में बस टाइप करें। कट और पेस्ट> Go> गो टू फोल्डर (Cmd-Shift-G) में।
१४:१४

मैं थोड़ा चिंतित हूं कि जब मैं सिम्युलेटर को लॉन्च करता हूं तो यह 8.2 कहता है, लेकिन जब मैं इस फ़ोल्डर में देखता हूं, तो मेरे द्वारा देखा जाने वाला एकमात्र संस्करण संख्या 7.1 है। इससे मुझे चिंता होती है कि मैं गलत जगह देख रहा हूं।
बुग्लॉफ़


4
यह ज़ोर देना कठिन है कि यह उत्तर कितना सरल, अधिक सुविधाजनक, कम त्रुटि वाला है और कम निराशाजनक है (जैसा कि ऊपर mackworth की टिप्पणी में अनुशंसित है)। आप बस के लिए एक लाइन जोड़ सकते हैं NSLogअपने में इस AppDelegateके didFinishLaunchingWithOptions:लिए, या आप कर सकते हैं po NSHomeDirectory()डीबगर से। किसी भी स्थिति में, स्ट्रिंग की प्रतिलिपि बनाएँ और इसे खोजक में खोलें Cmd+Shift+G। यह बेहतर काम करता है क्योंकि आप एक मानक आदेश के साथ पूछ रहे हैं बजाय कुछ जानने के लिए कि परिवर्तन होता है।
बेन्होन

93

यह पता लगाने का एक और (तेज़?) तरीका है जहाँ आपका ऐप डेटा बिना टर्मिनल के है:

  1. सिम्युलेटर में एप्लिकेशन लॉन्च करें
  2. गतिविधि मॉनिटर खोलें
  3. सीपीयू टैब में अपने ऐप का नाम खोजें
  4. इसे डबल क्लिक करें और "ओपन फाइल्स एंड पोर्ट्स" खोलें

यहां छवि विवरण दर्ज करें


1
NSString *uniqueIdentifier = [[[UIDevice currentDevice] identifierForVendor] UUIDString];आपको डिवाइस पहचानकर्ता देता है
oabarca

@oabarca की पहचान करने वाले को आपके सिम्युलेटर के डिवाइसआईडी या ऐपफॉर्ड से कोई लेना-देना नहीं है; मैं Xcode 11.2.1 और iOS 13.2.2
DawnSong

78

मिल गया:

~/Library/Application Support/iPhone Simulator/User/

16
कैसे खोजें: खोजक प्रेस में CMD + SHIFT + G
रोहन-पेटेल

कृपया dsmudger द्वारा नीचे अद्यतन प्रतिक्रिया देखें, यह इस समय सही उत्तर है।
टॉम सुसेल

74

iOS 8 ~ / लाइब्रेरी / डेवलपर / कोरसिम्युलेटर / डिवाइस / [डिवाइस आईडी] / डेटा / एप्लीकेशन / [appGUID] / दस्तावेज़ /


1
डिवाइस आईडी प्राप्त करने का कोई तरीका?
12m पर msmq

2
@msmq की कोशिशxcrun instruments -s
Shazron

11
@msmq अपने वर्तमान सिम्युलेटर, हार्डवेयर -> डिवाइस -> डिवाइस प्रबंधित करें ... -> अपने सिम्युलेटर को "SIMULATORS" सूची में चुनें। फिर दाईं ओर "पहचानकर्ता" है। यह डिवाइस आईडी है।
रिचएक्स

यहां [appGUID] कैसे खोजें?
यांग यू

66

सिंह पर Users/[username]/Libraryछिपी है।

फाइंडर में बस देखने के लिए, स्क्रीन के शीर्ष पर 'गो' मेनू पर क्लिक करें और 'लाइब्रेरी' दिखाने के लिए 'ऑल्ट' कुंजी दबाए रखें।

'लाइब्रेरी' पर क्लिक करें और आप अपने पहले से छिपे हुए लाइब्रेरी फ़ोल्डर को देख सकते हैं।

पहले सलाह दी जाती है:

उपयोग

chflags nohidden /users/[username]/library

फ़ोल्डर प्रदर्शित करने के लिए एक टर्मिनल में।


1
उसके बाद आप इसे यहां पा सकते हैं: ~ / लाइब्रेरी / एप्लीकेशन सपोर्ट / iPhone सिम्युलेटर / [OS वर्जन] / एप्लीकेशन / [appGUID] /
राफेल

यह सामान्य उपयोगकर्ताओं के लिए एक दिलचस्प सुझाव है, लेकिन यह मुझे लगता है कि iOS / OS X डेवलपर्स को नियमित रूप से लाइब्रेरी तक पहुंचने की आवश्यकता है और इसलिए वह इसे फिर से छिपाना नहीं चाहेगा। (तब फिर से, मुझे लगता है कि बहुत सारे डेवलपर फ़ाइंडर के बजाय टर्मिनल का उपयोग करते हैं?)
आर्टऑफवर्फेल

58

सबसे आसान तरीका है।

  1. कहीं ब्रेकपॉइंट पकड़ो।

  2. कंसोल विंडोpo NSHomeDirectory() में दर्ज करें

परिणाम:

(lldb) पो NSHomeDirectory () / उपयोगकर्ता / usernam / लाइब्रेरी / डेवलपर / CoreSimulator / डिवाइसेस / 4734F8C7-B90F-4566-8E89-5060505E387F (डेटा / कंटेनर / डेटा / एप्लीकेशन / 395818BB-6D0F-499F-AAFE-068


1
अगर मैं केवल यह पहले से जानता था। यह सही उत्तर होना चाहिए था
इवान केंटारिनो

मुझे लगता है कि अन्य सभी उत्तर भी सही हैं। लेकिन यह मेरे लिए आसान लगता है: -]
लाल कृष्ण

37

यदि सिम्युलेटर चल रहा है, तो आप किसी भी ऐप के कंटेनर में पथ प्राप्त कर सकते हैं:

xcrun simctl get_app_container booted <app bundle identifier>

उदाहरण आउटपुट:

$ xcrun simctl get_app_container booted com.example.app
/Users/jappleseed/Library/Developer/CoreSimulator/Devices/7FB6CB8F-63CB-4F27-BDAB-884814DA6FE0/data/Containers/Bundle/Application/466AE987-76BC-47CF-A207-266E65E7DE0A/example.app

simctlUDID डिवाइस की अपेक्षा कहीं भी "बूटेड" को अधिकांश कमांड में प्रतिस्थापित किया जा सकता है।

आप के साथ उपकरणों की सूची देख सकते हैं xcrun simctl listऔर विशिष्ट आदेशों पर सहायता प्राप्त कर सकते हैं xcrun simctl help

अपडेट : Xcode 8.3 में लोकप्रिय अनुरोध के द्वारा आप अब "ऐप", "डेटा", "ग्रुप", या ऐप ग्रुप आइडेंटिफ़ायर जोड़कर अपने इच्छित प्रकार के कंटेनर को निर्दिष्ट कर सकते हैं।

डेटा कंटेनर प्राप्त करने के लिए:

$ xcrun simctl get_app_container booted com.example.app data

बहुत बढ़िया। Device_id और appId प्राप्त करने के लिए कमांड चलाने की आवश्यकता नहीं है। सभी को पाने के लिए एक कदम
iamhite

इस एक को स्वीकार किया जाना चाहिए, क्योंकि यह ऐसी चीजों को करने का सबसे "स्थिर" तरीका है।
ओला

35

Xcode 5 के साथ आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

#import <Foundation/NSFileManager.h>

तथा:

NSString *homeDir = NSHomeDirectory();
NSLog(@"%@",homeDir);

परिणाम की तरह लग सकता है:

"/Users/<your user name>/Library/Application Support/iPhone Simulator/7.1/Applications/hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh"

जहां hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhhकुछ हेक्स स्ट्रिंग आपके iOS ऐप की पहचान कर रही है।


16
यह डिबगर में भी काम करता है:po NSHomeDirectory()
'16

30

लगता है कि Xcode 6.0 ने इस स्थान को एक बार फिर से स्थानांतरित कर दिया है, कम से कम iOS 8 सिमुलेटर के लिए।

~ / Library / डेवलपर / CoreSimulator / उपकरण / [DeviceID] / डेटा / कंटेनर / डेटा / आवेदन / [AppID]


4
~ / लाइब्रेरी / डेवलपर / कोरसिमुलेटर / डिवाइसेस / [डिवाइसआईडी] में "डिवाइस.प्लिस्ट" नाम की एक .plist फ़ाइल भी है यदि आप अंदर देखते हैं तो आप iphone-6 या iphone-5s जैसे डिवाइस का नाम पता कर सकते हैं। डिवाइसआईडी बहुत भ्रामक है इसलिए मुझे लगता है कि आपको .plist फ़ाइल के अंदर देखना चाहिए।
EFE

1
AppID कैसे प्राप्त करें?
प्रदर्शन नाम

1
मैंने ऐप आईडी खोजने के लिए धोखा दिया, 'ls -l' का उपयोग करके और यह पता लगा लिया कि हाल ही में किस ऐप की फाइलें बनाई गई थीं। दूसरों के लिए भी काम कर सकते हैं।
माया वेबस्टर

1
या सूची के शीर्ष पर ऐप प्राप्त करने के लिए "डेट क्रिएट" द्वारा खोजक सॉर्ट में।
अम्मार मुजीब

30

यह पता लगाने के लिए सबसे आसान तरीकों में से एक है कि ऐप सिम्युलेटर के भीतर कहां है। उपयोगकर्ता "NSTemporaryDirectory ()"

कदम-

  1. ऐप के भीतर कहीं भी ब्रेकपॉइंट लगाएं और ऐप चलाएं।
  2. जब ऐप ब्रेकपॉइंट पर रुक जाता है, तो Xcode कंसोल में निम्न कमांड टाइप करें।

    पो NSTemporaryDirectory ()

उचित अंतर्दृष्टि के लिए नीचे दी गई छवि देखेंयहां छवि विवरण दर्ज करें

अब आपके पास अस्थायी फ़ोल्डर तक सटीक पथ है। आप वापस जा सकते हैं और एप्लिकेशन से संबंधित सभी फ़ोल्डर्स देख सकते हैं।

आशा है कि यह भी मदद करता है। हैप्पी कोडिंग :)


1
शांत टिप, लेकिन क्यों नहीं po NSHomeDirectory()?
कोड रोडी

9

जहां Xcode 2019+ कैटालिना में सिमुलेटर स्टोर करता है, Xcode 11.0

runtimes

$ open /Library/Developer/CoreSimulator/Profiles/Runtimes

उदाहरण के लिए: iOS 13.0, watchOS 6.0ये सबसे अंतरिक्ष ले, अब तक। हर एक ~ 5GB तक हो सकता है

उपकरण

$ open ~/Library/Developer/CoreSimulator/Devices

उदाहरण के लिए: iPhone Xr, iPhone 11 Pro Max। ये आमतौर पर <15 mb होते हैं।

व्याख्या

सिमुलेटर को रनटाइम और उपकरणों के बीच विभाजित किया जाता है। अगर तुम दौड़ते हो$ xcrun simctl list हैं एक अवलोकन देख सकते हैं, लेकिन यदि आप इन सिमुलेटरों का भौतिक स्थान ढूंढना चाहते हैं, तो इन निर्देशिकाओं को देखें जिन्हें मैंने दिखाया है।

आपके द्वारा समर्थित रनटाइम को हटाने के लिए यह पूरी तरह से सुरक्षित है। आप चाहें तो इन्हें बाद में फिर से इंस्टॉल कर सकते हैं।


8

बस यह करें:

NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSLog(@"%@", docDirPath);

और आपको कुछ इस तरह मिलेगा:

/ उपयोगकर्ताओं / व्यवस्थापक / Library / डेवलपर / CoreSimulator / उपकरण / 58B5B431-D2BB-46F1-AFF3-DFC789D189E8 / डेटा / कंटेनर / डेटा / आवेदन / 6F3B985F-351E-468F-9CFD-BCBE217A25FB / दस्तावेज़

वहां जाएं और आप XCode के संस्करण की परवाह किए बिना अपने ऐप के दस्तावेज़ फ़ोल्डर देखेंगे। (खोजकर्ता में "फ़ोल्डर पर जाएं ..." का उपयोग करें और एक पथ निर्दिष्ट करें "~ / पुस्तकालय")।

स्ट्रिंग पथ के लिए स्विफ्ट संस्करण:

let docDirPath =
NSSearchPathForDirectoriesInDomains(.documentDirectory,
                                    .userDomainMask, true).first
print(docDirPath)

और फ़ोल्डर URL:

let docDirUrl =
    FileManager.default.urls(for: .documentDirectory,
                             in: .userDomainMask).first
print(docDirUrl)

लगभग एक ही उत्तर पोस्ट करने वाला था। आईओएस सिम्युलेटर के किसी भी संस्करण पर हमेशा सही रास्ता देने के लिए इस पद्धति का लाभ है। वैसे, आप डिबगर में url वैरिएबल के मान को भी कॉपी कर सकते हैं, अगर आप इसे लॉग इन नहीं करना चाहते हैं;)
Moose

7

IOS 5 में:

/ उपयोगकर्ता / [उपयोगकर्ता नाम] / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / 5.0 / अनुप्रयोग / [AppGUID] /


6

Xcode 4.6 के लिए यह निम्नलिखित पथ में संग्रहीत हो जाता है ...

/ उपयोगकर्ता / [करंट लगाने वाले] / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / 6.1 / अनुप्रयोग /

इसे जानने के लिए प्रोग्रामेटिकली निम्न कोड का उपयोग करें

  NSLog(@"path:%@",[[NSBundle mainBundle]bundlePath]);

2
स्विफ्ट :print("path: \(NSBundle.mainBundle().bundlePath)")
स्विफ्टआर्किटेक्ट

4

IOS 8 के लिए

दस्तावेज़ फ़ोल्डर का पता लगाने के लिए , आप दस्तावेज़ फ़ोल्डर में एक फ़ाइल लिख सकते हैं:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:@"Words.txt"];
NSString *content = @"Apple";
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];

कहते हैं, में didFinishLaunchingWithOptions

तब आप एक टर्मिनल खोल सकते हैं और फ़ोल्डर पा सकते हैं:

$ find ~/Library -name Words.txt

2

अगर किसी को अभी भी शेर में इस समस्या का सामना करना पड़ रहा है, तो आपके ~ / लाइब्रेरी डायर को देखने के लिए 19 विभिन्न युक्तियों के साथ एक शानदार लेख है। डैन फ्रिकेस के लेख को यहां देखें http://www.macworld.com/article/161156/2011/07/view_library_folder_in_lion.html

याद रखें कि सिम्युलेटर की निर्देशिका नीचे दी गई है

~ / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर / उपयोगकर्ता /


2

MacOS कैटालिना के लिए, मैंने अपना db पाया:

~/Library/Developer/CoreSimulator/Devices/{deviceId}/data/Containers/Data/Application/{applicationId}/Documents/my.db

इसे प्राप्त करने के लिए applicationId, मैंने अभी तक संशोधित करके फ़ोल्डर्स को सॉर्ट किया है, हालांकि मुझे यकीन है कि ऐसा करने का एक बेहतर तरीका है।


1

प्रतिक्रिया-मूल उपयोगकर्ताओं के लिए जो अक्सर Xcode का उपयोग नहीं करते हैं, आप बस उपयोग कर सकते हैं find। एक टर्मिनल खोलें और डेटाबेस के नाम से खोजें।

$ find ~/Library/Developer -name 'myname.db'

यदि आपको सटीक नाम नहीं पता है तो आप वाइल्डकार्ड का उपयोग कर सकते हैं:

$ find ~/Library/Developer -name 'myname.*'


0

आप नीचे दिए गए कोड का उपयोग करके देख सकते हैं

NSString *fileName = @"Demo.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];
    NSLog(@"File path%@",pdfFileName);

0

वे एप्लिकेशन खोलें जहां आप App हैं जो आप सिमुलेटर पर xCode में बनाते हैं, निम्न कार्य करें:

  1. एक खोजक वाइन्डर (स्माइली फेस आइकन) खोलें
  2. इसके बाद GO -> फोल्डर पर जाएं
  3. प्रकार: ~ / पुस्तकालय / अनुप्रयोग समर्थन / iPhone सिम्युलेटर
  4. निर्देशिकाएँ अलग सिमुलेटर के iOS संस्करण हैं
  5. उप निर्देशिकाएँ सिम्युलेटर पर स्थापित एप्लिकेशन हैं
  6. दस्तावेज़ फ़ोल्डर वह जगह है जहाँ उपयोगकर्ता ने सामग्री तैयार की है जो आईक्लाउड पर बैकअप देती है

0

इस कार्यक्रम से मेरा कोई ताल्लुक नहीं है, लेकिन अगर आप खोजकर्ता सिमपॉन्डर्स में से किसी को भी खोलना चाहते हैं तो यह अविश्वसनीय रूप से आसान हो जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.