2011-05-24 11 views
6

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

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

In this technical Q & A ऐप्पल का कहना है कि यह संरक्षित है। मेरी समझ से इसका मतलब है कि मैं सुरक्षित रूप से इस निर्देशिका में sqlite3 डेटाबेस फ़ाइलों जैसे महत्वपूर्ण उपयोगकर्ता डेटा डाल सकता हूं। जब एक नए संस्करण के लिए उपयोगकर्ता अद्यतन, इस निर्देशिका के अंदर सामग्री संरक्षित किया जाएगा, यह जीवित रहते हैं और अद्यतन के बाद उपलब्ध होगा:

अनुप्रयोगों /पुस्तकालय में अपने स्वयं के निर्देशिका बना सकते हैं/और उन निर्देशिका बैकअप में और अद्यतन

तो/लाइब्रेरी भर में संरक्षित किया जाएगा/बैकअप में और अद्यतन भर में संरक्षित है।

मेरे लिए खराब अंग्रेजी के साथ इसका मतलब है: हाँ, डेटा जीवित रहेगा। जब उपयोगकर्ता बैक अप लेता है तो यह खो नहीं जाएगा। जब उपयोगकर्ता अपडेट होता है तो यह खो नहीं जाएगा। मैंने कई शब्दकोशों में "संरक्षित" शब्द देखा और मुझे यकीन है कि इसका मतलब है "यह जीवित रहेगा"।

लेकिन फिर, this note in the iOS Application Programming Guide है जो कुछ पूरी तरह से अलग बताता है! यहाँ, वे लाइब्रेरी निर्देशिका के बारे में कहते हैं:

<Application_Home>/Library/ 
You should not use this directory for user data files. 
The contents of this directory (with the exception of the Caches 
subdirectory) are backed up by iTunes. 
Your application is generally 
responsible for adding and removing 
these files. It should also be able to 
re-create these files as needed 
because iTunes removes them during a 
full restoration of the device. 

"उपयोगकर्ता डेटा फ़ाइलों के लिए उपयोग नहीं करना चाहिए।" (???)

लेकिन साथ ही वे इसे आईट्यून्स द्वारा समर्थित मानते हैं। ठीक। तो फिर मुझे उपयोगकर्ता डेटा फ़ाइलों को वहां क्यों नहीं रखना चाहिए?

/Library/Caches इस निर्देशिका उपयोग किसी भी ऐप्स विशिष्ट समर्थन फ़ाइलों है कि आप आवेदन के की शुरूआत के बीच या आवेदन अपडेट के दौरान बनाए रखना चाहते लिखने के लिए। (...) यह आवश्यकतानुसार इन फ़ाइलों को फिर से बनाने में सक्षम होना चाहिए क्योंकि iTunes डिवाइस के पूर्ण बहाली के दौरान उन्हें हटा देता है।

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

अब यह पूरी तरह से मुझे भ्रमित कर रहा है। जो मैं समझता हूं उससे मैं बुराई और शैतान के बीच चयन कर सकता हूं: डेटा/लाइब्रेरी/डेटा अपडेट नहीं रहता है लेकिन आईट्यून्स द्वारा समर्थित है। डेटा/लाइब्रेरी/कैश में डेटा अपडेट रहता है, लेकिन आईट्यून्स द्वारा समर्थित नहीं है और इसे सिस्टम द्वारा हटाया जा सकता है (क्योंकि यह किसी भी समय "कैश" है)।

और दूसरी तरफ, तकनीकी प्रश्न & ए इस महत्वपूर्ण उपयोगकर्ता डेटा को कस्टम सबफ़ोल्डर में/लाइब्रेरी/में उदाहरण के लिए/लाइब्रेरी/प्राइवेट दस्तावेज़ों में डालने का सुझाव देता है।

आईओएस अनुप्रयोग प्रोग्रामिंग गाइड के विपरीत, तकनीकी क्यू & ए का कहना है: पूरे/लाइब्रेरी निर्देशिका हमेशा अद्यतन और बैकअप

तो अब के दौरान संरक्षित किया गया है, वास्तव में, दोनों दस्तावेजों से एक होना चाहिए गलत। पर कौनसा? सच क्या है? कृपया अटकलें नहीं! मैं अनुभव से उत्तरों की तलाश में हूं और मुझे लगता है कि एक ऐप जारी करने और प्रार्थना करने के अलावा इसे समझने का कोई तरीका नहीं है। शायद कोई वास्तव में काम करने के अपने अनुभव को साझा करना चाहता है।

उत्तर

3

मैंने देखा है पुस्तकालय/प्राथमिकताएं (जहां NSUserDefaults जमा हो जाती है) पुनर्स्थापित भर में रखा जाना स्टोर करने के लिए एक त्वरित तरीका प्रदान कर सकते हैं, तो मैं लाइब्रेरी का सबसे लगता है रखा गया है। कैश निर्देशिका शायद, हालांकि बाहर रखा गया है।

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

NSArray * urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask]; 
NSAssert([urls count], @"Can't get app support directory"); 

NSURL * url = [urls objectAtIndex:0]; 
url = [url URLByAppendingPathComponent:@"MyAppName"]; 

व्यवहार में, इस जा रहा है "लायब्रेरी/एप्लिकेशन समर्थन/MyAppName" अपने खिलौने के डिब्बे में खत्म हो जाएगा, लेकिन आप के लिए वैसे भी एपीआई का उपयोग करना चाहिए सुनिश्चित करें कि यह भविष्य के सबूत रखा गया है।

(आप आईओएस 3 या 2 के लिए समर्थन के बारे में परवाह है, तो बजाय NSSearchPathForDirectoriesInDomains() समारोह -URLsForDirectory:inDomains: विधि का उपयोग करें।)

+0

क्या यह पथ निजी है, या इस फ़ोल्डर से कई एप्लिकेशन पढ़ सकते हैं? – f2prateek

+0

@ f2prateek आईओएस पर या एक सैंडबॉक्स वाले मैकोज़ ऐप में, यह पथ आपके ऐप के कंटेनर में होगा। –

1

आप चाबी की कोशिश क्यों नहीं करते? अपने डेटा को भी व्यापक नहीं है, तो यह संवेदनशील जानकारी

Keychain Documentation from Apple

+1

करने के लिए उपयोगकर्ता लिखने से डेटा को छिपाना चाहते हैं उपयोगकर्ता चाहते हैं कीचेन, इस ओपनसॉर्स प्रोजेक्ट को देखें। यह आसानी से पहुंचने के लिए कीचेन के चारों ओर एक रैपर है। ;-) https://github.com/ldandersen/scifihifi-iphone –

1

सामग्री लाइब्रेरी फ़ोल्डर के अंदर (कैश को छोड़कर) iTunes से बैकअप है।

"एप्पल डेटा फ़ाइलों के लिए उपयोग नहीं करना चाहिए" से किस सेब का मतलब है। (???) यह है कि इस फ़ोल्डर का उपयोग उस डेटा के लिए नहीं करें जिसे आप फ़ाइल साझाकरण sytem में itunes के माध्यम से देखना चाहते हैं।

तो तुम iTunes के माध्यम से डेटा का उपयोग करने के लिए/दस्तावेज फ़ोल्डर

बारे में आप का उपयोग करने जा रहे हैं, तो/लाइब्रेरी फ़ोल्डर

संबंधित मुद्दे