স্ক্লাইট ফাইল অবস্থানের মূল ডেটা


92

সাধারণত, মূল ডেটা অ্যাপসের জন্য স্ক্লাইট স্টোর ফাইলটি অবস্থিত

গ্রন্থাগার> অ্যাপ্লিকেশন সহায়তা> আইফোন সিমুলেটর> .1.১ (বা আপনি যে কোনও সংস্করণ ব্যবহার করছেন)> অ্যাপ্লিকেশন> (যে কোনও ফোল্ডারে আপনার অ্যাপ্লিকেশন রয়েছে)> নথি

ফোল্ডার, তবে আমি এটি আইওএস ৮-তে খুঁজে পাচ্ছি না I আমি ধরে নেব তারা আইফোন সিমুলেটর ফোল্ডারের ভিতরে কেবল একটি 8.0 ফোল্ডার যুক্ত করবে, তবে এটি সেখানে নেই। কেউ এটি সনাক্ত করতে সক্ষম হয়েছে?


4
আমি খুব নিশ্চিত যে আপনার প্রশ্নটি সদৃশ, আমি আপনার জিজ্ঞাসা করার এক সপ্তাহ আগে এটি জিজ্ঞাসা করে considering আপনি যদি এই প্রথম জিজ্ঞাসা করা প্রথম প্রশ্নটি বিবেচনা করে আমাকে এই প্রশ্নের কৃতিত্ব পেতে দেন তবে এটি প্রশংসা হবে এবং মনে হচ্ছে আপনার ইতিমধ্যে
@

কিভাবে এই পরীক্ষা করে দেখুন dbpath চেক করতে stackoverflow.com/a/27358291/3840428
Nagarjun


4
কেউ কি জানেন যে কীভাবে আসল ডিভাইস থেকে কোরডাটা ফাইলগুলি পাবেন? আমি এটি এক্সকোডের পুরানো সংস্করণগুলিতে আইটিউনসের মাধ্যমে করতাম, তবে এক্সকোড 8 / আইওএস 10 যেহেতু আমি মনে করি না কোরিডাটা ফাইলগুলি অ্যাপ্লিকেশানের ডকুমেন্ট ডিরেক্টরিতে সঞ্চিত আছে, তাই এটি আইটিউনে দৃশ্যমান নয়। আপনার কম্পিউটারে ডিভাইস থেকে কোরডেট ফাইলগুলি পাওয়ার কোনও উপায় আছে?
বোকাক্সিকা

4
আমি জানি না যে তারা কেন এই পদক্ষেপ নিয়ে চলেছে। তাদের এটি অন্য কোথাও রেখে দেওয়া উচিত just
নিয়মিত এক্সপ্রেসন

উত্তর:


134

আমি স্ক্লাইট ফাইলটি এবং এটি এখন এই পথে সনাক্ত করতে সক্ষম হয়েছি:

গ্রন্থাগার / বিকাশকারী / কোরসিমুলেটর / ডিভাইস / (সংখ্যা এবং অক্ষর) / তথ্য / ধারক / তথ্য / অ্যাপ্লিকেশন / (সংখ্যা এবং চিঠি) / নথি /

(সংখ্যা এবং অক্ষর) বলতে এমন একটি ফোল্ডার দাঁড়িয়েছে যা আপনার অ্যাপ্লিকেশন / কম্পিউটারের জন্য স্বতন্ত্র, তবে দেখতে এটির মতো হবে: 779AE2245-F8W2-57A9-8C6D-98643B1CF01A

আমি অ্যাপ্লিকেশন.এম এ গিয়ে স্ক্রোল করে নীচে গিয়ে এটি সন্ধান করতে সক্ষম হয়েছি

- (NSURL *)applicationDocumentsDirectory 

পদ্ধতি এবং এনএসএলটি এভাবে ফেরার পথে লগিং করছে:

// 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সিমুলেটারের নাম এবং তাদের ইউআইডিগুলির তালিকা পেতে ব্যবহার করুন ।
স্যান্ডি চ্যাপম্যান

4
মনে রাখবেন যে আপনি যদি কোনও অ্যাপ্লিকেশন গোষ্ঠীর জন্য ভাগ করা ডাটাবেস ব্যবহার করেন (উদাহরণস্বরূপ আপনি যখন কোনও এক্সটেনশন ব্যবহার করছেন) তখন পাথটি লাইব্রেরি / বিকাশকারী / কোরসিমুলেটর / ডিভাইসগুলি / $ সংখ্যা / ডেটা / ধারক / ভাগ / অ্যাপগ্রুপ / $ নম্বর / নাম.সিক্লাইট
andreacipriani

