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

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

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

Ответ 1

Я просто тестировал его для вас, приложения 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
}

Ответ 2

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

Ответ 3

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

Ответ 4

Обновление - согласно 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 и ниже


Ответ 5

Вкратце:

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

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

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

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

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

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

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

Ответ 6

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

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

Ответ 7

Я прочитал все ответы: "Нет, Swift не работает с менее чем iOS 7. Но я сказал ДА, я только что создал проект 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

Здесь также демо

Ответ 8

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

Ответ 9

Приложения 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

Ответ 10

Появляются приложения 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 с тем же приложением. Это возможно, потому что Xcode встраивает небольшую библиотеку Quicktime runtime в ваш комплект приложений. Поскольку библиотека встроена, ваше приложение использует согласованную версию Swift, которая запускается в прошлых, настоящих и будущих выпусках ОС.

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

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

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

Ответ 12

Я протестировал приложение с голой костью, 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 приложение работает нормально, не отображая эти сообщения об ошибках.

Ответ 13

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

Блог разработчика Apple Swift: идентификатор Objective-C - Swift Any

11 июля 2014 г.

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

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

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

Ответ 14

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

Ответ 15

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

Работает без 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
}

Ответ 16

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

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

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

Ответ 17

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

Ответ 18

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

Ответ 19

Ответный фрагмент кода, размещенный Леандросом, кажется старым. Я исправил и сделал его компилируемым в Swift 5.

Swift 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
}