ios - update - swift manual




스위프트 기반 응용 프로그램이 OS X 10.9/iOS 7 이하에서 작동합니까? (12)

Swift 기반 애플리케이션은 OS X 10.9 (Mavericks) / iOS 7 이하에서 작동합니까?

예를 들어, OS X 10.8 (Mountain Lion)을 실행하는 컴퓨터가 있고 Swift에서 작성한 응용 프로그램이 실행되는지 궁금합니다.


요약하자면 :

신속한 기반 응용 프로그램은 동일한 응용 프로그램으로 OS X Mavericks 또는 iOS 7 을 대상으로 다시 타겟팅 할 수 있습니다.

그게 어떻게 가능해 ?

Xcode는 앱 번들 내에 작은 Swift 런타임 라이브러리를 내장합니다. 라이브러리가 내장되어 있기 때문에 앱은 과거, 현재 및 미래 OS 릴리스에서 실행되는 일관된 Swift 버전을 사용합니다.

왜이 대답을 믿어야합니까?

이 답변을 한 사과 사람이 트위터에서 나에게 말한 것처럼 말하지 않기 때문에 또는 나는 세상을 썼다.

사과 개발자 블로그 에서 가져 왔습니다.

그래서 당신은 이것을 믿을 수 있습니다.


업데이트 - Xcode 6 베타 4에 따라

iOS 7 및 OS X 10.9 최소 배포 대상

Swift 컴파일러와 Xcode는 이제 iOS 7 또는 OS X Mavericks의 최소 배포 대상을 시행합니다. 이전 배포 대상을 설정하면 빌드가 실패합니다.

Xcode 6 릴리스 노트에서

따라서 이전 답변 (아래에 표시)은 이후 개발에는 적용되지 않습니다. 스위프트는 iOS6 이하에서 더 이상 사용할 수 없습니다.

Swift는 iOS 6에서 실행될 수 있습니다. 많은 사람들이 Swift가 iOS 7+ 및 OS X 10.9+ 만 지원할 것이라고 말하고 있지만, 내 경험에 의하면 그렇지 않습니다.

iOS 6 장치에서 Swift로 작성된 간단한 응용 프로그램을 테스트했습니다. 완벽하게 잘 작동합니다 . Apple이 말한 것처럼 Swift 코드는 Objective-C 코드와 이진 호환됩니다. 바이너리를 생성하기 위해 동일한 컴파일러와 런타임을 사용합니다.

다음은 테스트 한 코드입니다.

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.swiftViewController.swift 두 파일 만 있습니다.

따라서 iOS 8 SDK 또는 일부 Swift 특정 API (Objective-C에 해당 API를 사용할 수 없음)의 일부로 추가 된 새 API를 사용하지 않는 경우 응용 프로그램은 iOS 6 이상 (테스트 및 작동)에서도 원활하게 작동합니다. iOS 5 (테스트하지 않음). Swift의 대부분의 API는 기존 Objective-C API를 대체합니다. 사실 그들은 바이너리에서 동일합니다.

참고 : 빠른 앱 배포를위한 Xcode 6 베타 4는 iOS 7 또는 OS X 10.9이어야합니다 (위 업데이트 참조). iOS6 이하에서는 신속하게 사용할 수 없습니다.



Swift 애플리케이션 OS X 10.7 에서 실행 되지 않습니다 . 난 그냥 매버릭스에서 잘 돌아가는 간단한 GUI 애플리케이션 (보기, lable, 버튼)을 만들었다. 기본 SDK는 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
...

그러나이 메시지에는 분명히 CoreGraphics 라이브러리가 있기 때문에이 메시지는 자극적입니다. CoreGraphics를 많이 사용하는 다른 응용 프로그램도 정상적으로 작동합니다.


나는 iPod Touch (3rd gen) 기기에서 베어 본, 스위프트 기반 앱 실행을 테스트했습니다. 스위프트 기반 앱 iOS 5.x에서는 작동 하지 않지만 iOS 6.x 에서는 작동합니다.

iOS 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

iOS 6.1.6의 경우 앱은 오류 메시지를 표시하지 않고 정상적으로 실행됩니다.


나는 대답했다 : No, Swift는 iOS 7 이하에서 작동하지 않는다. 그렇지만 나는 Xcode 5에서 6.0 배포 목표를 실행하는 Swift 프로젝트를 만들었다.

  • Xcode 6 베타 에서 Swift 프로그래밍 언어를 선택하여 데모 프로젝트를 만들었습니다.
  • Xcode 6 베타를 닫고 배포 목표 6.0을 사용하여 Xcode 5에서이 데모 프로젝트를 엽니 다.
  • 또한 시뮬레이터 6.1을 선택하십시오.

그런 다음 해당 프로젝트는 시뮬레이터 6.1 에서 잘 실행됩니다. 내 MacOS X는 10.9.3 이므로 Mac OS X 10.9.3에서 iOS 7 보다 낮게 실행됩니다.

