Sqlite फ़ाइल स्थान कोर डेटा


91

आमतौर पर, कोर डेटा ऐप्स के लिए स्क्लाइट स्टोर फ़ाइल में स्थित है

लाइब्रेरी> एप्लीकेशन सपोर्ट> आईफोन सिम्युलेटर> 7.1 (या जो भी वर्जन आप इस्तेमाल कर रहे हैं)> एप्लीकेशन> (जो भी फोल्डर में आपका ऐप है)> डॉक्यूमेंट्स

फ़ोल्डर, लेकिन मैं इसे IOS 8 में नहीं ढूंढ सकता। मुझे लगता है कि वे सिर्फ iPhone सिम्युलेटर फ़ोल्डर के अंदर एक 8.0 फ़ोल्डर जोड़ देंगे, लेकिन यह वहां नहीं है। क्या कोई इसका पता लगाने में सक्षम है?


2
मुझे पूरा यकीन है कि आपका प्रश्न डुप्लिकेट है, इस पर विचार करते हुए मैंने इसे आपके द्वारा पूछे जाने से एक सप्ताह पहले पूछा था। इसकी सराहना की जाएगी यदि आप मुझे इस प्रश्न का श्रेय देते हैं, तो यह पहला प्रश्न है जिसे मैंने कभी पूछा है, और ऐसा लगता है कि आपके पास पहले से ही एक प्रतिष्ठा है @HenryGlendening
enlyte



2
क्या किसी को पता है कि वास्तविक डिवाइस से कोरडेटा फाइलें कैसे प्राप्त करें? मैं iTunes के माध्यम से Xcode के पुराने संस्करणों में ऐसा करता था, लेकिन चूंकि Xcode 8 / iOS10 मुझे नहीं लगता कि CoreData फाइलें ऐप के दस्तावेज़ निर्देशिका में संग्रहीत हैं, इसलिए iTunes में दिखाई नहीं देती हैं। क्या आपके कंप्यूटर पर डिवाइस से CoreDate फाइलें प्राप्त करने का एक तरीका है?
बोकाक्सिका

1
मुझे नहीं पता कि वे इसे क्यों जारी रखते हैं। उन्हें इसे कहीं रखना चाहिए और बस इसे छोड़ देना चाहिए।
एक्सप्रेशन

जवाबों:


135

मैं sqlite फ़ाइल का पता लगाने में कामयाब रहा, और अब इस रास्ते में:

लाइब्रेरी / डेवलपर / कोरसिम्युलेटर / डिवाइस / (नंबर और अक्षर) / डेटा / कंटेनर / डेटा / आवेदन / (नंबर और पत्र) / दस्तावेज़ /

(संख्या और अक्षर) एक फ़ोल्डर के लिए खड़ा है जो आपके ऐप / कंप्यूटर के लिए अद्वितीय होगा, लेकिन इस तरह दिखेगा: 779AE2245-F8W2-57A9-8C6D-98643B1CF01A

मैं appDelegate.m में जाकर, इसे नीचे स्क्रॉल करके खोजने में सक्षम था

- (NSURL *)applicationDocumentsDirectory 

विधि, और इस तरह से वापसी पथ NSLogging:

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory
{
    NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory  inDomains:NSUserDomainMask] lastObject]);

    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
 }

यह आपको अपना अनोखा मार्ग देगा, जिससे आपके लिए यह आसान हो जाएगा, क्योंकि यह मुश्किल है कि यह अक्षरों और संख्याओं के 2 अनाम फ़ोल्डरों / तारों के साथ मिल रहा है।

स्विफ्ट 4.2:

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

4
xcrun simctl listसिम्युलेटर नामों और उनके यूयूआईडी की सूची प्राप्त करने के लिए उपयोग करें ।
सैंडी चैपमैन

1
ध्यान दें कि यदि आप किसी ऐप समूह के लिए साझा डेटाबेस का उपयोग करते हैं (उदाहरण के लिए जब आप एक्सटेंशन का उपयोग कर रहे हैं) पथ लाइब्रेरी / डेवलपर / कोरसिम्युलेटर / उपकरण / $ नंबर / डेटा / कंटेनर / साझा / AppGroup / $ संख्या / नाम है।
andreacipriani

