Работают ли приложения на основе Swift на OS X 10.9 / iOS 7 и ниже?

будут ли приложения на основе Swift работать на OS X 10.9 (Mavericks) / iOS 7 и ниже?

например, у меня работает машина OS X 10.8 (Mountain Lion), и мне интересно, будет ли приложение, которое я пишу в Swift, работать на нем.

18 ответов


Я только что протестировал его для вас, Swift приложения компилируются в стандартные двоичные файлы и могут быть запущены на 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 10.9 и iOS 7.0. Обычно он будет сбой при запуске на более старых версиях ОС.


Apple объявила, что приложения Swift будут обратно совместимы с iOS 7 и OS X Mavericks. Приложение WWDC написано в Swift.


обновление-согласно Xcode 6 Beta 4

iOS 7 и OS X 10.9 минимальная цель развертывания

компилятор Swift и Xcode теперь применяют минимальную цель развертывания iOS 7 или OS X Скитальцы. Установка более ранней цели развертывания приводит к сбою сборки.

из Xcode 6 примечание к выпуску

поэтому мой предыдущий ответ (показанный ниже) не будет применим к любому дальнейшему развитию. Быстрый больше не будет доступен для iOS6 и ниже


приложение Swift можно запустить на iOS 6. Хотя многие говорят, что Swift будет поддерживать только iOS 7+ и OS X 10.9+, по моему опыту это не так.

я протестировал простое приложение, полностью написанное в Swift на устройстве iOS 6. Он отлично работает. Как говорит 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.swift и ViewController.swift.

поэтому, если вы не используете какие-либо новые API, добавленные как часть SDK iOS 8 или некоторые конкретные API Swift (соответствующий API недоступен для Objective-C), ваше приложение будет легко работать на iOS 6 или более поздней версии (протестировано и работает), даже на iOS 5 (не проверенный.) Большинство API в Swift-это просто замена существующих API Objective-C. На самом деле они одинаковы в двоичном коде.

примечание: согласно Xcode 6 beta 4 для Swift apps цель развертывания должна быть iOS 7 или OS X 10.9(см. выше обновление). Поэтому swift больше не будет доступен для iOS6 и ниже



вкратце:

приложения на основе Swift могут вернуться к OS X Mavericks или iOS 7 С тем же приложением.

Как это возможно ?

Xcode встраивает небольшая библиотека времени выполнения Swift в комплекте вашего приложения. Поскольку библиотека встроена, приложение использует согласованную версию Swift, которая выполняется в прошлых, настоящих и будущих выпусках ОС.

Почему я должен доверять этому ответу ?

потому что я не говорю этот ответ, как один парень apple сказал мне в twitter или я написал hello world и протестировал его.

Я взял его из блог разработчика apple.

Так что вы можете доверять этому.


Swift использует ту же среду выполнения, что и С и может даже жить бок о бок цель-C в том же приложении (согласно WWDC 2014 keynote).

Это нужно будет проверить / проверить с помощью в Xcode 6 и новый SDK, чтобы найти окончательный ответ.


Я прочитал все ответы, которые сказали: Нет, Swift не работает с менее чем iOS 7. Но я сказал ... --1-->да, Я только что создал проект Swift, который работает в Xcode 5 с целью развертывания 6.0.

  • Я просто создаю демо-проект в Xcode 6 BETA с выбранным языком программирования Swift.
  • закройте бета-версию Xcode 6, и я открою этот демо-проект в Xcode 5 с целью развертывания 6.0
  • и выберите симулятор 6.1.

тогда этот проект хорошо работает в симулятор 6.1. Мой MacOS X - 10.9.3, поэтому я сказал Да, что работает ниже, чем iOS 7. с 10.9.3 Mac OS X.

вот скриншот симулятора:

Enter image description here

вот демо, а также


в то время как код подтверждает это, Apple сама сказала, что Swift будет совместим с iOS 7 и Mavericks в своем техническом keynote (состояние платформы, сессия 102, около отметки 34 мин 00 сек) в WWDC 2014.


Swift приложения поддерживаются на iOS 7 и выше как указано в примечаниях к выпуску Beta 4. iOS 6.0, 6.1, 7.0, 7.1, 8.0 в Xcode 6 Beta

