2012-09-05 14 views
14

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

मैं गंभीरता से उलझन में हूं क्योंकि अगर मैंने सोचा कि 5.1 में स्थानीय स्टोरेज वास्तव में कैश में डेटा बचाता है और उस स्थान पर नहीं है जो iCloud [source] के साथ बैक अप लेता है। यह वह व्यवहार है जो मैं चाहता हूं - मुझे डेटा की बैक अप लेने की आवश्यकता नहीं है या नहीं चाहिए।

क्या मैं गलत हूं या ऐप्पल हूं? इस कैश किए गए डेटा को उल्लंघन किए बिना सहेजने के लिए मैं फ़ोनगैप ऐप में क्या कर सकता हूं?

संपादित करें: फ़ोनगैप 1.8.1 यदि यह मदद करता है।

+2

मैं आप अपने ऐप के सैंडबॉक्स का एक स्नैपशॉट डाउनलोड करने के लिए लेने के लिए Xcode का उपयोग सुझाव है एक फाइल और निर्देशिकाओं को बनाया जा रहा है पर एक नज़र डालें। शायद फोनगैप कुछ मज़ाकिया कर रहा है। आप ऐप की सिम्युलेटर निर्देशिका में भी देख सकते हैं। –

+0

और छिपी हुई फाइलें दिखाना सुनिश्चित करें क्योंकि कई कैश/कार्यान्वयन विस्तार निर्देशिकाएं छिपी हुई हैं (उदा: कोर डेटा बाहरी संसाधन भंडारण)। –

+0

यदि मैं सिम्युलेटर निर्देशिका में देखता हूं, तो यह "कैश" निर्देशिका (अनुप्रयोग/ऐप/लाइब्रेरी/कैश) में file__0.localstorage दिखाता है। तो यह मेरे विचार को फिर से पुष्टि करता है कि यह "सही" जगह में सहेजा गया है। –

उत्तर

11

यह पता चला मैं सही था और ऐप्पल गलत था। मैंने पुष्टि की कि मैं/कैश निर्देशिका में सब कुछ ठीक से संग्रहीत कर रहा था। उन्होंने मेरे प्रश्न पर टिप्पणी नहीं की - बस मेरे ऐप को मंजूरी दी।

+0

एक ही अस्वीकृति। आईफोन भी मेरे ऐप को अस्वीकार करता है। मैं क्या कर सकता हूँ ??? – chhameed

+1

यदि आप केवल स्थानीय स्टोरेज का उपयोग कर रहे हैं तो आपको इसे समीक्षक को इंगित करना चाहिए (और/या उन्हें इस धागे पर भेजें!) –

2

वहाँ दो चीजें हैं जो मैं के बारे में पता कर रहा हूँ कर रहे हैं:

1) फ़ाइलें है कि आपके एप्लिकेशन द्वारा उत्पन्न कर रहे हैं (और आपके एप्लिकेशन का उपयोग उपयोगकर्ता) इस तरह के एक चर का मान संग्रहीत अस्थायी पाठ फ़ाइलों के रूप में करने का एक परिणाम नहीं, तो इन फ़ाइलों को दस्तावेज़ निर्देशिका के बजाय लाइब्रेरी/कैश में रखा जाना चाहिए।

2) आपको फ़ाइल को बैकअप न करने के लिए iCloud को बताने के लिए "skip-backup" विशेषता के साथ एक फ़ाइल को भी चिह्नित करना होगा।

मुझे लगता है कि आप चरण 2.

अनुपलब्ध हो सकता है मैं एक साधारण MediaDirectory वर्ग जो जल्दी से मुझे लाइब्रेरी/कैश फ़ोल्डर में फ़ाइलें करने के लिए पथ देता है और भी छोड़ बैकअप विशेषता जोड़ने लिखा था।

के बाद आप पुस्तकालय/कैश फ़ोल्डर में अपनी फ़ाइल सहेज, तो आप बस कुछ इस तरह जाना:

[MediaDirectory addSkipBackupAttributeForFile:@"myTextFile.txt"]; 

यहाँ पूर्ण में वर्ग है:

// Header File 

// ---------------------------------------------------------------------- 
// This class takes a file name (including extension) and returns 
// the path to that file in the Library/Cache folder 
// ---------------------------------------------------------------------- 

#import <Foundation/Foundation.h> 

@interface MediaDirectory : NSObject 

+(NSString *) mediaPathForFileName:(NSString *) fileName; 
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; 
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName; 
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory; 

@end 


// Implementation File 

#import "MediaDirectory.h" 
#include <sys/xattr.h> 

@implementation MediaDirectory 

+(NSString *) mediaPathForFileName:(NSString *) fileName 
{ 
    NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@", cachesDirectory, fileName]; 

    return filePath; 
} 

// if an image needs to be stored in a sub folder called "images" 
+(NSString *) mediaPathForFileName:(NSString *) fileName inSubDirectory:(NSString *) subDirectory 
{ 
    NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
    NSString *cachesDirectory = [directoryPaths objectAtIndex:0]; 
    NSString *filePath = [NSString stringWithFormat:@"%@/%@/%@", cachesDirectory, subDirectory, fileName]; 

    return filePath; 
} 

//+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName 
{ 
    const char* filePath = [[self mediaPathForFileName:fileName] fileSystemRepresentation]; 

    const char* attrName = "com.apple.MobileBackup"; 
    u_int8_t attrValue = 1; 

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    return result == 0; 
} 

+ (BOOL)addSkipBackupAttributeToFile:(NSString *) fileName inSubDirectory:(NSString *) subDirectory 
{ 
    const char* filePath = [[self mediaPathForFileName:fileName inSubDirectory:subDirectory] fileSystemRepresentation]; 

    const char* attrName = "com.apple.MobileBackup"; 
    u_int8_t attrValue = 1; 

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    return result == 0; 
} 

@end 
1

एक फोनगैप ऐप जिसे मैंने अभी सबमिट किया है, उसी कारण से सेब द्वारा अस्वीकार कर दिया गया है, और मैं केवल स्थानीय स्टोरेज का उपयोग कर रहा हूं।

मैं निम्नलिखित वरीयता मेरी config.xml में सेट के साथ पुनः सबमिट कर चुके

<preference name="BackupWebStorage" value="none" /> 

मैं समझता हूँ कि इस समस्या को हल करेंगे