Xcode 6 iPhone सिम्युलेटर एप्लिकेशन समर्थन स्थान


137

Xcode 6 में, मेरे पास एक ऐप है जिसमें मैं Core Data का उपयोग कर रहा हूं, लेकिन iOS 8 iPhone सिम्युलेटर के लिए एप्लिकेशन समर्थन में कोई फ़ोल्डर नहीं है। मेरी फ़ाइलें और कोर डेटा साइक्लाइट डेटाबेस कहाँ संग्रहीत किए जा रहे हैं?


यह कोशिश करो । एक ऐप है जो सीधे लेटेस्ट ऐप रन के डॉक्यूमेंट्स डायरेक्टरी को ओपन करता है।
NSRover

मैंने एक उत्तर (अन्य उत्तरों के निचले भाग में) को जोड़ा, जो दिखाता है कि प्रोग्रामेटिक रूप से उस मार्ग को कैसे प्राप्त किया जाए जहां कोर डेटा फाइलें रहती हैं।
स्पोकेनड्यूड

इस लिंक पर एक नजर
डालिए

"NSTemporaryDirectory ()" का उपयोग करें। इसे देखें- stackoverflow.com/questions/1108076/…
शुभेंदु

जवाबों:


296

सिम्युलेटर निर्देशिका Xcode 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

4
यह सामान्य रूप से सही है, लेकिन ऐसा लगता है कि अधिक आंतरिक फ़ोल्डर परिवर्तन हैं। यह वह रास्ता है जो मेरे लिए Xcode Beta 3 में काम करता है:~/Library/Developer/CoreSimulator/Devices/B2C6629C-998D-4E84-9ADB-06CAF5BA4B89/data/Containers/Data/Application/62593001-FADA-4647-AA80-FE9973956C05/Documents/
harryhorn

1
क्या यह समझने का एक तरीका है कि संख्या या जानवर बल डेटा प्राप्त करने का एकमात्र मौका है?
हमें 21

89
NSLog (@ "app dir:% @", [[[NSFileManager defaultManager] URLsForDirectory: NSDocumentDirectory inDomains: NSUserDomainMask] lastbbject]); - डेटा फ़ोल्डर के लिए पूरा रास्ता प्रिंट करेगा
हमें

2
मुझे त्वरित डिबगिंग के लिए अपने ऐप के दस्तावेज़ निर्देशिका के लिए लगातार शॉर्टकट की आवश्यकता थी। आवेदन के बाद किया गया थाफिश लानचिंगवाथ। #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 अब मुझे एक सिमलिंक मिल गया है जो काम करता है, भले ही iOS8 + XCode6 मेरे ऐप के डेटा GUID को हर बार बदलता है।
हिलसा

32
xcrun simctl listआदेश सिम्युलेटर नाम और डिवाइस UDIDs के बीच पत्राचार को देखने के लिए इस्तेमाल किया जा सकता। या अधिक विशेष रूप से xcrun simctl list devicesकमांड।
थॉमसडब्ल्यू

36

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


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

SimPenders2 Yosemite में काम करता है लेकिन यह थोड़ा धीमा है; एक बार जब आप स्टेटस बार में आइकन पर क्लिक करते हैं, तो बस कुछ सेकंड प्रतीक्षा करें और यह दिखाई देना चाहिए।
जेसन

वोसा यह योसमाइट + एक्सकोड 6.3 के साथ कमाल और नवीनतम काम करता है!
TruMan1

21

मुझे SimulatorManager एप्लिकेशन बहुत उपयोगी लगा। यह आपको सीधे इंस्टॉल किए गए सिमुलेटर के एप्लिकेशन फ़ोल्डर में ले जाता है। मैंने 7.1, 8.0 और 8.1 सिमुलेटर के साथ प्रयास किया है।

सिमुलेटरमैनेजर सिस्टम ट्रे में एक आइकन के रूप में रहता है और "लॉन्च एट लॉगइन" का विकल्प प्रदान करता है।

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

नोट : यह केवल Xcode 6 (मेरे मामले में 6.1.1) और इसके बाद के संस्करण के साथ काम करता है।

उम्मीद है की वो मदद करदे!


Amar, आप SimulatorManager को कैसे स्थापित करते हैं? मुझे लगा कि यह Xcode का प्लगइन है लेकिन यह Xcode प्रोजेक्ट है
malena

