Swift के साथ मोनोरिपॉजिटरी: शुरुआती लोगों के लिए कोड संगठन
\n\nजब आप iOS या macOS के लिए Swift में एप्लिकेशन विकसित करना शुरू करते हैं, तो देर-सबेर आपके सामने यह प्रश्न आता है: कोड को कैसे व्यवस्थित करें ताकि वह अव्यवस्थित न हो जाए? खासकर यदि आपके पास कई प्रोजेक्ट हैं (उदाहरण के लिए, iOS एप्लिकेशन, watchOS एक्सटेंशन और Vapor पर सर्वर साइड)। आधुनिक दृष्टिकोणों में से एक है मोनोरिपॉजिटरी (monorepo)। इस लेख में, हम समझेंगे कि मोनोरिपॉजिटरी क्या है, Swift डेवलपमेंट में इसकी आवश्यकता क्यों है, और इसे व्यवहार में कैसे व्यवस्थित किया जाए।
\n\nमोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?
\n\nमोनोरिपॉजिटरी (monorepo) कोड प्रबंधन का एक दृष्टिकोण है, जिसमें सभी प्रोजेक्ट, लाइब्रेरी और मॉड्यूल एक ही रिपॉजिटरी (उदाहरण के लिए, Git में) में संग्रहीत होते हैं। मल्टीरिपॉजिटरी के विपरीत, जहां प्रत्येक प्रोजेक्ट अपने अलग भंडार में रहता है, मोनोरिपॉजिटरी सब कुछ एक ही स्थान पर एकीकृत करता है।
\n\nSwift डेवलपर्स के लिए, यह कई लाभ प्रदान करता है:
\n\n- \n
- निर्भरताओं का एकीकृत संस्करण — आपको ठीक-ठीक पता होता है कि सभी प्रोजेक्ट में लाइब्रेरी का कौन सा संस्करण उपयोग हो रहा है। \n
- सरलीकृत रिफैक्टरिंग — एक लाइब्रेरी में API में बदलाव तुरंत सभी आश्रित प्रोजेक्ट में दिखाई देता है। \n
- साझा सेटिंग्स — एक SwiftLint, एक CI/CD कॉन्फ़िग, एक फ़ॉर्मेटिंग नियम। \n
- आसान खोज — सब कुछ एक ही स्थान पर, रिपॉजिटरी के बीच स्विच करने की आवश्यकता नहीं। \n
हालांकि, कुछ बारीकियाँ भी हैं: मोनोरिपॉजिटरी में अनुशासन और सही संरचना की आवश्यकता होती है, अन्यथा यह 'कबाड़खाना' बन जाता है। लेकिन शुरुआती लोगों के लिए, कोड को व्यवस्थित करना सीखने का यह एक शानदार तरीका है।
\n\nSwift प्रोजेक्ट के लिए मोनोरिपॉजिटरी की संरचना
\n\nमान लीजिए कि आप साझा मॉड्यूल के साथ iOS के लिए एक एप्लिकेशन बना रहे हैं। Swift पर एक विशिष्ट मोनोरिपॉजिटरी संरचना इस प्रकार दिख सकती है:
\n\nMyMonorepo/\n├── Apps/\n│ ├── iOSApp/ # मुख्य iOS एप्लिकेशन\n│ │ ├── Sources/\n│ │ ├── Resources/\n│ │ └── Package.swift\n│ └── macOSApp/ # macOS संस्करण\n│ ├── Sources/\n│ └── Package.swift\n├── Packages/\n│ ├── Core/ # सामान्य उपयोगिताएँ (नेटवर्क, लॉगिंग)\n│ │ ├── Sources/\n│ │ └── Package.swift\n│ ├── UIComponents/ # पुन: प्रयोग करने योग्य UI घटक\n│ │ ├── Sources/\n│ │ └── Package.swift\n│ └── Analytics/ # एनालिटिक्स मॉड्यूल\n│ ├── Sources/\n│ └── Package.swift\n├── Scripts/ # सहायक स्क्रिप्ट\n├── .swiftlint.yml # एकीकृत लिंटर कॉन्फ़िग\n├── Package.swift # रूट मेनिफेस्ट (वैकल्पिक)\n└── README.md\n\nध्यान दें: यहाँ Swift Package Manager (SPM) का उपयोग किया गया है — Swift में निर्भरताओं के प्रबंधन के लिए मानक उपकरण। प्रत्येक मॉड्यूल एक अलग Swift Package है, जिसे एप्लिकेशन से जोड़ा जा सकता है।
\n\nSwift पर मोनोरिपॉजिटरी कैसे बनाएं: चरण-दर-चरण मार्गदर्शिका
\n\nआइए दो मॉड्यूल और एक एप्लिकेशन के साथ एक सरल मोनोरिपॉजिटरी बनाएं। टर्मिनल में निम्नलिखित चरणों का पालन करें:
\n\nचरण 1: रूट डायरेक्टरी बनाएं और Git आरंभ करें
\n\nmkdir MyMonorepo\ncd MyMonorepo\ngit init\n\nचरण 2: फ़ोल्डर संरचना बनाएं
\n\nmkdir -p Apps/iOSApp/Sources\nmkdir -p Packages/Core/Sources\nmkdir -p Packages/UIComponents/Sources\n\nचरण 3: Core मॉड्यूल के लिए Package.swift बनाएं
\n\nफ़ाइल Packages/Core/Package.swift बनाएं:
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n name: "Core",\n platforms: [\n .iOS(.v16),\n .macOS(.v13)\n ],\n products: [\n .library(\n name: "Core",\n targets: ["Core"])\n ],\n targets: [\n .target(\n name: "Core",\n path: "Sources")\n ]\n)\n\nचरण 4: Core मॉड्यूल में सरल कोड लिखें
\n\nPackages/Core/Source बनाएं