6
ध्यान दें, 2019 में , Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/अब सच नहीं है। अब आपको .sqlite और संबंधित दो फाइलें मिलींLibrary/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/
Gang Fang

@GangFang मैं अपने ऑब्जेक्टिव सी कोड को बदलने की कोशिश कर रहा हूं जो Xcode 7 में नवीनतम स्विफ्ट संस्करण में बना है और नई परियोजना बना रहा है, इसलिए मैं इस दो अलग .sqlite फ़ाइल को एक बार में कैसे स्थानांतरित कर सकता हूं।
संजय शाह

84

वास्तव में डीबी फ़ाइल का स्थान प्राप्त करने के लिए सबसे सरल तरीके का उल्लेख किया गया कोई भी उत्तर नहीं है।

आपको अपने स्रोत कोड को संशोधित करने की भी आवश्यकता नहीं है, क्योंकि यह XCode में एक सरल रन टाइम स्विच है।

  1. रन बटन के बगल में एडिट स्कीम चुनें ...

    योजना संपादित करें

  2. रन / तर्क चुनें और निम्नलिखित दो विकल्प जोड़ें:

    -com.apple.CoreData.SQLDebug 1
    -com.apple.CoreData.Logging.stderr 1

    विकल्प

  3. एप्लिकेशन चलाएँ, और आप लॉग में देखेंगे:

    लॉग


2
यह वास्तव में सबसे सरल और सबसे अच्छा समाधान है। धन्यवाद!
ओमिड एरियन

मेरे लिए लॉग दिखाई नहीं देता है, आप मेरी मदद कर सकते हैं?
अगस्तो

@Augusto मैं यहां आपकी मदद नहीं कर सकता, लेकिन अगर आप इसके बारे में एक नया सवाल पूछते हैं तो लोग शायद इसका जवाब दे सकते हैं और आपकी मदद कर सकते हैं।
हाइपरनॉट

बहुत बढ़िया जवाब! यह स्वीकृत उत्तर होना चाहिए। इसके अलावा क्या कोई ऐसा तरीका है जिसे आप Xcode वरीयताओं के अलावा, कंसोल में इस आउटपुट का रंग बदलने के लिए जानते हैं? यह अच्छा होगा यदि यह थोड़ा और बाहर खड़ा हो जाए
Coreyd303

संकेत के लिए धन्यवाद! पथ परिवर्तन लगातार हो रहा है, मेरे लिए अब (iOS 13.3.1) पथ / उपयोगकर्ता / *** / लाइब्रेरी / डेवलपर / CoreSimulator / उपकरण / A91CEB1C-B15D-46B5-9B83-DB22056DEFD1 / डेटा / कंटेनर / साझा / AppGroup / B835599A- है CA36-432F-871A-17EDA181CC54 / इसलिए इसे कोरडाटा डीबग जानकारी से प्राप्त करने के बजाय खुद को अनुमान लगाने की कोशिश करना बेहतर है।
अलकिर

52

इस सरल 3 चरण का प्रयास करें

  1. didFinishLaunchingWithOptionsअपने में निम्न कोड की प्रतिलिपि बनाएँ appdelegate.mऔर से पहले एक विराम बिंदु जोड़ेंNSLog()

    (BOOL)application:(UIApplication *)application  
    
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSLog(@"%@",[paths objectAtIndex:0]);
     }

या स्विफ्ट में:

let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
print(paths[0])

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

2.ऑपर फाइंडर-> गो -> फोल्डर पर जाएं और स्टेप 1 से कॉपी किए गए पाथ को पेस्ट करें

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

3. याह !!! आप अपने डेस्टिनेशन में हैं।


2
Swift3 उपयोग के लिए: NSSearchPathForDirectoriesInDomains (.applicationSupportDirectory, .userDomainMask, सच)
Yohst

38

यदि आपका ऐप Core Data का उपयोग कर रहा है, तो यह टर्मिनल में sqlite फ़ाइल को खोजने की बात है:

find ~ -name app_db_file_name.sqlite

परिणाम आपके ऐप वाले सिम्युलेटर फ़ोल्डरों के लिए पूर्ण पथ को सूचीबद्ध करेंगे।