Swift приложения поддерживаются на платформах в OS X 10.9 и выше. OS X 10.4 до 10.10 в цели развертывания. Я протестировал таргетинг 10.5 на 10.10 и запуск на 10.9.3


появляется Swift applications не run on OS X 10.7. Я только что создал простое приложение GUI (представление, ярлык, кнопка), которое отлично работает на Mavericks. Базовый 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 библиотека в этом VM. Другие приложения, которые делают интенсивное использование CoreGraphics работать нормально.


это сообщение, которое я прочитал из блога apple Swift, может быть полезно:

Совместимость Приложения:

Если вы пишете приложение Swift, вы можете доверять, что ваше приложение будет хорошо работать в будущем. Фактически, вы можете вернуться к OS X Mavericks или iOS 7 С тем же приложением. Это возможно, потому что Xcode встраивает небольшую библиотеку времени выполнения Swift в пакет вашего приложения. Поскольку библиотека внедрена, приложение использует согласованный версия Swift, которая работает на прошлых, настоящих и будущих выпусках ОС.

бинарная совместимость и фреймворки:

в то время как совместимость во время выполнения вашего приложения обеспечивается, сам язык Swift будет продолжать развиваться, и двоичный интерфейс также изменится. Чтобы быть в безопасности, все компоненты вашего приложения должны быть построены с той же версией Xcode и компилятором Swift, чтобы обеспечить их совместную работу.

Это означает, что фреймворками необходимо управлять внимательно. Например, если ваш проект использует фреймворки для совместного использования кода со встроенным расширением, вы захотите создать фреймворки, приложение и расширения вместе. Было бы опасно полагаться на бинарные фреймворки, которые используют Swift - особенно от третьих сторон. Как быстрые изменения, эти рамки будут несовместимы с остальной частью вашего приложения. Когда двоичный интерфейс стабилизируется через год или два, среда выполнения Swift станет частью ОС хоста, и это ограничение больше не будет существовать.


я протестировал запуск приложения с голой костью на основе Swift на устройстве iPod Touch (3-го поколения). Он появляется на основе Swift приложений не работа с iOS 5.x но do работа с 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. Swift обратно совместим с OS X Mavericks и iOS 7

Apple разработчик swift блог: Objective-C id как Swift любой

11 июля

совместимость

один из самых распространенных вопросов, которые мы слышали на WWDC, был: "какова история совместимости для Swift?". Это кажется первый тема.

Совместимость Приложения Проще говоря, если вы напишете приложение Swift сегодня и отправите его в App Store этой осенью, когда будут выпущены iOS 8 и OS X Yosemite, вы можете доверять, что ваше приложение будет хорошо работать в будущем. фактически, вы можете вернуться к OS X Mavericks или iOS 7 с тем же приложением. это возможно, потому что Xcode встраивает небольшую библиотеку времени выполнения Swift в пакет вашего приложения. Поскольку библиотека внедрена, приложение использует согласованную версию Swift, которая работает на прошлых, настоящих и будущих выпусках ОС.


Я также попробовал очень простое приложение на 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)


попробуйте следующий код:

работает без раскадровки:

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
}

да, на самом деле Apple объявила, что приложения Swift будут обратно совместимы с iOS 7 и OS X Mavericks. Кроме того, приложение WWDC написано на языке программирования Swift.


когда дело доходит до фреймворков Swift. На сегодняшний день, с Xcode версии 6.1.1 (6A2008a), если платформа Swift ориентирована на iOS 7.1, linker report warning

ld: warning: embedded dylibs/frameworks only run on iOS 8 or later.

и приложение не может быть отправлено в AppStore. Проверьте этот вопрос:Lint для предотвращения передачи динамических библиотек и фреймворков с iOS 7


быстрое обновление, начиная с 15 февраля, 2015, мы не можем отправлять приложения в магазин, которые были разработаны с помощью SDK до iOS 8. Поэтому, имея это в виду, лучше не беспокоиться об этой проблеме, поскольку многие люди предположили, что приложения, сделанные в Swift, могут быть развернуты в OS X 10.9 и iOS 7.0 Как хорошо.