दिलचस्प पोस्ट
UIViewController को UIView से प्राप्त करें? जावास्क्रिप्ट में स्क्रिप्ट को समाप्त कैसे करें PHP को महीने के लिए सप्ताह की संख्या मिलती है क्या करता है "निम्नलिखित पैकेज 'पैकेज से छिपी हुई है: xxx' मतलब है? आप कैसे सी # में कोड के साथ नेटवर्क सेटिंग्स (आईपी पता, डीएनएस, WINS, होस्ट नाम) बदल सकते हैं हेडर सूचना को संशोधित नहीं कर सकता – हेडर जो पहले से ही भेजे गए हैं … WordPress अंक VBA में अंतिम उपयोग किए गए सेल को ढूँढने में त्रुटि एक .py फ़ाइल पार्स करें, एएसटी पढ़ें, इसे संशोधित करें, फिर संशोधित स्रोत कोड को वापस लिखें GetAttribute () और getParameter () के बीच का अंतर एक तारीख को वर्ष और महीने ("य्या-मिमी" प्रारूप) परिवर्तित करना? स्ट्रिंग के रूप में दिए गए गणितीय अभिव्यक्ति को पार्स करने और संख्या वापस करने के लिए कैसे? सी # SQL सर्वर डेटाटाइव के समतुल्य मेरी संरचनाएं जेसन में मार्शलिंग नहीं कर रही हैं फ़ाइल संवाद चुनें मैं कैसे इकाई ढांचे में शून्य मूल्यों के लिए क्वेरी कर सकते हैं?

एप्लिकेशन समूह के साथ ऐप्स के बीच डेटा संचार और जारी रहें

आईओएस 8 ने एपी समूह के बारे में कल एक नया एपीआई का खुलासा किया। डेटा साझा करने और क्षुधा के बीच संवाद करने से पहले यह एक प्रकार का गड़बड़ था और मेरा मानना ​​है कि यह ठीक है कि ऐप समूह का सही उद्देश्य क्या है।

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

तो ऐप समूह वास्तव में क्या करने का इरादा है? क्या इसका उपयोग करने के लिए कहीं कोई दस्तावेज है?

वेब के समाधान से एकत्रित समाधान "एप्लिकेशन समूह के साथ ऐप्स के बीच डेटा संचार और जारी रहें"

ऐप ग्रुप के लिए एक अन्य लाभ एक NSUserDefaults डेटाबेस साझा करने की क्षमता है। यह ऐप एक्सटेंशन (अधिसूचना केंद्र विजेट, कस्टम कीबोर्ड आदि) के लिए भी काम करता है।

अपने NSUserDefaults को ऐप समूह के सभी अनुप्रयोगों में इस तरह से आरंभ करें और वे डेटाबेस साझा करेंगे:

उद्देश्य सी:

 [[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"]; 

स्विफ्ट:

 NSUserDefaults(suiteName: "<group identifier>") 

प्रत्येक एप्लिकेशन के लिए [NSUserDefaults standardUserDefaults] डेटाबेस से हर चीज को ध्यान में रखें, इस डेटाबेस में नहीं ले जाएगा

दस्तावेज़ीकरण एक सही उदाहरण भी देता है (बीटा 3 के अनुसार)

और डेटाबेस को सिंक्रनाइज़ करने के लिए मत भूलना:

 [yourDefaults synchronize]; 

एकाधिक ऐप्स के बीच डेटा साझा करना NSUserDefaults

एक ऐप और एक एक्सटेंशन या 2 एप के बीच साझा डिफॉल्ट के लिए आपको निम्न चरणों का उपयोग कर अपनी सेटिंग्स में एप समूह जोड़ना होगा:

  1. प्रोजेक्ट नेविगेटर में * .xcodeproj फ़ाइल (शीर्ष पर होना चाहिए) पर क्लिक करें।
  2. प्रोजेक्ट नेविगेटर के अधिकार के लिए परियोजना और लक्ष्य के लिए देखो लक्ष्य के तहत अपने प्राथमिक लक्ष्य पर क्लिक करें (लक्ष्य के तहत पहली बात होनी चाहिए)
  3. शीर्ष पर, क्षमताओं टैब पर क्लिक करें।
  4. ऐप समूह अनुभाग में ऐप ग्रुप ऑन चालू करने के लिए स्विच को दाईं ओर क्लिक करें।
  5. + बटन पर क्लिक करें और group.com.company.myApp नामक एक ऐप समूह जोड़ें।
  6. अपने अन्य ऐप्स में एक ही स्थान पर जाएं और इस समूह को अब चुनने के लिए उपलब्ध होना चाहिए। प्रत्येक समूह के लिए इस समूह को चालू करें जो इस साझा डेटा का उपयोग करेंगे।

नोट: यदि आप ऐप्पल डेवलपर पोर्टल (ऐप्पल वेबसाइट जो आपके सभी प्रमाण पत्र, पहचानकर्ता, उपकरण और प्रोविजनिंग प्रोफाइल को दिखाता है) पर जाते हैं और पहचानकर्ताओं> ऐप समूह पर जाएं, तो आपको यह नया ऐप समूह देखना चाहिए।

डेटा संग्रहीत करने के लिए:

 var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp") userDefaults!.setObject("user12345", forKey: "userId") userDefaults!.synchronize() 

डेटा पुनः प्राप्त करने के लिए:

 var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp") if let testUserId = userDefaults?.objectForKey("userId") as? String { print("User Id: \(testUserId)") } 

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

कुछ हेडर grep'ing के बाद, मुझे लगता है कि मैं एपीआई की जरूरत पाया, लेकिन वास्तव में आईओएस 7 के हिस्से के रूप में रखा गया था

NSFileManager पर एक विधि है containerURLForSecurityApplicationGroupIdentifier: जहां आप अपने ऐप के लिए ऐप समूह को चालू करते समय बनाया गया पहचानकर्ता में पास कर सकते हैं:

 NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.company.app"]; 

आज एक महत्वपूर्ण जाल है जो मैंने पाया है:

कई परियोजनाओं में मैंने एक एकल ऐप लक्ष्य देखा और उस लक्ष्य के प्रत्येक कॉन्फ़िगरेशन के लिए सेट किए गए विभिन्न बंडल पहचानकर्ताओं के साथ। यहां चीज़ें गड़बड़ होती हैं डेवलपर्स का उद्देश्य डिबग कॉन्फ़िग के लिए डिबग ऐप और रिलीज़ लक्ष्य के लिए एक उत्पादन ऐप बनाना था।

यदि आप ऐसा करते हैं तो दोनों ऐप उसी NSUserDefaults साझा करते हैं, जब वे इस तरह सेट होते हैं

 var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp") userDefaults!.setObject("user12345", forKey: "userId") userDefaults!.synchronize() 

इससे कई स्थानों में समस्याएं आती हैं:

  1. कल्पना कीजिए कि आप कुंजी के लिए हाँ सेट करते हैं जब उपयोगकर्ता के लिए एक विशेष ऐप-परिचय स्क्रीन दिखाई देती है। अन्य ऐप अब भी YES को पढ़ेगा और पहचान नहीं दिखाएगा।
  2. हां कुछ ऐप भी उनके उपयोगकर्ता डिफ़ॉल्ट में ओअथ टोकन को स्टोर करते हैं। वैसे भी … कार्यान्वयन के आधार पर, ऐप पहचानता है कि एक टोकन है और गलत टोकन का उपयोग करके डेटा को पुनः प्राप्त करना शुरू कर रहा है। संभावना यह है कि यह अजीब त्रुटियों के साथ असफल हो जायेगी।

सामान्य में इस समस्या का समाधान डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ डिफ़ॉल्ट कुंजी को प्रीफ़िक्स करना है आप अपने कॉन्फ़िगरेशन के लिए अलग-अलग बंडल पहचानकर्ता सेट करके रनटाइम पर आसानी से कॉन्फ़िगरेशन का पता लगा सकते हैं। तो बस NSBundle.mainBundle() से बंडल पहचानकर्ता पढ़ें। यदि आपके पास एक ही बंडल आइडेंटिफ़ायर हैं तो आपको अलग प्रीप्रोसेसर मैक्रोज़ सेट करना होगा

 #ifdef DEBUG NSString* configuration = @"debug"; #elif RELEASE NSString* configuration = @"release"; #endif 

स्विफ्ट में यह लगभग एक ही दिखेगा:

 #if DEBUG let configuration = "debug" #elseif RELEASE let configuration = "release" #endif 

संचय करना

 let shared: NSUserDefaults = NSUserDefaults(suiteName: "group.abcapp")! shared.setObject("abc.png", forKey: "favEmoji") shared.synchronize()