2
@AlexWei मैं चाहता हूं कि Apple "मेनू में फ़ोल्डर सिम्युलेटर दस्तावेज़ प्रकट करें" या कुछ इसी तरह फ़ाइल मेनू पर एक बटन जोड़ देगा। हास्यास्पद लगता है कि यह अभी भी वहां नहीं है, यह देखते हुए कि वे बदलते रहते हैं जहां वे फाइलें संग्रहीत कर रहे हैं ...
DiscDev

1
यदि अन्य लोग रुचि रखते हैं, तो मैंने इस आदेश को अपने लाभार्थी के रूप में एक उपनाम के रूप में जोड़ा alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite":। जब आप दोहराव से इस कमांड को चलाने की आवश्यकता हो तो इसका काम।
टोस्ट

सूदो ~ ~-name app_db_file_name.sqlite ने मेरी मदद की
कादिर हुसैन

21

मैंने इस एक-लाइनर ( Gist ) को हैक कर लिया है : find ~/Library/Developer/CoreSimulator/Devices/ -name device.plist -exec sh -c "/usr/libexec/PlistBuddy -c \"print UDID\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print name\" '{}' | tr '\n' ' '" \; -exec sh -c "/usr/libexec/PlistBuddy -c \"print runtime\" '{}' | sed -n 's/com\.apple\.CoreSimulator.SimRuntime\.\(.*\)/\1/p'" \;

यह प्रिंट:

14F313C8-3813-4E38-903E-2010C136B77B iPad Retina iOS-8-0
1F6B82A2-C467-479A-8CAF-074BE507AC8E iPad Air iOS-8-0
2DA83944-BE5D-4342-B330-08F67A932D8C iPad 2 iOS-7-1
48703432-A5C5-4606-9369-0D21B53EB1E8 iPhone 4s iOS-7-1
4AFB71CC-6752-4F9A-A239-4DC9CA53A8B8 iPhone 5s iOS-8-0
53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60 iPhone 5 iOS-7-1
6B97C174-5914-4E89-8D17-943F0E2703BA iPhone 5 iOS-8-0
6C2DF3E9-FA26-4391-8B66-72E1467D6297 iPad 2 iOS-8-0
7F85E299-A3C2-4704-8B44-2984F6F995F5 iPad Retina iOS-7-1
8B9EDFFD-2240-476B-88AD-06ABE8F9FF51 iPhone 6 Plus iOS-8-0
97691E5D-5C38-4875-8AA7-C2B1E4ABCBB5 Resizable iPhone iOS-8-0
9BBF3408-6CA4-4CE0-BD4E-B02001F1262B iPhone 5s iOS-7-1
C9237847-F0AA-44BC-A74E-C08C2E0F7A6C Resizable iPad iOS-8-0
CC44C1BA-F39C-4410-AE34-4ABBD7806D45 iPad Air iOS-7-1
CDF4D811-5011-4464-8291-5CDA378375EA iPhone 6 iOS-8-0
E77DE00C-E244-4F25-A5E2-E6581614D5A2 iPhone 4s iOS-8-0

अपडेट करें:

जैसा कि किसी ने यहां बताया , xcrun simctl list devicesएक समान परिणाम प्राप्त करने के लिए दौड़ना भी संभव है :

== Devices ==
-- iOS 7.0 --
-- iOS 7.1 --
    iPhone 4s (48703432-A5C5-4606-9369-0D21B53EB1E8) (Shutdown)
    iPhone 5 (53A65771-DF50-4A5C-A8D2-4D1C3A5D0F60) (Shutdown)
    iPhone 5s (9BBF3408-6CA4-4CE0-BD4E-B02001F1262B) (Shutdown)
    iPad 2 (2DA83944-BE5D-4342-B330-08F67A932D8C) (Shutdown)
    iPad Retina (7F85E299-A3C2-4704-8B44-2984F6F995F5) (Shutdown)
    iPad Air (CC44C1BA-F39C-4410-AE34-4ABBD7806D45) (Shutdown)