7
মনে রাখবেন, 2019 সালে , Library/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Documents/আর সত্য নয়। এখন আপনি। স্ক্লাইট এবং সম্পর্কিত দুটি ফাইল খুঁজে পাবেনLibrary/Developer/CoreSimulator/Devices/(numbers and letters)/data/Containers/Data/Application/(numbers and letters)/Library/Application Support/
গ্যাং ফ্যাং

@ গাংফ্যাং আমি আমার অবজেক্টিভ সি কোডটি যা এক্সকোড in তে নির্মিত তা সর্বশেষতম সুইফ্ট সংস্করণে রূপান্তরিত করার এবং নতুন প্রকল্প তৈরি করার চেষ্টা করছি, যাতে আমি কীভাবে এই দুটি ভিন্ন। স্ক্লাইট ফাইলটি এক জায়গায় স্থানান্তর করতে পারি।
সঞ্জয় শাহ

91

উত্তরের কোনওটিই ডিবি ফাইলের অবস্থানটি পাওয়ার সহজতম উপায়টির কথা উল্লেখ করে নি।

এটি আপনার উত্স কোডটিও পরিবর্তন করতে পারে না কারণ এটি এক্সকোডে একটি সহজ রান টাইম সুইচ।

  1. রান বোতামের পাশে ... সম্পাদনা প্রকল্পটি চয়ন করুন।

    স্কিম সম্পাদনা করুন

  2. রান / আর্গুমেন্ট নির্বাচন করুন এবং নিম্নলিখিত দুটি বিকল্প যুক্ত করুন:

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

    বিকল্প

  3. অ্যাপটি চালান, এবং আপনি লগগুলিতে দেখতে পাবেন:

    লগ


4
এটি সত্যই সহজ এবং সর্বোত্তম সমাধান। ধন্যবাদ!
ওমিড অ্যারিয়ান

আমার জন্য লগ প্রদর্শিত হয় না, আপনি আমাকে সাহায্য করতে পারেন?
অগস্টো

@ অগাস্টো আমি আপনাকে এখানে সহায়তা করতে পারি না, তবে আপনি যদি এটি সম্পর্কে একটি নতুন প্রশ্ন জিজ্ঞাসা করেন তবে লোকেরা সম্ভবত এটির উত্তর দিতে পারে এবং আপনাকে সহায়তা করতে পারে।
হাইপারকনট

দুর্দান্ত উত্তর! এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। এক্সকোড পছন্দগুলি বাদ দিয়ে কনসোলে এই আউটপুটটির রঙ পরিবর্তন করার কোনও উপায় কী আপনি জানেন? এটি যদি আরও কিছুটা দাঁড়িয়ে থাকে তবে চমৎকার হবে
Coreyd303

ইঙ্গিত দেওয়ার জন্য আপনাকে ধন্যবাদ! পাথ অবিচ্ছিন্নভাবে পরিবর্তিত হয়, এখন আমার জন্য (আইওএস ১৩.৩.১) পাথটি হল / ব্যবহারকারী / *** / গ্রন্থাগার / বিকাশকারী / কোরসিমুলেটর / ডিভাইসগুলি / A91CEB1C-B15D-46B5-9B83-DB22056DEFD1 / ডেটা / ধারক / ভাগ / অ্যাপগ্রুপ / বি 835599 এ- 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. ইয়াহ !!! আপনি আপনার গন্তব্যস্থলে রয়েছেন।


4
সুইফট 3 ব্যবহারের জন্য: এনএসএস অনুসন্ধানপথফোর্ড ডিরেক্টরিগুলি ইনডোমাইনস (। অ্যাপ্লিকেশনসপোর্ট ডাইরেক্টরি, .userDomainMask, সত্য)
Yohst

38

যদি আপনার অ্যাপটি কোর ডেটা ব্যবহার করে থাকে তবে এটি টার্মিনালের স্ক্লাইট ফাইলটি অনুসন্ধান করার বিষয় মাত্র:

find ~ -name app_db_file_name.sqlite

ফলাফলগুলি আপনার অ্যাপ্লিকেশন সহ সিমুলেটর ফোল্ডারে পুরো পথটি তালিকাভুক্ত করবে।


4
@ অ্যালেক্সওই আমি আশা করি অ্যাপল ফাইল মেনুতে "ফাইন্ডারে সিমুলেটর ডকুমেন্টস ফোল্ডারটি প্রকাশ করুন" বা এর অনুরূপ কিছুতে একটি বোতাম যুক্ত করবে। হাস্যকর বলে মনে হচ্ছে যে এটি এখনও নেই, তারা যেখানে ফাইলগুলি সংরক্ষণ করছেন সেখানে তারা পরিবর্তন করে
চলেছে

