[ios] क्या स्विफ्ट-आधारित एप्लिकेशन ओएस एक्स 10.9 / आईओएस 7 और कम पर काम करते हैं?


Answers

स्विफ्ट कोड ओएस एक्स 10.9 और आईओएस 7.0 पर तैनात किया जा सकता है। यह आमतौर पर पुराने ओएस संस्करणों पर लॉन्च होने पर दुर्घटनाग्रस्त हो जाएगा।

Question

क्या स्विफ्ट-आधारित एप्लिकेशन ओएस एक्स 10.9 (मैवरिक्स) / आईओएस 7 और कम पर काम करेंगे?

उदाहरण के लिए, मेरे पास एक मशीन ओएस एक्स 10.8 (माउंटेन शेर) चल रही है, और मुझे आश्चर्य है कि स्विफ्ट में जो एप्लीकेशन मैं लिखता हूं वह उस पर चलता है।




मैंने आईपॉड टच (3 जी जेन) डिवाइस पर एक नंगे-हड्डी, स्विफ्ट-आधारित ऐप चलाने का परीक्षण किया। ऐसा लगता है कि स्विफ्ट-आधारित ऐप्स आईओएस 5.x के साथ काम नहीं करते हैं लेकिन आईओएस 6.x के साथ काम करते हैं।

आईओएस 5.0.1 के साथ परीक्षण ऐप लॉन्च करने का प्रयास करते समय डीबग लॉग में क्या दिखाया गया है:

dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftCoreGraphics.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDarwin.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftDispatch.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftFoundation.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftObjectiveC.dylib with errno=1
dyld: F_ADDFILESIGS failed for /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswiftUIKit.dylib with errno=1
dyld: Symbol not found: _OBJC_CLASS_$_NSObject
  Referenced from: /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib
  Expected in: /usr/lib/libobjc.A.dylib
 in /private/var/mobile/Applications/59E31E79-9525-43B0-9DF6-8FEF3C0080F1/SwiftTestApp.app/Frameworks/libswift_stdlib_core.dylib

आईओएस 6.1.6 के लिए, ऐप उन त्रुटि संदेशों को प्रदर्शित किए बिना ठीक चलाता है।




ऐसा लगता है कि स्विफ्ट एप्लिकेशन ओएस एक्स 10.7 पर नहीं चलते हैं। मैंने अभी एक साधारण जीयूआई एप्लीकेशन बनाया है (एक दृश्य, एक योग्य, एक बटन) जो मैवरिक्स पर ठीक चलता है। आधार एसडीके 10.9 पर सेट किया गया है और तैनाती लक्ष्य 10.7 पर सेट है। मैंने उस एप्लिकेशन को DerivedData फ़ोल्डर से मेरी 10.7 वर्चुअल मशीन पर कॉपी किया है, और यह प्रारंभ करते समय क्रैश हो जाता है, यह त्रुटि दिखाएं:

Crashed Thread:  0

Exception Type:  EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000

Application Specific Information:
dyld: launch, loading dependent libraries

    Dyld Error Message:

  Library not loaded: /System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics
  Referenced from: /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/../Frameworks/libswiftAppKit.dylib
  Reason: image not found

Binary Images:
       0x109c65000 -        0x109c6afff +private.Swift-Test (1.0 - 1) <649695D0-58FD-3D02-9176-2D40D4E711F2> /Users/USER/Desktop/Swift-Test.app/Contents/MacOS/Swift-Test
       0x109c83000 -        0x109dbffff +libswift_stdlib_core.dylib (1.0 - 600.0.34.4.5) <10AAC369-9404-321D-A892-49F65856D7AF> /Users/USER/Desktop/Swift-Test.app/Contents/Frameworks/libswift_stdlib_core.dylib
...

हालांकि यह संदेश परेशान है, क्योंकि निश्चित रूप से इस वीएम में कोरग्राफिक्स लाइब्रेरी है। कोरग्राफिक्स का भारी उपयोग करने वाले अन्य अनुप्रयोग ठीक काम करते हैं।




हां, वास्तव में ऐप्पल ने घोषणा की है कि स्विफ्ट ऐप्स आईओएस 7 और ओएस एक्स मैवरिक्स के साथ पिछड़े संगत होंगे। इसके अलावा डब्ल्यूडब्ल्यूडीसी ऐप स्विफ्ट प्रोग्रामिंग भाषा में लिखा गया है।




मैंने 10.8 पर एक बहुत ही सरल ऐप की कोशिश की (एक बटन, लेबल पर टेक्स्ट सेट करता है)। यह स्टार्टअप पर दुर्घटनाग्रस्त हो गया, क्योंकि ग्रेग पार्कर ने कहा:

Dyld Error Message:
  Symbol not found: __dispatch_source_type_memorypressure
  Referenced from: /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib
  Expected in: /usr/lib/libSystem.B.dylib