1
शीर्ष बार में चुनें: उत्पाद -> पुरालेख -> और फिर पुरालेख को एक मैक अनुप्रयोग के रूप में फिर से हस्ताक्षर किए बिना निर्यात करें (अंतिम विकल्प) आपको एक .app फ़ाइल मिलेगी जिसे आप अपने एप्लिकेशन फ़ोल्डर में एक सामान्य एप्लिकेशन की तरह रख सकते हैं। ..
हेक्सचेईब

11

यह जानने के लिए कि आपके .sqlite फ़ाइल को आपके AppDelegate.m में कहाँ संग्रहीत किया गया है, निम्नलिखित कोड जोड़ें

- (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];

}

महान .. विशेष रूप से उपयोगी है जब कई सिमुलेटर हैं
यासिथा वाड्यूज

6

इसने मेरे लिए तेजी से काम किया:

let dirPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
println("App Path: \(dirPaths)")

3

मैंने इसके साथ कुछ समय के लिए कुश्ती की। यह केवल मेरे स्थानीय साइक्लाइट डीबी को पाने के लिए एक बहुत बड़ा दर्द बन गया। मैंने यह स्क्रिप्ट लिखी और इसे XCode के अंदर कोड स्निपेट बना दिया। मैं इसे अपने AppDidFinishLaunching के अंदर अपने appDelegate के अंदर रखता हूं।


//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

यह आपके ड्राइव के रूट पर एक simlink बनाता है। (आपको पहली बार इस फ़ोल्डर को स्वयं बनाना होगा, और इसे चोदना होगा, या आप स्थान को किसी अन्य स्थान पर बदल सकते हैं) फिर इसे स्थापित करें xcodeway प्लगइन https://github.com/onmyway133/XcodeWay

मैंने इसे थोड़ा संशोधित किया ताकि यह मुझे cmd + d को बस दबाने की अनुमति देगा और यह मेरे वर्तमान एप्लिकेशन के लगातार दस्तावेज़ निर्देशिका के लिए एक खोजक वाइन्डर खोलेगा। इस तरह, कोई फर्क नहीं पड़ता कि कितनी बार XCode आपके पथ को बदलता है, यह केवल रन पर बदलता है, और यह प्रत्येक रन पर तुरंत आपके सिमलिंक को अपडेट करता है।

मुझे आशा है कि यह दूसरों के लिए उपयोगी है!


धन्यवाद, मैं सिर्फ iOS 8 सिम्युलेटर फ़ोल्डर का समर्थन करने के लिए XcodeWay को अपडेट करता हूं
onmyway133

3

खोजक खोलें> लाइब्रेरी> डेवलपर> कोरसिम्युलेटर> उपकरण

फिर फाइंडर से अरेंजमेंट आइकन को बदलें तिथि जोड़ें

अपना एप्लिकेशन> डेटा> कंटेनर> डेटा> एप्लिकेशन> चुनें

अपना ऐप चुनें> डॉक्यूमेंट्स> यहां आपकी डीबी फाइल है

मेरे मामले में:

/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)")

स्विफ्ट 3.0:let dirPaths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) print("App Path: \(dirPaths)")
एटॉमिकबुलियन

2

फाइंडर का उपयोग करें -> फोल्डर पर जाएं और एप्लिकेशन फोल्डर तक पहुंचने के लिए दिए गए बेसपे को एंटर करें

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

NSLog(@"%@",basePath);

1

सिम्युलेटर फ़ाइल को ~ / लाइब्रेरी / डेवलपर / कोरसिम्युलेटर / डिवाइसेस / ... में डालता है लेकिन / डिवाइसेस के बाद का पथ सभी के लिए अलग है।

इस आसान विधि का उपयोग करें। यह वर्तमान उपयोगकर्ता के लिए अस्थायी निर्देशिका का पथ देता है और कोई तर्क नहीं लेता है।

NSString * NSTemporaryDirectory ( void );

इसलिए मेरे ViewController वर्ग में मैं आमतौर पर अपने viewDidLoad में इस लाइन को केवल एक संदर्भ के लिए रखता हूं जब मुझे अपनी CoreData संग्रहीत फ़ाइल को हथियाने की आवश्यकता होती है। उम्मीद है की यह मदद करेगा।

  NSLog(@"FILE PATH :%@", NSTemporaryDirectory());

