Swift 기반 애플리케이션은 OS X 10.9/iOS 7 이하에서 작동합니까?
Swift 기반 애플리케이션은 OS X 10.9(Mavericks)/iOS 7 이하에서 작동합니까?
예를 들어 OS X 10.8(Mountain Lion)을 실행하고 있는 머신이 있는데, Swift로 작성한 어플리케이션이 이 머신에서 동작하는지 궁금합니다.
또는 Mac OS를 사용하여 Swift 응용 프로그램을 만들려면 어떻게 해야 합니까?
방금 테스트했습니다.Swift 어플리케이션은 표준 바이너리로 컴파일되어 OS X 10.9 및 iOS 7에서 실행할 수 있습니다.
테스트에 사용되는 Simple 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
}
OS X 10.9 및 iOS 7.0에 Swift 코드를 도입할 수 있습니다.통상, 구버전의 OS에서는 기동시에 크래쉬 합니다.
애플은 스위프트 앱이 iOS 7과 OS X 매버릭스와 하위 호환될 것이라고 발표했다.WWDC 앱은 Swift로 되어 있습니다.
업데이트 - Xcode 6 베타 4에 준거
iOS 7 및 OS X 10.9의 최소 도입 목표
Swift 컴파일러와 Xcode는 iOS 7 또는 OS X Mavericks의 최소 배포 목표를 적용합니다.이전 배포 대상을 설정하면 빌드 오류가 발생합니다.
따라서 이전 답변(아래 참조)은 향후 개발에는 적용되지 않습니다.Swift는 iOS6 이하에서는 사용할 수 없습니다.
Swift 애플리케이션은 iOS 6에서 실행할 수 있습니다.많은 사람들이 Swift가 iOS 7+와 OS X 10.9+만을 지원할 것이라고 말하지만, 제 경험으로는 그렇지 않습니다.
iOS6 디바이스에서 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.swift
★★★★★★★★★★★★★★★★★」ViewController.swift
.
따라서 iOS 8 SDK의 일부로 추가된 새로운 API나 일부 Swift 고유의 API(Objective-C에서는 대응하는 API를 사용할 수 없음)를 사용하지 않는 경우, 어플리케이션은 iOS 6 이후(테스트 완료 후 동작)에서 심리스하게 동작합니다.iOS 5에서도 동작합니다.Swift의 API 대부분은 기존 Objective-C API를 대체하는 것입니다.사실 그들은 2진법으로 같다.
참고: Xcode 6 베타 4에 따라 신속한 앱 배포 대상은 iOS 7 또는 OS X 10.9여야 합니다(위 업데이트 참조).따라서 iOS6 이하에서는 Swift를 사용할 수 없습니다.
요약:
Swift 기반 애플리케이션은 동일한 앱으로 OS X Mavericks 또는 iOS 7을 다시 대상으로 할 수 있습니다.
그게 어떻게 가능해?
Xcode는 앱 번들에 작은 Swift 런타임 라이브러리를 포함합니다.라이브러리가 내장되어 있기 때문에 앱은 이전, 현재 및 미래의 OS 릴리스에서 실행되는 일관된 버전의 Swift를 사용합니다.
내가 왜 이 대답을 믿어야 하지?
왜냐하면 어떤 사과남자가 트위터에서 알려준 답이나 hello world를 써서 테스트한 답처럼 말하는 것이 아니기 때문이다.
사과 개발자 블로그에서 가져왔어요.
믿으셔도 됩니다.
Swift는 Objective-C와 동일한 런타임을 사용하며 동일한 애플리케이션(WDC 2014 키노트)에서 나란히 Objective-C를 사용할 수도 있습니다.
최종 답변을 찾으려면 Xcode 6과 새로운 SDK를 사용하여 확인/검증해야 합니다.
나는 다음과 같은 모든 답을 읽었다.아니요, Swift는 iOS 7보다 낮은 버전에서는 작동하지 않습니다.하지만 저는 방금 Xcode 5에서 6.0 배포 대상으로 실행되는 Swift 프로젝트를 만들었습니다.
- Swift 프로그래밍 언어를 선택하여 Xcode 6 BETA에서 데모 프로젝트를 만듭니다.
- Xcode 6 베타 버전을 닫고 이 데모 프로젝트를 Xcode 5에서 전개 대상 6.0으로 엽니다.
- 시뮬레이터 6.1도 선택합니다.
그러면 그 프로젝트는 시뮬레이터 6.1에서 잘 실행됩니다.MacOS X는 10.9.3이므로 iOS 7보다 낮은 10.9.3 Mac OS X로 동작한다고 대답했습니다.
다음은 시뮬레이터의 스크린샷입니다.
애플은 WWDC 2014의 테크니컬 키노트(State of the Platforms, Session 102, 약 34분 00초)에서 Swift가 iOS 7과 Mavericks에 호환된다고 밝혔다.
Beta 4 릴리즈 노트에 기재된 바와 같이 iOS 7 이상에서는 Swift 애플리케이션이 지원됩니다.
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에서 실행하는 것을 테스트했습니다.
Swift 어플리케이션은 OS X 10.7에서는 실행되지 않는 것 같습니다.Mavericks에서 정상적으로 동작하는 간단한 GUI 어플리케이션(뷰, 라벨, 버튼)을 만들었습니다.기본 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
...
그러나 이 VM에는 분명히 CoreGraphics 라이브러리가 있기 때문에 이 메시지는 매우 거슬립니다.CoreGraphics를 많이 사용하는 다른 어플리케이션도 정상적으로 동작합니다.
Apple Swift 블로그에서 읽은 글입니다.
앱 호환성:
만약 당신이 Swift 앱을 만든다면, 당신은 당신의 앱이 미래에 잘 작동할 것이라고 믿을 수 있습니다.실제로 동일한 앱으로 OS X Mavericks 또는 iOS 7을 다시 타겟으로 할 수 있습니다.이는 Xcode가 앱 번들에 작은 Swift 런타임 라이브러리를 포함하기 때문에 가능합니다.라이브러리가 내장되어 있기 때문에 앱은 이전, 현재 및 미래의 OS 릴리스에서 실행되는 일관된 버전의 Swift를 사용합니다.
바이너리 호환성 및 프레임워크:
앱의 런타임 호환성이 보장되는 동안 Swift 언어 자체는 계속 발전하고 바이너리 인터페이스도 변경됩니다.안전을 위해 앱의 모든 컴포넌트는 동일한 버전의 Xcode와 Swift 컴파일러로 구축하여 함께 작동하도록 해야 합니다.
즉, 프레임워크는 신중하게 관리해야 합니다.예를 들어 프로젝트에서 프레임워크를 사용하여 내장된 확장자와 코드를 공유하는 경우 프레임워크, 앱 및 확장을 함께 구축해야 합니다.특히 서드파티의 Swift를 사용하는 바이너리 프레임워크에 의존하는 것은 위험할 수 있습니다.Swift가 변경됨에 따라 이러한 프레임워크는 앱의 나머지 부분과 호환되지 않습니다.1~2년 후 바이너리 인터페이스가 안정되면 Swift 런타임은 호스트 OS의 일부가 되고 이 제한은 사라집니다.
iPod Touch(3세대) 기기에서 베어본 기반의 Swift 앱을 실행해 보았습니다.Swift 기반 앱은 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에서는 앱이 이러한 오류 메시지를 표시하지 않고 정상적으로 실행됩니다.
여기 오래된 답변들이 많은 것 같아서 스위프트 팀의 공식 답변을 올리고 싶었어요.Swift는 OS X Mavericks 및 iOS 7과 하위 호환됩니다.
Apple developer swift blog : Objective-C id as Swift Any
2014년 7월 11일
호환성.
WWDC에서 가장 많이 들었던 질문 중 하나는 "Swift의 호환성 스토리는 무엇입니까?"였습니다.이것은 좋은 첫 번째 주제인 것 같다.
앱 호환성 간단히 말해, 오늘 Swift 앱을 작성하여 iOS 8과 OS X Yosemite가 출시되는 올 가을 앱스토어에 제출하면, 당신의 앱이 미래에 잘 작동할 것이라고 믿을 수 있습니다.실제로 동일한 앱으로 OS X Mavericks 또는 iOS 7을 다시 타겟으로 할 수 있습니다.이는 Xcode가 앱 번들에 작은 Swift 런타임 라이브러리를 포함하기 때문에 가능합니다.라이브러리가 내장되어 있기 때문에 앱은 이전, 현재 및 미래의 OS 릴리스에서 실행되는 일관된 버전의 Swift를 사용합니다.
10.8(버튼 하나로 라벨에 텍스트 설정)에서도 매우 심플한 앱을 사용해 보았습니다.Greg Parker가 말한 것처럼, 그것은 스타트 업시에 크래쉬 했다.
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을 사용하고 있었습니다)
다음 코드를 사용해 보십시오.
StoryBoard 없이도 작동합니다.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
self.window!.backgroundColor = UIColor.whiteColor()
// Create a nav/vc pair using the custom ViewController class
let nav = UINavigationController()
let vc = ViewController(nibName: "ViewController", bundle: nil)
// Push the vc onto the nav
nav.pushViewController(vc, animated: false)
// Set the window’s root view controller
self.window!.rootViewController = nav
// Present the window
self.window!.makeKeyAndVisible()
return true
}
네, 사실 애플은 Swift 앱이 iOS 7과 OS X Mavericks와 하위 호환될 것이라고 발표했습니다.또한 WWDC 앱은 Swift 프로그래밍 언어로 작성됩니다.
Swift Frameworks에 관한 한.현재 Xcode 버전 6.1.1(6A2008a)에서 Swift 프레임워크가 iOS 7.1을 대상으로 하는 경우 링커리포트 경고
ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.
앱스토어에 신청하실 수 없습니다.이 문제 확인: iOS 7에서 동적 라이브러리와 프레임워크가 통과하지 않도록 하는 보풀
2015년 2월 15일부터는 iOS 8 이전에 SDK를 사용하여 개발한 앱을 스토어에 제출할 수 없기 때문에 Swift에서 만든 앱을 OS X 10.9나 iOS 7.0에도 도입할 수 있다는 의견이 많으므로 이 문제에 대해 걱정하지 않는 것이 좋습니다.
레안드로스가 올린 암호 스니펫은 좀 오래된 것 같다.Swift 5로 수정하여 컴파일 했습니다.
스위프트 5
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
self.window = UIWindow(frame: UIScreen.main.bounds)
let controller = UIViewController()
let view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 568))
view.backgroundColor = UIColor.red
controller.view = view
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21))
label.center = CGPoint(x: 160, y: 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
}
언급URL : https://stackoverflow.com/questions/24001778/do-swift-based-applications-work-on-os-x-10-9-ios-7-and-lower
'programing' 카테고리의 다른 글
모든 WPF 파일의 xmlns란 무엇입니까? (0) | 2023.04.20 |
---|---|
용기 바닥에 div를 배치하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
bash를 사용하여 파일(인수)을 "in place"로 편집하는 명령을 실행하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
Qt 5.1.1: 플랫폼 플러그인 "windows"가 없어 응용 프로그램을 시작하지 못했습니다. (0) | 2023.04.20 |
TPM(Trusted Platform Module)을 사용하여 바이트를 암호화하는 방법 (0) | 2023.04.20 |