in /Volumes/*/SwifTest.app/Contents/MacOS/../Frameworks/libswiftDispatch.dylib

(यह 10.7 के तैनाती लक्ष्य का उपयोग कर रहा था)




हालांकि कोड ने पुष्टि की है, ऐप्पल ने खुद कहा है कि स्विफ्ट डब्ल्यूडब्ल्यूडीसी 2014 में अपने तकनीकी मुख्य नोट ( प्लेटफार्मों का राज्य , सत्र 102, 34 मिनट 00 सेकंड मार्क के आसपास) में आईओएस 7 और मैवरिक्स पर संगत होगा।




स्विफ्ट Objective-C के समान रनटाइम का उपयोग करता Objective-C और उसी एप्लिकेशन में साइड-बाय-साइड ऑब्जेक्टिव-सी भी रहता है (डब्ल्यूडब्ल्यूडीसी 2014 की मुख्य नोट के अनुसार)।

अंतिम जवाब खोजने के लिए इसे Xcode 6 और नए एसडीके का उपयोग करके चेक / सत्यापित करने की आवश्यकता होगी।




15 फरवरी, 2015 से प्रभावी अपडेट, हम आईओएस 8 से पहले एसडीके का उपयोग करके विकसित किए गए स्टोर में ऐप्स सबमिट नहीं कर सकते हैं। इसलिए, इसे ध्यान में रखते हुए, इस मुद्दे के बारे में चिंता न करने के लिए बेहतर है क्योंकि कई लोगों ने सुझाव दिया है कि स्विफ्ट में किए गए ऐप्स को ओएस एक्स 10.9 और आईओएस 7.0 में भी तैनात किया जा सकता है।




अद्यतन - एक्सकोड 6 बीटा 4 के अनुसार

आईओएस 7 और ओएस एक्स 10.9 न्यूनतम तैनाती लक्ष्य

स्विफ्ट कंपाइलर और एक्सकोड अब आईओएस 7 या ओएस एक्स मैवरिक्स के न्यूनतम तैनाती लक्ष्य को लागू करते हैं। निर्माण विफलता में पहले तैनाती लक्ष्य परिणामों को सेट करना।

एक्सकोड 6 रिलीज नोट से

तो मेरा पिछला उत्तर (नीचे दिखाया गया) किसी और विकास पर लागू नहीं होगा। स्विफ्ट अब आईओएस 6 और नीचे के लिए उपलब्ध नहीं होगा

एक स्विफ्ट एप्लिकेशन आईओएस 6 पर चलाया जा सकता है। हालांकि कई लोग कह रहे हैं कि स्विफ्ट केवल आईओएस 7+ और ओएस एक्स 10.9+ का समर्थन करेगा, मेरे अनुभव से यह नहीं है।

मैंने आईओएस 6 डिवाइस में स्विफ्ट में पूरी तरह लिखे गए एक साधारण एप्लिकेशन का परीक्षण किया है। यह पूरी तरह से ठीक काम करता है । जैसा कि ऐप्पल कहता है, स्विफ्ट कोड उद्देश्य-सी कोड के साथ बाइनरी संगत है। यह बाइनरी बनाने के लिए एक ही कंपाइलर और रनटाइम का उपयोग करता है।

यहां मैंने जो कोड परीक्षण किया है वह यहां दिया गया है:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {

        super.viewDidLoad()

        let button   = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.frame = CGRectMake(100, 100, 100, 50)
        button.backgroundColor = UIColor.greenColor()
        button.setTitle("Test Button", forState: UIControlState.Normal)
        button.addTarget(self, action: "buttonTapped:", forControlEvents: UIControlEvents.TouchUpInside)

        self.view.addSubview(button)
    }

    func buttonTapped(sender: UIButton!) {
        println("buttonTapped")
    }
}

यह एक साधारण अनुप्रयोग है, बस एक प्रोग्राम प्रोग्रामेटिक रूप से जोड़ रहा है। मेरे एप्लिकेशन में केवल दो फाइलें हैं, AppDelegate.swift और ViewController.swift

इसलिए यदि आप आईओएस 8 एसडीके या कुछ स्विफ्ट विशिष्ट एपीआई (संबंधित एपीआई उद्देश्य-सी के लिए उपलब्ध नहीं है) के हिस्से के रूप में जोड़े गए किसी भी नए एपीआई का उपयोग नहीं कर रहे हैं तो आपका एप्लिकेशन आईओएस 6 या बाद में (परीक्षण और काम करने) पर काम करेगा, यहां तक ​​कि आईओएस 5 पर (परीक्षण नहीं किया गया)। स्विफ्ट में अधिकांश एपीआई केवल मौजूदा उद्देश्य-सी एपीआई के प्रतिस्थापन हैं। वास्तव में वे बाइनरी में समान हैं।

नोट: स्विफ्ट ऐप्स परिनियोजन लक्ष्य के लिए एक्सकोड 6 बीटा 4 के अनुसार आईओएस 7 या ओएस एक्स 10.9 होना चाहिए (ऊपर अपडेट देखें)। तो तेजी से आईओएस 6 और नीचे के लिए उपलब्ध नहीं होगा






Links