(नोट: खोजकर्ता मेनू से पथ पर जाने के लिए, गो पर क्लिक करें और छिपी निर्देशिका को खोलने के लिए ~ / लाइब्रेरी टाइप करें फिर खोजक विंडो में आप अपने कंसोल पर दिखाए गए पथ पर क्लिक कर सकते हैं।)


1

यह स्थान एक बार फिर से बदल गया है, यदि स्विफ्ट का उपयोग कर रहा है, तो यह पता लगाने के लिए इसका उपयोग करें कि फ़ोल्डर कहाँ है (यह AppDelegate.swift फ़ाइल से कॉपी किया गया है जो Apple आपके लिए बनाता है यदि यह आपके मशीन पर काम नहीं करता है, तो खोज करें सही वाक्यविन्यास के लिए वह फ़ाइल, यह Xcode 6.1 और iOS 8 सिम्युलेटर का उपयोग करके मेरा काम करता है):

let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
println("Possible sqlite file: \(urls)")

1

सिमुलेटर के तहत स्थित हैं:

~/Library/Developer/CoreSimulator/

यहां, उन्हें UUID नामों वाली निर्देशिका के रूप में सूचीबद्ध किया गया है। नवीनतम को खोजने के लिए 'तिथि संशोधित' द्वारा सॉर्ट का उपयोग करें। अंदर नेविगेट करने के लिए:

/data/Containers/Data/Application/

यहां आपको उस डिवाइस पर सभी एप्लिकेशन की एक सूची मिलेगी। आप नवीनतम एप्लिकेशन प्राप्त करने के लिए इसे फिर से सॉर्ट कर सकते हैं।

नोट: हर बार जब आप ऐप चलाते हैं, तो Xcode निर्देशिका नाम बदल देता है, इसलिए डेस्कटॉप पर उपनाम / शॉर्ट कट बनाने पर भरोसा न करें।

सबसे आसान तरीका है यहां ऐप का इस्तेमाल करना , जो सबकुछ अपने आप करता है।


1

मैंने यह स्क्रिप्ट बनाई है जो किसी भी सिम्युलेटर के लिए बनाए गए नवीनतम ऐप को ज़िप करेगा और इसे डेस्कटॉप पर ज़िप करेगा।

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"

1

स्विफ्ट 4 या स्विफ्ट 5 में आप उपयोग कर सकते हैं NSHomeDirectory()

Xcode 10 (या Xcode 11) में सबसे आसान तरीका आपके ऐप को रोकना है (जैसे कि जब यह ब्रेकपॉइंट मारता है) और इस लाइन को डीबगर कंसोल में चलाएं:

po NSHomeDirectory()

po प्रिंट ऑब्जेक्ट के लिए खड़ा है और अधिकांश चीजों को प्रिंट करता है


0
 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

0
  1. स्विफ्ट 4 के साथ, आप अपने ऐप की होम डायरेक्टरी पाने के लिए नीचे दिए गए कोड का उपयोग कर सकते हैं। आपके ऐप की डॉक्यूमेंट डायरेक्टरी वहां मौजूद है।

    print(NSHomeDirectory())

  2. मुझे लगता है कि आप पहले से ही जानते हैं कि आपके ऐप की होम डायरेक्टरी परिवर्तनशील है, इसलिए यदि आप अपने कोडबेस में अतिरिक्त कोड नहीं जोड़ना चाहते हैं, तो SimPholder आपके लिए एक अच्छा टूल है।

  3. और आगे, आपको आश्चर्य हो सकता है कि एक उपकरण है, जो आपके ऐप के होम डायरेक्टरी को बदलने के बाद हर बार उसी SQLite डेटाबेस को बंद करने और फिर से खोलने से समय बचाने में मदद कर सकता है। और जवाब हाँ है, एक उपकरण मुझे पता है कि SQLiteFlow है । यह दस्तावेज़ से, यह कहता है कि:

    डेटाबेस फ़ाइल नाम या निर्देशिका परिवर्तन संभालें। यह SQLiteFlow iOS सिम्युलेटर में आपके SQLite डेटाबेस के साथ काम कर सकता है।


0

यहाँ अंतिम प्रयुक्त सिम्युलेटर और अनुप्रयोग के लिए sh है । बस sh चलाएं और मुद्रित पाठ और कॉपी पेस्ट करें और खोजक में शो के लिए कमांड चलाएं।

#!/bin/zsh

lastUsedSimulatorAndApplication=`ls -td -- ~/Library/Developer/CoreSimulator/Devices/*/data/Containers/Data/Application/*/ | head -n1`

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