4
অন্যরা যদি আগ্রহী হন তবে আমি এই আদেশটি আমার alias myapp_simulator_db="find ~/Library/Developer/CoreSimulator/Devices -name MyApp.sqlite"। আপনার হস্তক্ষেপ যখন আপনি বার বার এই কমান্ড চালানোর প্রয়োজন।
টোস্ট

sudo find -name app_db_file_name.sqlite আমাকে সহায়তা করেছে
কাদির হুসেন

21

আমি এই ওয়ান-লাইনার ( গিস্ট ) হ্যাক করেছি : 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
}

4
আপনি যেখানে যাচ্ছেন সেখানে "ফানক ডকুমেন্ট ডিরেক্টরীপথ ()" নামকরণ করা উচিত ...
যোহস্ট

13

আমি আপনার অ্যাপ্লিকেশন ফোল্ডার এবং সিমুলেটারের মধ্যে অ্যাপ্লিকেশন ডেটা ফোল্ডারের অবস্থান সন্ধানের জন্য বাশ স্ক্রিপ্ট লিখেছিলাম, আপনি এটি এখানে ডাউনলোড করতে পারেন । আপনি একবার স্ক্রিপ্টটি আনজিপ করে নিলে স্ক্রিপ্টটি থাকা ফোল্ডারে নেভিগেট করতে পারেন এবং এটি ব্যবহার করতে পারেন। যদি আপনি এটিকে কোনও বিকল্প ছাড়াই কল করেন তবে এটি আপনাকে ইনস্টল করা আইওএস সিমুলেটরগুলির একটি তালিকা দেবে। তারপরে আপনি আপনার প্রোগ্রামটি খুঁজতে বিকল্পগুলি ব্যবহার করতে পারেন। লেখা:

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

আইপ্যাড এয়ার আইওএস 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

হালনাগাদ

মূল স্ক্রিপ্টে একটি আপডেট রয়েছে যা আপনাকে ডি-ডি বিকল্প ব্যবহার করে ডিভাইসের ধরণের ভিত্তিতে অনুসন্ধান করতে দেয়। আমি অন্য একটি স্ক্রিপ্টও লিখেছি যা সংজ্ঞাগতভাবে নামযুক্ত ফোল্ডারগুলির একটি সিরিজ তৈরি করে যাতে আপনি আপনার অ্যাপ্লিকেশন এবং অ্যাপ্লিকেশন নথিগুলি খুঁজে পেতে পারেন। এই স্ক্রিপ্টটি আপনার বাড়ির অঞ্চলে আইওএসএসআইএমএলইউএটিএস নামে একটি ফোল্ডার তৈরি করবে এবং আপনি সেখান থেকে সহজেই আপনার অ্যাপ্লিকেশনটিতে নেভিগেট করতে পারবেন।


নিখুঁত, আমি অন্য একটি তৈরি করতে আপনার স্ক্রিপ্ট সম্পাদনা করেছি যা একটি নির্দিষ্ট অ্যাপ্লিকেশনটির সমস্ত সিমুলেটর ডেটা পুনরায় লাগিয়ে দেয়। অনেক ধন্যবাদ জেমস!
মার্টিন

ধন্যবাদ! একটি সাধারণ পিআইটিএর দুর্দান্ত সমাধান।
ডেভিড হার্সি

6

আমি পরবর্তী কনসোল আউটপুট সহ সিমুলেটর ফোল্ডারটি সনাক্ত করতে সক্ষম হয়েছি:

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

আমার ক্ষেত্রে এটি ছিল (এক্সকোড 6 বিটা)

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


5

সুইফট 3.0 এর জন্য

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

আপনি এক্সকোড 8.2 তে কোরেডাটার অবস্থান পেতে পারেন


5

এক্সকোডের নতুন আপডেটের পরে আমি দেখতে পেলাম যে এসকিউএল ফাইলগুলি এখন নতুন ফোল্ডারে সঞ্চিত রয়েছে /Library/Application Supportএটি একটি অনন্য পরিস্থিতি হতে পারে তবে আপনি যদি নথি ফোল্ডারে এসকিএল ফাইলগুলি খুঁজে না পান তবে সেগুলি এখানে সন্ধান করুন:

~/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 এর জন্য:

এই কোডটি কোডফিনিশলঞ্চিং উইথঅ্যাপশনে পেস্ট করুন

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

এটি আমাকে সাহায্য করেছিল। তবে যখন আমি টার্মিনাল দিয়ে সেই পথে যাওয়ার চেষ্টা করি তখন এটি বলে: এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই তবে যখন আমি ফোল্ডার বিকল্পটি সন্ধান করার চেষ্টা করি এটি আসলে উপস্থিত থাকে।
কাদির হুসেন

