আমি আজ একটি গুরুত্বপূর্ণ ট্র্যাপটি টেপ করেছি:
অনেক প্রকল্পে আমি একটি একক অ্যাপ্লিকেশন লক্ষ্য দেখেছি এবং সেই লক্ষ্যটির প্রতিটি কনফিগারেশনের জন্য সেট করা বিভিন্ন বান্ডিল শনাক্তকারী with এখানে জিনিসগুলি অগোছালো হয়ে যায়। বিকাশকারীরা যা লক্ষ্য করেছিলেন তা হ'ল ডিবাগ কনফিগারেশনের জন্য একটি ডিবাগ অ্যাপ্লিকেশন এবং প্রকাশের টার্গেটের জন্য একটি প্রোডাকশন অ্যাপ তৈরি করা।
আপনি যদি এটি করেন তবে উভয় অ্যাপ্লিকেশন সেগুলির মতো সেট আপ করার সময় একই এনএসইউসারডেফল্টগুলি ভাগ করবে
var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
userDefaults!.setObject("user12345", forKey: "userId")
userDefaults!.synchronize()
এটি অনেক জায়গায় সমস্যা সৃষ্টি করে:
- কল্পনা করুন আপনি যখন কোনও বিশেষ অ্যাপ্লিকেশন-পরিচয়-পর্দা ব্যবহারকারীর কাছে প্রদর্শিত হবে তখন আপনি কীটির জন্য YES সেট করেছেন। অন্যান্য অ্যাপ্লিকেশনটি এখন হ্যাঁ পড়বে এবং পরিচিতিটি প্রদর্শন করবে না।
- হ্যাঁ কিছু অ্যাপস তাদের ডিফল্টগুলিতে ওআউথ টোকেনগুলিও সঞ্চয় করে। যাইহোক ... প্রয়োগের উপর নির্ভর করে অ্যাপ্লিকেশনটি স্বীকৃতি দেবে যে একটি টোকেন রয়েছে এবং ভুল টোকেন ব্যবহার করে ডেটা পুনরুদ্ধার শুরু করবে। সুযোগটি বেশি যে এটি আজব ত্রুটি সহ ব্যর্থ হবে।
সাধারণভাবে এই সমস্যার সমাধানটি হ'ল বর্তমান কনফিগারেশনটি পূর্বনির্ধারিত কীগুলি উপসর্গ করা। আপনি আপনার কনফিগারেশনের জন্য বিভিন্ন বান্ডিল শনাক্তকারী সেট করে রানটাইমে সহজেই কনফিগারেশনটি সনাক্ত করতে পারেন। তারপরে কেবল এখান থেকে বান্ডিল শনাক্তকারী পড়ুন NSBundle.mainBundle()
। আপনার যদি একই বান্ডিল শনাক্তকারী থাকে তবে আপনার পছন্দ মতো বিভিন্ন প্রিপ্রেসেসর ম্যাক্রো সেট করতে হবে
#ifdef DEBUG
NSString* configuration = @"debug";
#elif RELEASE
NSString* configuration = @"release";
#endif
সুইফটে এটি দেখতে প্রায় একই রকম হবে:
#if DEBUG
let configuration = "debug"
#elseif RELEASE
let configuration = "release"
#endif