2012-06-26 2 views
5

अस्वीकार कर दिया जाएगा मेरा ऐप अस्वीकार कर दिया गया क्योंकि ऐसा लगता है कि 7 एमबी दस्तावेज़ फ़ोल्डर में संग्रहीत हैं और वे स्वचालित रूप से icloud को भेज दिए जाते हैं।NSURLIsExcludedFromBackupKey - ऐप्स को आईओएस डेटा स्टोरेज दिशानिर्देशों का पालन करना होगा या उन्हें

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL { 

    const char* filePath = [[URL path] fileSystemRepresentation]; 
    const char* attrName = "com.apple.MobileBackup"; 
    if (&NSURLIsExcludedFromBackupKey == nil) { 
    // iOS 5.0.1 and lower 
    u_int8_t attrValue = 1; 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); 
    return result == 0; 
} 
    else { 
    // First try and remove the extended attribute if it is present 
    int result = getxattr(filePath, attrName, NULL, sizeof(u_int8_t), 0, 0); 
    if (result != -1) { 
     // The attribute exists, we need to remove it 
     int removeResult = removexattr(filePath, attrName, 0); 
     if (removeResult == 0) { 
      NSLog(@"Removed extended attribute on file %@", URL); 
     } 
    } 

    // Set the new key 
    NSError *error = nil; 
    [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
    return error == nil; 
    } 

संस्करण मेरे ऐप्लिकेशन के 1.1 इस कोड को लागू होने के बाद मंजूरी दे दी थी: तो मैं सभी फ़ाइलों है कि इस विधि सोचा दस्तावेजों फ़ोल्डर में लिखा जाएगा फंस गए हैं। पिछले हफ्ते मैंने एक ही ऐप के संस्करण 1.2 को भेजने की कोशिश की थी (फ़ाइल प्रबंधन में कुछ भी नहीं बदला है, दस्तावेज़ फ़ोल्डर में संग्रहीत सभी फाइलें addSkipBackupAttributeToItemAtURL विधि के माध्यम से looped हैं)। मेरा ऐप उसी कारण से फिर से खारिज कर दिया गया था। मैं अपनी फ़ाइल को अस्थायी या कैश फ़ोल्डर में नहीं ले जा सकता क्योंकि मेरा ऐप पूरी तरह से फ़ाइल को पुनर्स्थापित नहीं कर सकता है (इस फ़ाइल में से एक डीबी है, डीबी बहाल करने का मतलब किसी भी उपयोगकर्ता डाले गए डेटा को ढीला करना है), इसलिए यह समाधान नहीं हो सकता है । वैसे भी मुझे कोड में कोई समस्या मिली है, इस प्रकार मैं विधि को कॉल करता हूं:

[स्वयं addSkipBackupAttributeToItemAtURL: [NSURL fileURLWithPath: fullPath]];

आईओएस 5.1 के साथ [NSURL fileURLWithPath: fullPath] डिवाइस का उपयोग कर एक त्रुटि लौटाता है और यह विशेषता बनाने के लिए असंभव प्रतीत होता है। अगर मैं nsurl के प्रारंभिककरण को [NSURL URLWithString: defaultStorePath] के साथ बदलता हूं, तो 5.1 के साथ डिवाइस सही ढंग से विशेषता जोड़ता है।

आईओएस 5.0.1 के साथ सभी उलटा हुआ है, [NSURL URLWithString: defaultStorePath] एक त्रुटि लौटाता है जबकि [NSURL fileURLWithPath: fullPath] काम करता है।

शायद मैं आईओएस संस्करण की जांच कर सकता हूं और उचित एनएसआरएल प्रारंभिकता सेट कर सकता हूं, लेकिन यह अभी भी एक समस्या बनी हुई है। अस्वीकृति स्पष्टीकरण में मैंने पढ़ा:

विशेष रूप से, हमने पाया कि लॉन्च और/या सामग्री डाउनलोड पर, आपका ऐप 7 एमबी स्टोर करता है। जांच करने के लिए कितना डेटा आपके ऐप्लिकेशन भंडारण किया जाता है:

  • स्थापित करें और अपने अनुप्रयोग
  • सेटिंग्स> iCloud> संग्रहण & बैकअप पर जाएं लांच> प्रबंधित संग्रहण
  • यदि आवश्यक हो, "सभी दिखाएं ऐप्लिकेशन"
  • नल
  • तो मैं यह मान मैं सही nsurl प्रारंभ (सभी विशेषताओं को ठीक से सेट कर रहे हैं जब) के साथ 7 एमबी यह भी देखना जाँच करने की कोशिश को अपने ऐप्लिकेशन के भंडारण

की जाँच करें। सही व्यवहार क्या है? इस समस्या के साथ कोई भी? क्या मुझे इसे महत्वपूर्ण बनाने के लिए सेब द्वारा सुझाए गए ऐप स्टोरेज चेक से पहले कुछ विशिष्ट करना है?

उत्तर

0

मुझे तब तक वही समस्या थी जब तक कि मैंने अपने डिवाइस से अपना ऐप हटाया नहीं, और पुनः स्थापित किया। मुझे सेटिंग-> स्टोरेज & बैकअप -> स्टोरेज

पर चलकर आईक्लाउड बैकअप से मौजूदा कैश किए गए डेटा को भी हटाना पड़ा। यह चाल चल रहा था। इसके अलावा, छोड़ विशेषता जोड़ने के लिए मेरी कोड थोड़ा अलग है: Code lifted from this post

- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

    if (&NSURLIsExcludedFromBackupKey == nil) { // iOS <= 5.0.1 
     const char* filePath = [[URL path] 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; 
    } 
    else { // iOS >= 5.1 
     NSError *error = nil; 
     [URL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 
     return error == nil; 
    } 


} 
2

मुझे लगता है कि चाल NSURLIsExcludedFromBackupKey जोड़ सकते हैं और सुनिश्चित करें कि निर्देशिका दस्तावेजों निर्देशिका के बाहर है बनाने के लिए है। मैंने पुस्तकालय/एप्लिकेशन समर्थन फ़ोल्डर में अपने दस्तावेज़ों को स्थानांतरित करके ऐसा किया (क्योंकि यह/tmp या/कैश फ़ोल्डरों में समझ में नहीं आया था):

// store in /Library/Application Support/BUNDLE_IDENTIFIER/Reference 
// make sure Application Support folder exists 
NSURL *applicationSupportDirectory = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory 
                      inDomain:NSUserDomainMask 
                    appropriateForURL:nil 
                       create:YES 
                       error:&error]; 
if (error) { 
    NSLog(@"KCDM: Could not create application support directory. %@", error); 
    return nil; 
} 

NSURL *referenceFolder = [applicationSupportDirectory URLByAppendingPathComponent:@"Reference" isDirectory:YES]; 
if (![[NSFileManager defaultManager] createDirectoryAtPath:[referenceFolder path] 
           withIntermediateDirectories:YES 
               attributes:nil 
                error:&error]) { 
    NSLog(@"KCDM: Error creating Reference folder to store model %@: %@", modelName, error); 
    return nil; 
} 

BOOL success = [referenceFolder setResourceValue:@YES forKey: NSURLIsExcludedFromBackupKey error: &error]; 
if(!success){ 
    NSLog(@"KCDM: Error excluding %@ from backup %@", referenceFolder, error); 
} 
संबंधित मुद्दे