-- iOS 8.1 --
    iPhone 4s (0763EF65-DD0D-4FAD-84C7-2DE63D416526) (Shutdown)
    iPhone 5 (868ED444-8440-4115-AF37-F419CC682D2F) (Shutdown)
    iPhone 5s (E0455E5D-7315-4EC8-B05E-76284728244C) (Shutdown)
    iPhone 6 Plus (72554908-FF99-4B8F-9B87-65255ED08CFC) (Shutdown)
    iPhone 6 (32AA8133-53A4-4BE0-8CE5-0C7A87E81CAF) (Shutdown)
    iPad 2 (4AF84DE8-CBA2-47AE-A92A-0C0CEF9F41F8) (Booted)
    iPad Retina (69238B44-AAFD-4CD5-AAEA-C182D0BC300D) (Shutdown)
    iPad Air (E580AD99-0040-4EC1-B704-0C85567E6747) (Shutdown)
    Resizable iPhone (32E872FC-6513-41AB-A5B9-B23EB7D10DC8) (Shutdown)
    Resizable iPad (99997922-4A9F-4574-9E3E-EF45F893F4A2) (Shutdown)

18

यदि आप स्विफ्ट का उपयोग कर रहे हैं , तो यह दस्तावेज़ निर्देशिका के पूर्ण पथ को लौटा देगा:

func applicationDirectoryPath() -> String {
    return NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last! as String
}

1
"फंक डॉक्यूमेंटडायरेरीपैथ ()" का नाम क्या होना चाहिए, जहां आप जा रहे हैं ...
22:19

13

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

./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a <MyApp>

iPad एयर iOS 8 सिम्युलेटर पर आपके ऐप के लिए एप्लिकेशन फ़ोल्डर और होम एरिया फ़ोल्डर मिलेगा। यहाँ एक उदाहरण है:

MacBook-Air:_posts user$ ./simulatorAppFolders -s "iPad Air" -i iOS-8-0 -a MyApp
App folder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Bundle/Application/8F64CD7F-A227-43D6-98AC-41D3919827CB
dataFolder = /Users/james/Library/Developer/CoreSimulator/Devices/6A9DEE93-FAEF-4BF4-9989-BC14CD38AEA0/data/Containers/Data/Application/96C40A21-5A5C-4399-839C-B155B8A72932

अपडेट करें

मूल स्क्रिप्ट के लिए एक अद्यतन है जो आपको -d विकल्प का उपयोग करके डिवाइस प्रकार के आधार पर खोज करने की अनुमति देता है। मैंने एक और स्क्रिप्ट भी लिखी है, जो समझदारी से नामित फ़ोल्डरों की एक श्रृंखला बनाती है ताकि आप अपने एप्लिकेशन और एप्लिकेशन दस्तावेजों को पा सकें। यह स्क्रिप्ट आपके होम एरिया में iOS_SIMULATORS नामक एक फोल्डर बनाएगी और आप वहां से आसानी से अपने एप्लिकेशन में नेविगेट कर सकते हैं।


बिल्कुल सही, मैंने आपकी स्क्रिप्ट को एक और बनाने के लिए संपादित किया जो एक निश्चित ऐप के सभी सिम्युलेटर डेटा को मजबूत करता है। बहुत बहुत धन्यवाद जेम्स!
मार्टिन

धन्यवाद! एक आम PITA के लिए महान समाधान।
डेविड हर्सी

6

मैं अगले कंसोल आउटपुट के साथ सिमुलेटर फ़ोल्डर का पता लगाने में सक्षम था:

NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);

मेरे मामले में यह (Xcode 6 बीटा) था

app dir: file:///Users/user/Library/Developer/CoreSimulator/Devices/D00C56D4-DDA3-47B0-9951-27D3B9EC68E8/data/Applications/6ABF3E54-37F5-4AD1-A223-F7467F601FB6/Documents/

6

माइकल्स के जवाबों के आधार पर, यह स्विफ्ट 3 के लिए है

    func applicationDirectoryPath() -> String {
        return NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String
    }

यहाँ एकमात्र समाधान!
फेटी

5

स्विफ्ट 3.0 के लिए

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
print(paths[0])

आप Xcode 8.2 में Coredata का स्थान प्राप्त कर सकते हैं


5

Xcode के नए अपडेट के बाद मैंने पाया कि sql फाइलें अब नए फ़ोल्डर में संग्रहीत हैं, /Library/Application Supportयह एक अनोखी स्थिति हो सकती है, लेकिन अगर आपको दस्तावेज़ फ़ोल्डर में sql फाइलें नहीं मिलीं तो उन्हें यहां खोजें:

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Library/Application Support/

