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

573

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

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

  • 50
    Если предположить, что Swift скомпилирован в «нормальный» исполняемый файл и что в ОС нет специальной библиотеки времени выполнения Swift, то да, она должна работать на старых системах. Мы просто еще не знаем. Загрузите Xcode 6 и попробуйте.
  • 12
    Официальный ответ будет найден в видео о состоянии Союза.
Показать ещё 6 комментариев
Теги:
osx

18 ответов

498
Лучший ответ

Я просто тестировал его для вас, приложения 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
}
  • 13
    См. Stackoverflow.com/questions/24007050/… - это противоречит этому ответу (по крайней мере, «или даже более низкая» часть).
  • 14
    Я только протестировал iOS 7.0 и OS X 10.9. Как сказано в ответе.
Показать ещё 7 комментариев
182

Код Swift можно развернуть в OS X 10.9 и iOS 7.0. Обычно он сбой при запуске в более старых версиях ОС.

  • 4
    Грег, спасибо, что пришли сюда, чтобы ответить на вопросы. Не могли бы вы немного рассказать о том, что изменилось 10.8-> 10.9 и 6.x-> 7.0, что позволяет запускать код, сгенерированный из Swift?
  • 20
    Swift устанавливает некоторые биты в метаданных Objective C для маркировки классов Swift. libobjc в OS X 10.9 и iOS 7.0 был изменен, чтобы игнорировать эти биты при подготовке к прибытию Swift. Старые версии ОС будут смущены этими битами.
Показать ещё 3 комментария
105

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

  • 11
    Неужели WWDC написан на Swift?
  • 7
    Да, приложение WWDCC написано на языке Swift. Как они сказали вчера.
Показать ещё 6 комментариев
98

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

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

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

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

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


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

Я протестировал простое приложение, написанное полностью в Swift на устройстве iOS & nbs 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 для быстрого развертывания приложений целью должно быть iOS 7 или OS X 10.9 (см. вышеупомянутое обновление). Таким образом, swift больше не будет доступен для iOS6 и ниже


  • 0
    Так же, как и в предыдущих обновлениях системы, некоторые платформы / классы более не поддерживаются и должны быть условно поддержаны.
  • 0
    @TienDo Нет необходимости ставить точки с запятой :) Даже если вы ошиблись (это традиция), это не будет проблемой
Показать ещё 1 комментарий
31

Вкратце:

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

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

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

Зачем мне доверять этот ответ?

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

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

чтобы вы могли доверять этому.

  • 2
    «маленький» занимает ~ 20 мб или что-то. :)
  • 1
    Включение всей среды выполнения в двоичный файл может показаться немного раздутым, но поскольку Swift все еще не является полностью стабильным, для них имеет смысл позволить разработчикам перекомпилировать новую версию Swift в свое время, вместо того, чтобы обновлять какую-либо общую библиотеку и ломая все приложения. Как только Swift стабилизируется, я предполагаю, что среда выполнения будет храниться вместе со всем остальным, где-то в dylib.
Показать ещё 1 комментарий
29

Swift использует ту же самую рабочую среду, что и Objective-C, и может даже жить бок о бок Objective-C в одном приложении (в соответствии с в лейбле WWDC 2014).

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

  • 1
    Похоже, что использование Xcode Beta 6 позволит вам запускать быстрые приложения на 10.9.3, но я не уверен, насколько далеко назад будет работать быстрое приложение, кроме 10.7 или 10.8?
21

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

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

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

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

Изображение 1582

Вот демонстрационная версия: http://www.filedropper.com/demo_5

  • 3
    Вопрос: Без быстрой поддержки, как XCode-5 создает быстрый источник?
  • 0
    этот пример кода выше встроен в xcode5
Показать ещё 5 комментариев
19

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

14

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

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

  • 1
    Я думаю, что различные цели развертывания пока не верны (XCode 6 - это бета-версия). То, что вы можете выбрать значение, не означает, что оно работает. Я попытался с OSX 10.7 в качестве цели, и это не сработало. Также отметим, что Грег Паркер (Greg Parker) дал вышеупомянутое подтверждение о платформах.
  • 0
    @ Майк Лишке, опять же, у меня было несколько тестов, чтобы подтвердить свои аргументы. И я могу запустить приложение OS X, когда я выбираю цель развертывания 10.7. Но я ценю, что вы подняли тему поддержки приложений OS X.
Показать ещё 4 комментария
13

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

Совместимость приложений:

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

Бинарная совместимость и рамки:

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

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

13

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

11

Кажется, здесь много старых ответов, поэтому я просто хотел опубликовать официальный ответ команды Swift. Swift обратно совместим с OS X Mavericks и iOS 7

https://developer.apple.com/swift/blog/

11 июля 2014 года

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

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

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

11

Я протестировал приложение с голой костью, Swift на устройстве iPod Touch (3rd gen). Появляются приложения на основе 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 приложение работает нормально, не отображая эти сообщения об ошибках.

10

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

9

Попробуйте использовать следующий код:

Работает без 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
}
  • 0
    А как использовать nav.rootviewcontroller ??
7

Когда дело доходит до Swift Framework. Что касается сегодняшнего дня, с Xcode версии 6.1.1 (6A2008a), если структура Swift предназначена для iOS 7.1, предупреждение о сообщении компоновщика

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

и приложение не может быть отправлено в AppStore. Проверьте этот вопрос https://github.com/CocoaPods/CocoaPods/issues/3193

  • 0
    Mach-O Type Swift Framework должен быть Dynamic Library , однако iOS 7 принимает только Static Library .
6

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

  • 0
    Не могли бы вы предоставить нам источник?
  • 1
    Существует разница между Base SDK и Deployment Target. Вы можете иметь базовый SDK для iOS 9 и цель развертывания для iOS 7 и отправить их в iTunes Connect. Downvoting, потому что вы не предоставили источник.
Показать ещё 1 комментарий
6

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

Сообщество Overcoder
Наверх
Меню