여기 시뮬레이터의 스크린 샷입니다 :

데모도 있습니다.


난 그냥 당신을 위해 그것을 테스트, 신속한 응용 프로그램 표준 바이너리로 컴파일하고 OS X 10.9 및 IOS 7에서 실행할 수 있습니다.

테스트에 사용되는 간단한 Swift 응용 프로그램 :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

    var controller = UIViewController()
    var view = UIView(frame: CGRectMake(0, 0, 320, 568))
    view.backgroundColor = UIColor.redColor()
    controller.view = view

    var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
    label.center = CGPointMake(160, 284)
    label.textAlignment = NSTextAlignment.Center
    label.text = "I'am a test label"
    controller.view.addSubview(label)

    self.window!.rootViewController = controller
    self.window!.makeKeyAndVisible()
    return true
}

낡은 대답이 많아서 스위프트 팀의 공식 응답을 게시하고 싶었습니다. Swift는 OS X Mavericks 및 iOS 7과 역 호환됩니다.

Apple 개발자 신속한 블로그 : Objective-C id as Swift Any

2014 년 7 월 11 일

적합성

우리가 WWDC에서 들었던 가장 일반적인 질문 중 하나는 "스위프트의 호환성 이야기는 무엇입니까?"였습니다. 이것은 훌륭한 첫 번째 주제처럼 보입니다.

앱 호환성 간단히 말해서, 오늘 Swift 앱을 작성하고 올 가을에 iOS 8 및 OS X Yosemite가 출시 될 때 앱 스토어에 제출하면 간단하게 앱이 미래에 잘 작동 할 것이라고 믿을 수 있습니다. 실제로 동일한 앱으로 OS X Mavericks 또는 iOS 7을 다시 타겟팅 할 수 있습니다. 이는 Xcode가 앱 번들 내에 작은 Swift 런타임 라이브러리를 포함하기 때문에 가능합니다. 라이브러리가 내장되어 있기 때문에 앱은 과거, 현재 및 미래 OS 릴리스에서 실행되는 일관된 Swift 버전을 사용합니다.


빠른 업데이트, 2015 년 2 월 15 일 부터 iOS 8 이전에 SDK를 사용하여 개발 된 앱을 스토어에 제출할 수 없습니다. 이를 염두에두면 많은 사람들이 Swift에서 만든 앱을 OS X 10.9 및 iOS 7.0 에도 배포 할 수 있다는 점에서이 문제에 대해 걱정하지 않는 것이 좋습니다.


사실, Apple은 Swift 앱이 iOS 7 및 OS X Mavericks와 역 호환 될 것이라고 발표했습니다. 또한 WWDC 앱은 Swift 프로그래밍 언어로 작성됩니다.


신속한 애플리케이션은 Beta 4 릴리스 노트에 명시된대로 iOS 7 이상 에서 지원됩니다. iOS 6.0, 6.1, 7.0, 7.1, 8.0 (Xcode 6 베타)

신속한 응용 프로그램은 OS X 10.9 이상의 플랫폼에서 지원됩니다. OS X 10.4 - 10.10 (배포 대상에서) 필자는 10.5에서 10.10 사이의 대상을 테스트하고 10.9.3에서 실행했습니다.


이것은 Apple Swift 블로그에서 읽은 게시물입니다. 도움이 될 수 있습니다.

앱 호환성 :

Swift 앱을 작성하면 앱이 미래에 잘 작동 할 것이라고 믿을 수 있습니다. 실제로 동일한 앱으로 OS X Mavericks 또는 iOS 7 을 다시 타겟팅 할 수 있습니다. 이는 Xcode가 앱 번들 내에 작은 Swift 런타임 라이브러리를 포함하기 때문에 가능합니다. 라이브러리가 내장되어 있기 때문에 앱은 과거, 현재 및 미래 OS 릴리스에서 실행되는 일관된 Swift 버전을 사용합니다.

이진 호환성 및 프레임 워크 :

앱의 런타임 호환성이 보장되는 동안 Swift 언어 자체는 계속 진화 할 것이고 바이너리 인터페이스도 바뀔 것입니다. 안전을 위해 앱의 모든 구성 요소는 동일한 버전의 Xcode와 Swift 컴파일러를 사용하여 함께 작동해야합니다.

즉, 프레임 워크를 신중하게 관리해야합니다. 예를 들어, 프로젝트에서 프레임 워크를 사용하여 코드를 내포 된 확장과 공유하는 경우 프레임 워크, 응용 프로그램 및 확장을 함께 구성해야합니다. Swift를 사용하는 바이너리 프레임 워크, 특히 제 3자를 사용하는 것은 위험합니다. Swift가 변경되면 해당 프레임 워크는 나머지 앱과 호환되지 않습니다. 이진 인터페이스가 1, 2 년 후에 안정화되면 스위프트 런타임이 호스트 OS의 일부가되며이 제한은 더 이상 존재하지 않습니다.





swift