Приложения на основе Swift работают на OS X 10.9 (Mavericks)/iOS 7 и ниже?
Например, у меня есть машина с OS X 10.8 (Mountain Lion), и мне интересно, будет ли приложение, которое я пишу в 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
}
Код Swift можно развернуть в OS X 10.9 и iOS 7.0. Обычно он сбой при запуске в более старых версиях ОС.
Apple объявила, что приложения Swift будут обратно совместимы с iOS 7 и OS X Mavericks. Приложение WWDC написано в Swift.
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 и ниже
Приложения на основе Swift могут вернуться к OS X Mavericks или iOS 7 с тем же приложением.
Xcode встраивает небольшую библиотеку Quicktime Quicktime в пакет приложений. Поскольку библиотека встроена, ваше приложение использует согласованную версию Swift, которая запускается в прошлых, настоящих и будущих выпусках ОС.
Потому что я не говорю об этом ответе, поскольку один парень из яблока сказал мне в twitter, или я написал мир привет и протестировал его.
Я взял его из блога разработчиков Apple.
чтобы вы могли доверять этому.
Swift использует ту же самую рабочую среду, что и Objective-C, и может даже жить бок о бок Objective-C в одном приложении (в соответствии с в лейбле WWDC 2014).
Это нужно будет проверить/проверить с помощью Xcode 6 и нового SDK, чтобы найти окончательный ответ.
Я прочитал все ответы, которые сказали: Нет, Swift не работает с iOS 7. Но я сказал ДА, я просто создал проект Swift, который запускается в Xcode 5 с целевым показателем 6.0.
Тогда этот проект хорошо работает в симуляторе 6.1. Мой Mac OS X равен 10.9.3, поэтому я сказал да, который работает ниже iOS 7. с 10.9.3 Mac OS X.
Вот скриншот симулятора:
Вот демонстрационная версия: http://www.filedropper.com/demo_5
В то время как код подтверждает это, Apple сама заявила, что Swift будет совместим с iOS 7 и Mavericks в своем техническом ключевом слове (состояние платформ, сеанс 102, вокруг отметки 34 мин. 00 sec) в WWDC 2014.
Приложения Swift поддерживаются на iOS 7 и выше, как указано в примечаниях к выпуску Beta 4. iOS 6.0, 6.1, 7.0, 7.1, 8.0 в Xcode 6 Betastrike >
Приложения Swift поддерживаются на платформах OS X 10.9 и выше. OS X 10.4 - 10.10 в цели развертывания. Я тестировал на таргетинге 10.5 на 10.10 и работал на 10.9.3
Это сообщение, которое я прочитал из блога блога Swift, может быть полезно:
Если вы пишете приложение Swift, вы можете доверять тому, что ваше приложение будет работать в будущем. Фактически, вы можете вернуться к OS X Mavericks или iOS 7 с тем же приложением. Это возможно, потому что Xcode встраивает небольшую библиотеку Quicktime runtime в ваш комплект приложений. Поскольку библиотека встроена, ваше приложение использует согласованную версию Swift, которая запускается в прошлых, настоящих и будущих выпусках ОС.
Пока обеспечивается совместимость с временем выполнения приложения, сам язык Swift будет продолжать развиваться, а бинарный интерфейс также изменится. Чтобы быть в безопасности, все компоненты вашего приложения должны быть построены с той же версией Xcode и компилятора Swift, чтобы обеспечить их совместную работу.
Это означает, что необходимо тщательно управлять каркасами. Например, если ваш проект использует фреймворки для совместного использования кода со встроенным расширением, вам нужно будет объединить структуры, приложения и расширения. Было бы опасно полагаться на двоичные структуры, которые используют Swift - особенно от третьих сторон. По мере изменения Swift эти рамки будут несовместимы с остальной частью вашего приложения. Когда бинарный интерфейс стабилизируется через год или два, среда выполнения Swift станет частью ОС хоста, и это ограничение больше не будет существовать.
Появляются приложения 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, работают нормально.
Кажется, здесь много старых ответов, поэтому я просто хотел опубликовать официальный ответ команды 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, которая запускается в прошлых, настоящих и будущих выпусках ОС.
Я протестировал приложение с голой костью, 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.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)
Попробуйте использовать следующий код:
Работает без 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 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
Mach-O Type
Swift Framework должен быть Dynamic Library
, однако iOS 7 принимает только Static Library
.
Быстрое обновление, начиная с 15 февраля 2015 г., мы не можем отправлять приложения в магазин, которые были разработаны с использованием SDK до iOS 8. Поэтому, помня об этом, лучше не беспокоиться об этой проблеме, так как многие люди предположили, что приложения, созданные в Swift, можно развернуть до OS X 10.9 и iOS 7.0.
Да, на самом деле Apple объявила, что приложения Swift будут обратно совместимы с iOS 7 и OS X Mavericks. Кроме того, приложение WWDC написано на языке программирования Swift.