এক্সকোড In-এ আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা আমি কোর ডেটা ব্যবহার করছি তবে আইওএস 8 আইফোন সিমুলেটারের জন্য অ্যাপ্লিকেশন সাপোর্টে কোনও ফোল্ডার নেই। আমার ফাইল এবং কোর ডেটা স্ক্লাইট ডাটাবেসটি কোথায় সংরক্ষণ করা হচ্ছে?
এক্সকোড In-এ আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা আমি কোর ডেটা ব্যবহার করছি তবে আইওএস 8 আইফোন সিমুলেটারের জন্য অ্যাপ্লিকেশন সাপোর্টে কোনও ফোল্ডার নেই। আমার ফাইল এবং কোর ডেটা স্ক্লাইট ডাটাবেসটি কোথায় সংরক্ষণ করা হচ্ছে?
উত্তর:
সিমুলেটর ডিরেক্টরিটি এক্সকোড 6 বিটা দিয়ে সরানো হয়েছে ...
~/Library/Developer/CoreSimulator
আপনার অ্যাপ্লিকেশানের ডকুমেন্টস ফোল্ডারে ডিরেক্টরিটি ব্রাউজ করা কিছুটা বেশি কষ্টকর, যেমন,
~/Library/Developer/CoreSimulator/Devices/4D2D127A-7103-41B2-872B-2DB891B978A2/data/Containers/Data/Application/0323215C-2B91-47F7-BE81-EB24B4DA7339/Documents/MyApp.sqlite
~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
#if DEBUG NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName]; remove([aliasPath UTF8String]); [[NSFileManager defaultManager]createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil]; #endif
এখন আমি একটি সিমিলিংক পেয়েছি যা আইওএস 8 + এক্সকোডি 6 প্রতিবার তৈরি করার পরে আমার অ্যাপের ডেটা জিইউডি পরিবর্তন করে।
xcrun simctl list
কমান্ড কাল্পনিক নাম এবং ডিভাইস UDIDs মধ্যে চিঠিপত্রের দেখতে ব্যবহার করা যাবে। বা আরও নির্দিষ্টভাবে xcrun simctl list devices
কমান্ড।
আমি আপনাকে পরামর্শ দেব যে আপনি সিমপোল্ডারগুলি আপনার সিমুলেটর ফাইলগুলি সন্ধান করতে ব্যবহার করুন । এটি একটি মেনু বার আইটেম যা আপনার সিমুলেটর অ্যাপ্লিকেশনগুলি ট্র্যাক করে এবং আপনাকে সরাসরি তাদের ফোল্ডার এবং সামগ্রীতে যেতে দেয়। এটা অসাধারণ.
আমি সিমুলেটার ম্যানেজার অ্যাপ্লিকেশনটি খুব দরকারী। এটি আপনাকে ইনস্টলড সিমুলেটরগুলির অ্যাপ্লিকেশন ফোল্ডারে সরাসরি নিয়ে যায়। আমি 7.1, 8.0 এবং 8.1 সিমুলেটর দিয়ে চেষ্টা করেছি।
সিমুলেটর ম্যানেজার সিস্টেম ট্রেতে একটি আইকন হিসাবে বাস করে এবং "লগইন এট লগইন" বিকল্প সরবরাহ করে।
দ্রষ্টব্য : এটি কেবল এক্সকোড 6 (আমার ক্ষেত্রে 6.1.1) এবং তারপরের সাথে কাজ করে।
আশা করি এইটি কাজ করবে!
আপনার AppDelegate.m এ আপনার .sqlite ফাইলটি কোথায় সঞ্চয় করা আছে তা জানতে নিম্নলিখিত কোডটি যুক্ত করুন
- (NSURL *)applicationDocumentsDirectory
{
NSLog(@"%@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
এখন AppDelegate.m এ এই পদ্ধতিটি কল করুন
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//call here
[self applicationDocumentsDirectory];
}
আমি কিছু সময়ের জন্য এই সাথে কুস্তি। এটি কেবল আমার স্থানীয় স্ক্লাইট ডিবিতে পৌঁছানোর জন্য একটি বিশাল ব্যথা হয়ে ওঠে। আমি এই স্ক্রিপ্টটি লিখেছি এবং এটিকে একটি কোড স্নিপেটে এক্সকোডের মধ্যে তৈরি করেছি। আমি এটিকে আমার অ্যাপ্লিকেশন-এর ভিতরে রাখি।
//xcode 6 moves the documents dir every time. haven't found out why yet.
#if DEBUG
NSLog(@"caching documents dir for xcode 6. %@", [NSBundle mainBundle]);
NSString *toFile = @"XCodePaths/lastBuild.txt"; NSError *err = nil;
[DOCS_DIR writeToFile:toFile atomically:YES encoding:NSUTF8StringEncoding error:&err];
if(err)
NSLog(@"%@", [err localizedDescription]);
NSString *appName = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"];
NSString *aliasPath = [NSString stringWithFormat:@"XCodePaths/%@", appName];
remove([aliasPath UTF8String]);
[[NSFileManager defaultManager] createSymbolicLinkAtPath:aliasPath withDestinationPath:DOCS_DIR error:nil];
#endif
এটি আপনার ড্রাইভের মূলটিতে একটি সিমিলিংক তৈরি করে। (আপনাকে প্রথমে এই ফোল্ডারটি নিজেই তৈরি করতে হবে এবং এটি chmod করতে পারেন, বা আপনি অন্য কোনও জায়গায় স্থানটি পরিবর্তন করতে পারেন) তারপরে আমি xcodeway প্লাগইনটি ইনস্টল করেছি https://github.com/onmyway133/XcodeWay
আমি এটিকে কিছুটা সংশোধন করেছি যাতে এটি আমাকে কেবলমাত্র সিএমডি + ডি চাপতে দেয় এবং এটি আমার বর্তমান অ্যাপ্লিকেশনটির অবিরাম নথির ডিরেক্টরিতে একটি সন্ধানকারীকে খুলে দেবে। এইভাবে, এক্সকোড আপনার পথটি কতবার পরিবর্তন করে তা বিবেচনা করে না, এটি কেবল রানেই পরিবর্তিত হয় এবং এটি প্রতিটি রান করার সাথে সাথেই আপনার সিমিলিংকে আপডেট করে।
আমি এটি অন্যদের জন্য দরকারী আশা করি!
অনুসন্ধানকারী> গ্রন্থাগার> বিকাশকারী> কোরসিমুলেটর> ডিভাইসগুলি খুলুন
তারপরে ফাইন্ডার থেকে অ্যারেঞ্জমেন্ট আইকনটি নির্বাচন করুন তারিখ যুক্ত করুন
আপনার অ্যাপ্লিকেশন> ডেটা> ধারক> ডেটা> অ্যাপ্লিকেশন> নির্বাচন করুন
আপনার অ্যাপ নির্বাচন করুন> নথি> আপনার ডিবি ফাইলটি এখানে
আমার ক্ষেত্রে:
/Users/pluto/Library/Developer/CoreSimulator/Devices/A75107D2-A535-415A-865D-978B2555370B/data/Containers/Data/Application/265A12BC-FF5B-4235-B5EF-6022B83754B4/Documents/dboPhotoBucket.sqlite
অন্যথায় এটি করুন:
NSLog(@"app dir: %@",[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]);
- এটি ডেটা ফোল্ডারের পুরো পথটি মুদ্রণ করবে।
সুইফট:
let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")
let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
ফাইন্ডার ব্যবহার করুন -> ফোল্ডারে যান এবং অ্যাপ্লিকেশন ফোল্ডারে পৌঁছানোর জন্য প্রদত্ত বেসপ্যাথটি প্রবেশ করুন
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
NSLog(@"%@",basePath);
সিমুলেটর ফাইলটি ~ / লাইব্রেরি / বিকাশকারী / কোরসিমুলেটর / ডিভাইস / ... এ রাখে তবে / ডিভাইসগুলির পরে পাথ সবার জন্য আলাদা।
এই সহজ পদ্ধতি ব্যবহার করুন। এটি বর্তমান ব্যবহারকারীর জন্য অস্থায়ী ডিরেক্টরিটির পথ ফেরায় এবং কোনও যুক্তি নেয় না।
NSString * NSTemporaryDirectory ( void );
সুতরাং আমার ভিউকন্ট্রোলার ক্লাসে আমি সাধারণত আমার ভিউডিডলডে এই লাইনটি কেবলমাত্র একটি রেফারেন্সের জন্য রাখি যখন আমার কোরিডাটা সঞ্চিত ফাইলটি ধরতে হবে। আশাকরি এটা সাহায্য করবে.
NSLog(@"FILE PATH :%@", NSTemporaryDirectory());
(দ্রষ্টব্য: পথে যেতে, ফাইন্ডার মেনু থেকে গোতে ক্লিক করুন এবং লুকানো ডিরেক্টরি খোলার জন্য ~ / লাইব্রেরি টাইপ করুন তারপরে ফাইন্ডার উইন্ডোতে আপনি আপনার কনসোলে প্রদর্শিত পথটিতে ক্লিক করতে পারেন))
এই অবস্থানটি আবারও পরিবর্তিত হয়েছে, যদি সুইফ্ট ব্যবহার করা হয়, ফোল্ডারটি কোথায় রয়েছে তা জানতে এটি ব্যবহার করুন (অ্যাপল আপনার জন্য তৈরি করা অ্যাপডেলিগেট.সুইফ্ট ফাইল থেকে এটি অনুলিপি করা হয়েছে, যদি এটি আপনার মেশিনে কাজ না করে তবে অনুসন্ধান করুন) ডান সিনট্যাক্সের জন্য সেই ফাইলটি, এটি এক্সকোড 6.1 এবং আইওএস 8 সিমুলেটর ব্যবহার করে খনিতে কাজ করে):
let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")
সিমুলেটরগুলি এর অধীনে অবস্থিত:
~/Library/Developer/CoreSimulator/
এখানে, তারা ইউআইডি নাম সহ ডিরেক্টরি হিসাবে তালিকাভুক্ত করা হয়। সর্বশেষতমটি সন্ধান করতে 'তারিখ সংশোধিত তারিখ' অনুসারে বাছাই করুন। ভিতরে নেভিগেট এ:
/data/Containers/Data/Application/
এখানে আপনি সেই ডিভাইসে সমস্ত অ্যাপ্লিকেশনগুলির একটি তালিকা পাবেন। সর্বশেষ অ্যাপটি পেতে আপনি এটি আবার বাছাই করতে পারেন।
দ্রষ্টব্য: আপনি যখন অ্যাপটি চালাবেন তখনই কোডকোড ডিরেক্টরিটির নাম পরিবর্তন করে, তাই ডেস্কটপে আলেম / শর্ট কাট তৈরির উপর নির্ভর করবেন না।
সবচেয়ে সহজ উপায় হ'ল অ্যাপটি এখানে ব্যবহার করা যা স্বয়ংক্রিয়ভাবে সবকিছু করে।
আমি এই স্ক্রিপ্টটি তৈরি করেছি যা কোনও সিমুলেটারের জন্য নির্মিত সর্বশেষ অ্যাপ্লিকেশনটি জিপ করে ডেস্কটপটিতে জিপ করবে।
https://gist.github.com/Gerst20051/8ca49d5afbf09007b3696fab6e9f425c
#!/bin/bash
DESTINATION_DIR="$HOME/Desktop"
APP_PATH=$(find ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Bundle/Application/*/*.app -type d -maxdepth 0 -print0 | xargs -0 ls -td | head -n1)
APP_DIRNAME=$(dirname "$APP_PATH")
APP_BASENAME=$(basename "$APP_PATH")
FILE_NAME="${APP_BASENAME%.*}"
cd "$APP_DIRNAME"
zip -qr "$DESTINATION_DIR/$FILE_NAME.zip" "$APP_BASENAME"
সুইফট 4 বা সুইফ্ট 5 এ আপনি ব্যবহার করতে পারেন NSHomeDirectory()
।
এক্সকোড 10 (বা এক্সকোড 11) এর সহজতম উপায় হ'ল আপনার অ্যাপ্লিকেশনটিকে বিরতি দেওয়া (যেমন এটি ব্রেকআপপয়েন্টে আঘাত হানে) এবং ডিবাগার কনসোলে এই লাইনটি চালানো:
po NSHomeDirectory()
po
মুদ্রণ অবজেক্ট এবং প্রিন্ট বেশিরভাগ জিনিস
1. NSTemporaryDirectory() gives this:
/Users/spokaneDude/Library/Developer/CoreSimulator/Devices/1EE69744-255A-45CD-88F1-63FEAD117B32/data/Containers/Data/Application/199B1ACA-A80B-44BD-8E5E-DDF3DCF0D8D9/tmp
2. remove "/tmp" replacing it with "/Library/Application Support/<app name>/" --> is where the .sqlite files reside
সুইফট 4 এর সাহায্যে আপনি আপনার অ্যাপের হোম ডিরেক্টরি পেতে নীচের কোডটি ব্যবহার করতে পারেন। আপনার অ্যাপ্লিকেশনটির নথি ডিরেক্টরি সেখানে রয়েছে।
print(NSHomeDirectory())
আমি মনে করি আপনি ইতিমধ্যে জানেন যে আপনার অ্যাপের হোম ডিরেক্টরিটি পরিবর্তনযোগ্য, তাই আপনি যদি নিজের কোডবেসে অতিরিক্ত কোড যুক্ত করতে না চান তবে সিমপোল্ডার আপনার জন্য একটি দুর্দান্ত সরঞ্জাম।
আরও আরও, আপনি ভাবতে পারেন যে এমন কোনও সরঞ্জাম রয়েছে যা আপনার অ্যাপ্লিকেশনটির হোম ডিরেক্টরি পরিবর্তন করার পরে প্রতিবার একই এসকিউএলাইট ডাটাবেসটি বন্ধ এবং পুনরায় খোলা থেকে সময় বাঁচাতে সহায়তা করে। এবং উত্তর হ্যাঁ, আমি জানি একটি সরঞ্জাম এসকিউএলাইটফ্লো । এর নথি থেকে, এটি বলে যে:
ডাটাবেস ফাইলের নাম বা ডিরেক্টরি পরিবর্তনগুলি হ্যান্ডেল করুন। এটি এসকিউএলফ্লো আইওএস সিমুলেটারে আপনার এসকিউএল ডাটাবেসের সাথে বন্ধুত্বপূর্ণ কাজ করতে পারে।
এখানে সর্বশেষ ব্যবহৃত সিমুলেটর এবং অ্যাপ্লিকেশনটির জন্য sh is স্রেফ চালান এবং ছাপানো পাঠ্যটি অনুলিপি করুন এবং ফাইন্ডারে প্রদর্শনের জন্য কমান্ড পেস্ট করুন এবং রান করুন।
#!/bin/zsh
lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`
echo $lastUsedSimulatorAndApplication