Documentsफ़ोल्डर में संग्रहीत होने से पहले :

~/Library/Developer/CoreSimulator/Devices/[@device_id@]/data/Containers/Data/Application/[@application_id@]/Documents/


4

स्विफ्ट 3 के लिए:

इस कोड को didFinishLaunchingWithOptions में कॉपी करें

 print(NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true).last! as String)

इससे मुझे मदद मिली। लेकिन जब मैं टर्मिनल के माध्यम से उस पथ को गोटो करने की कोशिश करता हूं तो यह कहता है: ऐसी कोई फ़ाइल या निर्देशिका नहीं, लेकिन जब मैं गोटो फ़ोल्डर विकल्प की कोशिश करता हूं तो यह वास्तव में मौजूद होता है।
कादिर हुसैन

इसने मेरे लिए OSX पर काम किया। मुझे .sqlite फ़ाइल को ठीक करने के लिए <मेरे ऐप नाम> "एप्लिकेशन समर्थन" निर्देशिका के भीतर 1 और निर्देशिका जाने की आवश्यकता थी।
Jacksonsox


2

जेम्स स्नूक की तरह मैंने सिम्युलेटर ऐप्स तक आसान पहुंच प्रदान करने के लिए अपनी स्क्रिप्ट बनाई। मुझे लगता है कि यह मेरे अलावा अन्य लोगों को मिल रहा है।

उनकी स्क्रिप्ट के विपरीत, मेरा एक खोज उपकरण नहीं है, यह सभी उपकरणों / रनटाइम के साथ एक पूर्ण (और मानव पठनीय) फ़ोल्डर संरचना बनाता है, और उनमें ऐप्स के लिए सॉफ्ट लिंक डालता है।

आप इसे इस जिस्ट में प्राप्त कर सकते हैं ।

हर बार जब आप सिम्युलेटर में कोई ऐप इंस्टॉल करते हैं, या इसे हर बार चलाते हैं, तो आप किसी भी कारण से एक ऐप ला रहे हैं (यह अपडेट करेगा, और फाइंडर में डिवाइस फ़ोल्डर खोल देगा)।


आप कुछ चीजों को स्वचालित करने के लिए इस स्क्रिप्ट को अनुकूलित कर सकते हैं। लेकिन मैं कहना होगा कि इस जीयूआई अनुप्रयोग है कि मैं सिर्फ लगता है एक वास्तव में उपयोगी विकल्प के रूप में आप सिर्फ एप्लिकेशन फ़ोल्डरों :) तक पहुंचना चाहते हों पाया
fbeeper

यह भी काफी अच्छा है, लेकिन मैं जेम्स स्नुक द्वारा पोस्ट की गई 2 स्क्रिप्ट को पसंद करता हूं क्योंकि यह डेटा डायरेक्टरी के साथ-साथ सॉफ्ट लिंक भी बनाता है।
डेविड हर्सी

2

यदि आपने कोई निर्देशिका निर्दिष्ट नहीं की है तो आप डिफ़ॉल्ट निर्देशिका को प्रिंट करने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं:

प्रिंट (NSPersistentContainer.defaultDirectoryURL ())


1

iOS 10.0+आप के लिए उपयोग कर सकते हैं persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

मैंने उपयोगिता फ़ंक्शन बनाया है जो आपके इच्छित स्थान (केवल सिम्युलेटर के लिए काम करता है) के लिए स्क्लाइट फाइल की प्रतिलिपि बनाता है।

आप इसका उपयोग कर सकते हैं

import CoreData


let appDelegate = UIApplication.shared.delegate as! AppDelegate
UTility.getSqliteTo(destinationPath: "/Users/inderkumarrathore/Desktop", persistentContainer: appDelegate.persistentContainer)

यदि आप पहले से ही sqlite, shm और wal files तक पहुँच चुके हैं, तो टर्मिनल में वाक फ़ाइल को sqiteite फ़ाइल में मर्ज करने के लिए टर्मिनल में कमांड चलाएँ।

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;
Press control + d

उपरोक्त आदेशों को चलाने के बाद आप डेटा को अपनी sqlite फ़ाइल में देख सकते हैं।


