पुराने iOS और macOS पर Swift: क्या OS X 10.9 और iOS 7 पर कोड काम करता है?

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

पुराने सिस्टम पर Swift: मिथक और सच्चाई

\n\n

एक स्थिति की कल्पना करें: आपने Swift में एक शानदार ऐप बनाया है, जो आपके iPhone (iOS 16) पर बढ़िया चलता है। लेकिन तभी एक यूज़र iOS 7 वाले पुराने फोन से आता है और शिकायत करता है कि ऐप क्रैश हो रहा है। या फिर आप Mac के लिए कोई यूटिलिटी बना रहे हैं और क्लाइंट अभी भी OS X 10.9 Mavericks पर काम कर रहा है। यह परेशानी जानी-पहचानी लग रही है? आइए, एक बार और हमेशा के लिए समझ लें कि क्या Swift ऐप्स Apple के पुराने ऑपरेटिंग सिस्टम पर काम करते हैं या नहीं।

\n\n

यह सवाल Stack Overflow पर सबसे ज़्यादा पूछे जाने वाले सवालों में से एक है (10,000 से अधिक व्यूज)। और इसका जवाब उतना सीधा नहीं है जितना आप सोचते हैं। इस लेख में हम सिर्फ थ्योरी नहीं देंगे, बल्कि रियल कोड उदाहरण दिखाएंगे, Swift रनटाइम के काम करने का तरीका समझाएंगे, और कम्पैटिबिलिटी चेक करने के लिए एक चेकलिस्ट देंगे।

\n\n

संक्षिप्त जवाब: हाँ, लेकिन कुछ शर्तों के साथ

\n\n

अगर आप सीधा जवाब चाहते हैं तो — Swift ऐप्स OS X 10.9 और iOS 7 पर काम कर सकते हैं, लेकिन केवल तब जब आप Swift 5.5 या उससे नए वर्जन का उपयोग कर रहे हों। Swift के पुराने वर्जन (1.x–4.x) रनटाइम की खासियतों के कारण इन सिस्टम को सपोर्ट नहीं करते। अजीब लग रहा है? आइए, इसे क्रम से समझते हैं।

\n\n

पुराने सिस्टम पर Swift कैसे काम करता है?

\n\n

इसका राज़ ABI-स्टेबिलिटी (Application Binary Interface) में छिपा है। Swift 5.0 से पहले, हर ऐप अपने साथ Swift की स्टैंडर्ड लाइब्रेरी की एक कॉपी लेकर चलता था। इसके कारण:

\n
    \n
  • ऐप का साइज़ 5–10 MB तक बढ़ जाता था
  • \n
  • रनटाइम उस Swift वर्जन से सख्ती से बंधा होता था जिससे ऐप कम्पाइल किया गया था
  • \n
  • पुराने सिस्टम में Swift के लिए कोई बिल्ट-इन सपोर्ट नहीं था
  • \n
\n\n

Swift 5.0 (Xcode 10.2) से शुरू करके, ABI स्थिर हो गया। इसका मतलब है कि Swift की स्टैंडर्ड लाइब्रेरी अब iOS, macOS, tvOS और watchOS में सीधे बिल्ट-इन है। लेकिन एक पेंच है: यह केवल iOS 12.4+ और macOS 10.14.4+ में बिल्ट-इन है। पुराने सिस्टम (iOS 7, OS X 10.9) के लिए, आपको रनटाइम को अपने साथ ले जाना होगा — और यह संभव है!

\n\n

यह कब संभव हुआ?

\n\n

Swift 5.5 (Xcode 13) से शुरू करके, Apple ने पुराने deployment target के लिए सपोर्ट जोड़ा। अब आप IPHONEOS_DEPLOYMENT_TARGET = 7.0 या MACOSX_DEPLOYMENT_TARGET = 10.9 सेट करके ऐप बना सकते हैं, और वह काम करेगा।

\n\n

प्रोजेक्ट सेटअप कोड में यह इस तरह दिखता है:

\n\n
// Swift Package Manager में deployment target सेट करने का उदाहरण\n// Package.swift\nlet package = Package(\n    name: "MyLegacyApp",\n    platforms: [\n        .iOS(.v7),      // iOS 7 और उससे नया\n        .macOS(.v10_9)  // OS X 10.9 और उससे नया\n    ],\n    dependencies: [],\n    targets: [\n        .target(\n            name: "MyLegacyApp",\n            swiftSettings: [\n                .unsafeFlags(["-target", "x86_64-apple-macosx10.9"])\n            ]\n        )\n    ]\n)
\n\n

प्रैक्टिकल उदाहरण: iOS 7 के लिए Swift ऐप

\n\n

चलिए एक सरल उदाहरण लिखते हैं जो iOS 7 पर काम करेगा। ध्यान दें: हम आधुनिक API (जैसे UIAlertController, जो केवल iOS 8 में आया) का उपयोग नहीं कर सकते।

\n\n
import UIKit\n\n// iOS 7 के साथ संगत क्लास\nclass LegacyViewController: UIViewController {\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        // पुराना UIAlertView उपयोग करें (iOS 7 पर काम करता है)\n        let alert = UIAlertView()\n        alert.title = "Swift से नमस्ते!"\n        alert.message = "यह ऐप iOS 7 पर काम कर रहा है"\n        alert.addButton(withTitle: "OK")\n        alert.show()\n        \n        // वैकल्पिक: iOS वर्जन चेक करें\n        if #available(iOS 8.0, *) {\n            // iOS 8+ के लिए आधुनिक कोड\n            let modernAlert = UIAlertController(\n                title: "आधुनिक अलर्ट",\n                message: "केवल iOS 8+ पर काम करता है",\n                preferredStyle: .alert\n            )\n            modernAlert.addAction(UIAlertAction(title: "OK", style: .default))\n            present(mode                

ब्लॉग

पुस्तक अनुशंसाएँ