এটি ওএসএক্সে আমার জন্য কাজ করেছে। .Sqlite ফাইলটি সূক্ষ্ম করতে আমার "অ্যাপ্লিকেশন সহায়তা" ডিরেক্টরিতে আমার আরও 1 টি ডিরেক্টরি যেতে হবে।
জ্যাকসনসক্স


2

জেমস স্নুকের মতো আমি সিমুলেটর অ্যাপগুলিতে আরও সহজে অ্যাক্সেস সরবরাহ করতে আমার নিজস্ব স্ক্রিপ্ট তৈরি করেছি। আমার ধারণা আমি ছাড়া অন্য অনেক লোক এখানে আসার পক্ষে কাজ করতে পারে।

তাঁর স্ক্রিপ্টের বিপরীতে, খনি কোনও অনুসন্ধানের সরঞ্জাম নয়, এটি সমস্ত ডিভাইস / রানটাইম সহ একটি সম্পূর্ণ (এবং মানব পাঠযোগ্য) ফোল্ডার কাঠামো তৈরি করে এবং এতে অ্যাপ্লিকেশনগুলিতে নরম লিঙ্ক রাখে।

আপনি এই টুকরোতে এটি পেতে পারেন ।

আপনি যখনই সিমুলেটারে কোনও অ্যাপ ইনস্টল করেন তখনই এটি চালান, বা আপনি যখনই কোনও কারণে কোনও অ্যাপ আনতে যাচ্ছেন প্রতিবার এটি চালান (এটি আপডেট হবে এবং ফাইন্ডারে ডিভাইস ফোল্ডারটি খুলবে)।


কিছু জিনিস স্বয়ংক্রিয় করতে আপনি এই স্ক্রিপ্টটি মানিয়ে নিতে পারেন। তবে আমি অবশ্যই বলব যে আপনি এই অ্যাপ্লিকেশন ফোল্ডারে অ্যাক্সেস চান তবে এই জিইউআই অ্যাপ্লিকেশনটি সবেমাত্র একটি দরকারী বিকল্প হিসাবে শব্দ পেয়েছে :)
fbeeper

এটিও বেশ দুর্দান্ত তবে আমি জেমস স্নুকের পোস্ট করা দ্বিতীয় স্ক্রিপ্টটিকে পছন্দ করি কারণ এটি ডেটা ডিরেক্টরিতে নরম লিঙ্ক তৈরি করে।
ডেভিড হারসি

2

আপনি যদি কোনও ডিরেক্টরি নির্দিষ্ট না করে থাকেন তবে আপনি ডিফল্ট ডিরেক্টরি মুদ্রণের জন্য নীচের কোডটি ব্যবহার করতে পারেন:

মুদ্রণ (এনএসপার্সেন্টিয়েন্ট কন্টেইনার.ডিফাল্ট ডিরেক্টরি ডিরেক্টরি ())


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)

যদি আপনি ইতিমধ্যে স্ক্লাইট, shm এবং ওয়াল ফাইলগুলিতে অ্যাক্সেস পেয়ে থাকেন তবে ডাব্লু ওয়াল ফাইলটিকে স্ক্লাইট ফাইলটিতে মার্জ করার জন্য টার্মিনালে কমান্ডগুলি চালান।

$ sqlite3 persistentStore
sqlite> PRAGMA wal_checkpoint;
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
*/
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");
}

1

সুইফট 4.2

আমি এর জন্য একটি এক্সটেনশন তৈরি করেছি NSPersistentStoreDescription

import CoreData

extension NSPersistentStoreDescription {
    func getDatabaseLocation() -> String? {
        return self
            .url?
            .absoluteString
            .replacingOccurrences(of: "file://", with: "") // Remove file suffix
            .replacingOccurrences(of: "%20", with: "\\ ") // Make the spaces to support terminal paste
    }
}

তারপরে আমি এটি ব্যবহার করি যখন আমি সূচনা করি NSPersistentContainer

lazy var persistentContainer: NSPersistentContainer = {

        let container = NSPersistentContainer(name: "CoreDataDemo")
        
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            
            #if DEBUG
            debugPrint(storeDescription.getDatabaseLocation() ?? "No database location")
            #endif
            
            if let error = error as NSError? {
                assertionFailure("Unresolved error \(error), \(error.userInfo)")
            }
        })
        
        return container
    }()

0

সুইফট 3.x

আপনার অ্যাপডেলিগেট ফাইলে ডিনফিনিশলঞ্চিং উইথঅপশনগুলি ফাংশনটি সন্ধান করুন এবং এই কোডটি এখানে রেখে দিন।

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
}

এটি মূল ডেটাস্ট্যান্ট স্টোরেজ অর্থাৎ স্ক্লাইটের অবস্থান মুদ্রণ করবে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.