यहाँ के लिए उपयोगिता विधि की परिभाषा है

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
*/
public static func getSqliteTo(destinationPath: String, persistentContainer: NSPersistentContainer) {
  let storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.first?.url

  let sqliteFileName = storeUrl!.lastPathComponent
  let walFileName = sqliteFileName + "-wal"
  let shmFileName = sqliteFileName + "-shm"
  //Add all file names in array
  let fileArray = [sqliteFileName, walFileName, shmFileName]

  let storeDir = storeUrl!.deletingLastPathComponent()

  // Destination dir url, make sure file don't exists in that folder
  let destDir = URL(fileURLWithPath: destinationPath, isDirectory: true)

  do {
    for fileName in fileArray {
      let sourceUrl = storeDir.appendingPathComponent(fileName, isDirectory: false)
      let destUrl = destDir.appendingPathComponent(fileName, isDirectory: false)
      try FileManager.default.copyItem(at: sourceUrl, to: destUrl)
      print("File: \(fileName) copied to path: \(destUrl.path)")
    }
  }
  catch {
    print("\(error)")
  }
  print("\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n")
  print("In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in \(sqliteFileName) file")
  print("\n-------------------------------------------------")
  print("$ cd \(destDir.path)")
  print("$ sqlite3 \(sqliteFileName)")
  print("sqlite> PRAGMA wal_checkpoint;")
  print("-------------------------------------------------\n")
  print("Press control + d")      
}

के लिये

/**
 Copies the sqlite, wal and shm file to the destination folder. Don't forget to merge the wal file using the commands printed int the console.
 @param destinationPath Path where sqlite files has to be copied
 @param persistentContainer NSPersistentContainer
 */
+ (void)copySqliteFileToDestination:(NSString *)destinationPath persistentContainer:(NSPersistentContainer *)persistentContainer {
  NSError *error = nil;
  NSURL *storeUrl = persistentContainer.persistentStoreCoordinator.persistentStores.firstObject.URL;
  NSString * sqliteFileName = [storeUrl lastPathComponent];
  NSString *walFileName = [sqliteFileName stringByAppendingString:@"-wal"];
  NSString *shmFileName = [sqliteFileName stringByAppendingString:@"-shm"];
  //Add all file names in array
  NSArray *fileArray = @[sqliteFileName, walFileName, shmFileName];

  // Store Directory
  NSURL *storeDir = storeUrl.URLByDeletingLastPathComponent;

  // Destination dir url, make sure file don't exists in that folder
  NSURL *destDir = [NSURL fileURLWithPath:destinationPath isDirectory:YES];

  for (NSString *fileName in fileArray) {
    NSURL *sourceUrl = [storeDir URLByAppendingPathComponent:fileName isDirectory:NO];
    NSURL *destUrl = [destDir URLByAppendingPathComponent:fileName isDirectory:NO];
    [[NSFileManager defaultManager] copyItemAtURL:sourceUrl toURL:destUrl error:&error];
    if (!error) {
      RLog(@"File: %@ copied to path: %@", fileName, [destUrl path]);
    }
  }


  NSLog(@"\n\n\n ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ NOTE ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~\n");
  NSLog(@"In your terminal run the following commands to merge wal file. Otherwise you may see partial or no data in %@ file", sqliteFileName);
  NSLog(@"\n-------------------------------------------------");
  NSLog(@"$ cd %@", destDir.path);
  NSLog(@"$ sqlite3 %@", sqliteFileName);
  NSLog(@"sqlite> PRAGMA wal_checkpoint;");
  NSLog(@"-------------------------------------------------\n");
  NSLog(@"Press control + d");
}

0

स्विफ्ट 3.x

अपनी AppDelegate फ़ाइल में किए गए FinishLaunchingWithOptions फ़ंक्शन का पता लगाएँ और इस कोड को वहां रखें।

let path = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true)
print("\(path)")

0

स्विफ्ट 4.x

    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
    print(paths[0])

0

स्विफ्ट 4.2

let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
        print(paths[0])

-1

आप निम्न कोड का उपयोग कर सकते हैं।

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.
    **print(persistentContainer.persistentStoreDescriptions)**
    return true
}

यह कोर डाटा परसेंटेज स्टोरेज यानी साइक्लाइट का स्थान प्रिंट करेगा

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