Os aplicativos baseados no Swift funcionam no OS X 10.9 / iOS 7 e inferior?

616

Os aplicativos baseados no Swift funcionam no OS X 10.9 (Mavericks) / iOS 7 e inferior?

Por exemplo, eu tenho uma máquina executando o OS X 10.8 (Mountain Lion) e estou pensando se um aplicativo que eu escrevo no Swift será executado nele.

Ou o que eu deveria ter para criar um aplicativo Swift usando o Mac OS?

MeIr
fonte
51
Supondo que o Swift seja compilado em um executável "normal" e assumindo que não haja uma biblioteca de tempo de execução específica do Swift necessária no sistema operacional, então sim, ele deve ser executado em sistemas mais antigos. Ainda não sabemos ainda. Faça o download do Xcode 6 e experimente.
rmaddy
12
Uma resposta oficial será encontrada no vídeo do Estado da União.
Steven Fisher
3
@rmaddy FWIW: na WWDC, na apresentação do Swift, ficou mais claro que Swift e Objective-C têm o mesmo tempo de execução.
11684
1
É de conhecimento público e foi mencionado na palestra que é executada nesses sistemas operacionais.
Rhummelmose
3
Essa pergunta é a que é usada como exemplo na página do passeio .
Donald Duck

Respostas:

520

Acabei de testar para você, os aplicativos Swift são compilados em binários padrão e podem ser executados no OS X 10.9 e no iOS 7.


Aplicativo Swift simples usado para teste:

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
}
Leandros
fonte
13
Consulte stackoverflow.com/questions/24007050/… - está em conflito com esta resposta (pelo menos a parte "ou até mais baixa").
rmaddy
14
Testei apenas o iOS 7.0 e o OS X 10.9. Como dito na resposta.
Leandros
@Leandros Usando a palavra-chave var, por que precisamos digitar UIViewController duas vezes nesta linha "var controller: UIViewController = UIViewController ()"? Var não é igual ao JavaScript / C # (se não, então é tão triste)? É essa transmissão, mas os tipos de objetos são iguais nos dois lados do sinal de igual?
Tien Do
3
@TienDo Eu não tenho nenhuma experiência Swift, mas suponho que a primeira UIViewControllerapós os dois pontos represente o tipo da variável e a segunda ocorrência após o =sinal chamar o construtor (inicialize a variável).
ComFreek
2
Para iOS: no Xcode 6 beta, existem destinos de implantação até o iOS 6. Testei todos eles, trabalhei na localização. Existem algumas respostas que indicam o mesmo.
ySiggen
197

O código Swift pode ser implantado no OS X 10.9 e no iOS 7.0. Geralmente, ele falha na inicialização em versões mais antigas do sistema operacional.

Greg Parker
fonte
4
Greg, obrigado por vir aqui para responder a perguntas. Você pode dizer um pouco sobre o que mudou 10.8-> 10.9 e 6.x-> 7.0 que permite que o código gerado pelo Swift seja executado?
Ivan Vučica
20
Swift define alguns bits nos metadados Objective-C para marcar as classes Swift. libobjc no OS X 10.9 e iOS 7.0 foi alterado para ignorar esses bits em preparação para a chegada de Swift. As versões mais antigas do sistema operacional ficarão confusas com esses bits.
Greg Parker
9
Eu apreciaria muito se a Apple considerasse fazer os aplicativos Swift funcionarem também em plataformas mais antigas (pelo menos a partir do OSX 10.7). A razão é que ainda temos muitos clientes com este sistema operacional, portanto, não podemos começar a desenvolver o Swift por anos se 10.9 for o sistema operacional mínimo suportado!
Mike Lischke
2
@GregParker Alguma chance de você atualizar esta resposta para o Swift 2, independentemente de os requisitos de tempo de execução terem sido alterados ou não?
Andrey Tarantsov
1
Os destinos mínimos de implantação suportados para executáveis ​​construídos pelo Swift permanecem no iOS 7.0 e OSX 10.9. As APIs descontinuadas no iOS 7 / OSX 10.9 ou anterior não estarão disponíveis. Ao criar, o Swift suporta apenas o SDK fornecido no Xcode.
Flash Sheridan
103

A Apple anunciou que os aplicativos Swift serão compatíveis com o iOS 7 e OS X Mavericks. O aplicativo WWDC está escrito em Swift.

Ben Gottlieb
fonte
11
Realmente WWDC está escrito em Swift ??
Satheeshwaran
7
Sim, o aplicativo WWDCC está escrito em Swift. Como eles disseram ontem.
Shial
22
Jay Freeman afirma o contrário: twitter.com/saurik/status/473785847926374400
Ivan Vučica
2
A tática de marketing da Apple é comum, usada pelas empresas. O Windows foi escrito em Assembly! Bem, apenas o gerenciador de inicialização e algumas outras coisas, mas foi escrito em assembly.
Cole Johnson
4
@ IvanVučica, mas 4 classes são suficientes para responder à pergunta de compatibilidade.
ilya n.
100

Atualização - conforme Xcode 6 Beta 4

Destino de implantação mínimo do iOS 7 e OS X 10.9

O compilador Swift e o Xcode agora impõem um destino de implantação mínimo do iOS 7 ou OS X Mavericks. Definir um destino de implantação anterior resulta em uma falha de construção.

Da nota de versão do Xcode 6

Portanto, minha resposta anterior (mostrada abaixo) não será aplicável a nenhum desenvolvimento adicional. Swift não estará mais disponível para iOS6 e abaixo


Um aplicativo Swift pode ser executado no iOS 6. Mesmo que muitas pessoas digam que o Swift oferecerá suporte apenas ao iOS 7+ e OS X 10.9+, pela minha experiência, não é.

Testei um aplicativo simples escrito completamente em Swift em um dispositivo iOS 6. Funciona perfeitamente bem . Como a Apple diz, o código Swift é binário compatível com o código Objective-C. Ele usa o mesmo compilador e tempo de execução para criar o binário.

Aqui está o código que eu testei:

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")
    }
}

É uma aplicação simples, basta adicionar um botão programaticamente. Meu aplicativo contém apenas dois arquivos AppDelegate.swifte ViewController.swift.

Portanto, se você não estiver usando nenhuma API nova adicionada como parte do iOS 8 SDK ou algumas APIs específicas do Swift (a API correspondente não está disponível para o Objective-C), seu aplicativo funcionará perfeitamente no iOS 6 ou posterior (testado e funcionando), até no iOS 5 (não testado). A maioria das APIs no Swift é apenas a substituição das APIs Objective-C existentes. Na verdade, eles são os mesmos em binário.

Nota: De acordo com o Xcode 6 beta 4, o destino de implantação rápida de aplicativos deve ser o iOS 7 ou OS X 10.9 (consulte a atualização acima). Tão rápido não estará mais disponível para iOS6 e abaixo


Anil Varghese
fonte
Assim como nas atualizações anteriores do sistema, algumas estruturas / classes foram descontinuadas e precisam ser suportadas condicionalmente.
Miriam H.
@TienDo Não há necessidade de ponto e vírgula :) Mesmo se você colocar por engano (a sua tradição), que não será um problema
Anil Varghese
3
Mas você ainda pode usar ponto e vírgula se realmente quiser. duas instruções em uma linha são separadas por um ponto e vírgula
PaulWoodIII
33

Em resumo:

Aplicativos baseados em Swift podem ser direcionados ao OS X Mavericks ou iOS 7 com o mesmo aplicativo.

Como isso é possível ?

O Xcode incorpora uma pequena biblioteca de tempo de execução Swift no pacote do seu aplicativo . Como a biblioteca é incorporada, seu aplicativo usa uma versão consistente do Swift que é executada em versões passadas, presentes e futuras do SO.

Por que devo confiar nessa resposta?

Porque eu não estou dizendo esta resposta, como um cara da apple me disse no twitter ou eu escrevi o hello world e o testei.

Eu peguei no blog de desenvolvedores da apple .

para que você possa confiar nisso.

Durai Amuthan.H
fonte
2
"pequeno" leva ~ 20 mb ou algo assim. :)
BangOperator
1
Incluir todo o tempo de execução no binário pode parecer um pouco inchado, mas como o Swift ainda não é completamente estável, faz sentido permitir que os desenvolvedores recompilem com a nova versão do Swift em seu próprio tempo, em vez de atualizar algumas bibliotecas compartilhadas e quebrando os aplicativos de todos. Depois que o Swift se estabiliza, presumo que o tempo de execução será armazenado juntamente com todo o resto, em um dylib em algum lugar.
William T Froggard
@WilliamTFroggard - Yeah hope so
Durai Amuthan.H
30

O Swift usa o mesmo tempo de execução que o Objective-C e pode até viver lado a lado no Objective-C no mesmo aplicativo (conforme a palestra da WWDC 2014).

Isso precisará ser verificado / verificado usando o Xcode 6 e o ​​novo SDK para encontrar uma resposta final.

Chris Pietschmann
fonte
1
Parece que o uso do Xcode Beta 6 permitirá que você execute aplicativos rápidos no 10.9.3, mas não tenho certeza de quanto tempo um aplicativo rápido poderá executar, ex 10.7 ou 10.8?
John
22

Li todas as respostas que diziam: Não, o Swift não funciona com menos do iOS 7. Mas eu disse que sim , acabei de criar um projeto Swift que é executado no Xcode 5 com o objetivo de implantação 6.0.

  • Acabei de criar um projeto de demonstração no Xcode 6 BETA com a linguagem de programação Swift selecionada.
  • Feche o Xcode 6 beta e eu abro este projeto de demonstração no Xcode 5 com destino de implantação 6.0
  • E também selecione o simulador 6.1 .

Então esse projeto roda bem no simulador 6.1 . Meu MacOS X é 10.9.3 , então eu disse que sim, que roda abaixo do iOS 7. com o Mac OS X 10.9.3 .

Aqui está uma captura de tela do simulador:

Digite a descrição da imagem aqui

Aqui está uma demonstração também

Nitin Gohel
fonte
3
Pergunta: Sem suporte rápido, como o XCode-5 constrói a fonte rápida?
Subin Sebastian
você pode ver a simulatore imagem :) Eu não criei acima imagem em anexo no photoshop
Nitin Gohel
ou seja, converti um aplicativo c objetivo para agilizar e ter clientes presentes no iOS 6. Então, o aplicativo rápido funcionará?
Maneesh Sharma
Primeiro você tentar com demonstração de código se isso funciona, então sim que as obras definaty
Nitin Gohel
20

Embora o código o confirme, a própria Apple disse que o Swift será compatível no iOS 7 e Mavericks em sua palestra técnica ( estado das plataformas , sessão 102, em torno da marca de 34 min 00 seg) na WWDC 2014 .

virindh
fonte
15

Os aplicativos Swift são suportados no iOS 7 e superior, conforme indicado nas notas de versão da Beta 4. iOS 6.0, 6.1, 7.0, 7.1, 8.0 no Xcode 6 Beta

Os aplicativos Swift são suportados nas plataformas OS X 10.9 e superior . OS X 10.4 a 10.10 no Destino de Implantação. Eu testei na segmentação 10.5 a 10.10 e executando na 10.9.3

vladof81
fonte
1
Acho que os vários destinos de implantação ainda não estão corretos (o XCode 6 é uma versão beta). Só porque você pode selecionar o valor não significa que ele funcione. Eu tentei com o OSX 10.7 como alvo e não funcionou. Observe também que uma confirmação autorizada sobre plataformas foi dada acima por Greg Parker.
Mike Lischke
@ Mike Lischke, novamente, eu tive vários testes para fazer backup dos meus argumentos. E eu posso executar o aplicativo OS X quando seleciono o Destino de Implantação 10.7. Mas eu aprecio o fato de você ter trazido a discussão dos suportes do aplicativo OS X.
precisa saber é o seguinte
Como você explica meus resultados então? E o que Greg Parker escreveu? Ficaria muito feliz se o Swift Apps funcionasse na versão 10.7, mas até agora não vi um exemplo de trabalho. É claro que também posso definir 10.7 como destino de implantação, mas isso não faz diferença. O aplicativo crahs.
precisa
@ Mike Lischke, você testou aplicativos iOS em dispositivos?
vladof81
1
Eu também vi e testei todo o destino de implantação no Xcode 6 beta (o mesmo que a resposta). Funcionou bem usando 2 aplicativos de teste diferentes.
ySiggen
14

Parece que os aplicativos Swift não são executados no OS X 10.7 . Acabei de criar um aplicativo GUI simples (uma visualização, uma etiqueta, um botão) que roda bem no Mavericks. O SDK base está definido como 10.9 e o destino de implantação em 10.7. Copiei esse aplicativo da pasta DerivedData para a minha máquina virtual 10.7 e ela trava ao iniciar, mostra este erro:

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
...

No entanto, essa mensagem é irritante, pois certamente há uma biblioteca CoreGraphics nesta VM. Outras aplicações que fazem uso pesado do CoreGraphics funcionam perfeitamente.

Mike Lischke
fonte
14

Este é o post que li no blog da Apple Swift, pode ser útil:

Compatibilidade de aplicativos :

Se você escreve um aplicativo Swift, pode confiar que ele funcionará bem no futuro. Na verdade, você pode voltar para o OS X Mavericks ou iOS 7 com o mesmo aplicativo. Isso é possível porque o Xcode incorpora uma pequena biblioteca de tempo de execução Swift no pacote do seu aplicativo. Como a biblioteca é incorporada, seu aplicativo usa uma versão consistente do Swift que é executada em versões passadas, presentes e futuras do SO.

Compatibilidade binária e estruturas:

Enquanto a compatibilidade de tempo de execução do aplicativo for garantida, o próprio idioma do Swift continuará evoluindo e a interface binária também será alterada. Para estar seguro, todos os componentes do seu aplicativo devem ser criados com a mesma versão do Xcode e do compilador Swift para garantir que eles funcionem juntos.

Isso significa que as estruturas precisam ser gerenciadas com cuidado. Por exemplo, se seu projeto usa estruturas para compartilhar código com uma extensão incorporada, convém criar estruturas, aplicativos e extensões juntos. Seria perigoso confiar em estruturas binárias que usam Swift - especialmente de terceiros. À medida que o Swift muda, essas estruturas serão incompatíveis com o restante do seu aplicativo. Quando a interface binária estabilizar em um ano ou dois, o tempo de execução Swift se tornará parte do sistema operacional host e essa limitação não existirá mais.

Yatheesha BL
fonte
12

Testei a execução de um aplicativo básico do Swift em um dispositivo iPod Touch (3ª geração). Parece aplicativos baseados em Swift não trabalho com o iOS 5.x, mas fazer o trabalho com iOS 6.x.

Aqui está o que aparece no log de depuração quando tentei iniciar o aplicativo de teste com o 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

Para o iOS 6.1.6, o aplicativo funciona bem sem exibir essas mensagens de erro.

David H
fonte
12

Parece haver muitas respostas antigas aqui, então eu só queria postar a resposta oficial da equipe Swift. Swift é compatível com o OS X Mavericks e iOS 7

Blog do desenvolvedor da Apple: ID do Objective-C como Swift Any

11 Jul 2014

Compatibilidade

Uma das perguntas mais comuns que ouvimos na WWDC foi: "Qual é a história de compatibilidade do Swift?". Este parece ser um ótimo primeiro tópico.

Compatibilidade de aplicativos Simplificando, se você escrever um aplicativo Swift hoje e enviá-lo para a App Store neste outono quando o iOS 8 e OS X Yosemite forem lançados, você pode confiar que seu aplicativo funcionará bem no futuro. Na verdade, você pode voltar para o OS X Mavericks ou iOS 7 com o mesmo aplicativo. Isso é possível porque o Xcode incorpora uma pequena biblioteca de tempo de execução Swift no pacote do seu aplicativo. Como a biblioteca é incorporada, seu aplicativo usa uma versão consistente do Swift que é executada em versões passadas, presentes e futuras do SO.

Oren
fonte
11

Eu também tentei um aplicativo muito simples no 10.8 (um botão, define o texto em um rótulo). Ele travou na inicialização, como Greg Parker afirmou:

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

(Isso estava usando um destino de implantação 10.7)

Valdar Moridin
fonte
10

Tente o seguinte código:

Está funcionando sem o 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
}
PREMKUMAR
fonte
E como usar nav.rootviewcontroller ??
Allan
8

Sim, na verdade, a Apple anunciou que os aplicativos Swift serão compatíveis com o iOS 7 e OS X Mavericks. Além disso, o aplicativo WWDC é escrito na linguagem de programação Swift.

Bodi Osman
fonte
8

Quando se trata de Swift Frameworks. Hoje, com o Xcode versão 6.1.1 (6A2008a), se a estrutura Swift estiver direcionada para o iOS 7.1, aviso de relatório do vinculador

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

e o aplicativo não pode ser enviado à AppStore. Verifique este problema: Lint para impedir a passagem de bibliotecas e estruturas dinâmicas com o iOS 7

Marcin
fonte
O Swift Framework Mach-O Typedeve ser Dynamic Library, no entanto, o iOS 7 aceita Static LibrarySomente.
DawnSong
7

Atualização rápida, a partir de 15 de fevereiro de 2015 , não podemos enviar aplicativos para a loja que foram desenvolvidos usando um SDK anterior ao iOS 8 . Portanto, mantendo isso em mente, é melhor não se preocupar com esse problema, pois muitas pessoas sugeriram que os aplicativos criados no Swift podem ser implantados no OS X 10.9 e no iOS 7.0 também.

13º Fantasma
fonte
Você nos forneceria uma fonte?
Binus 15/03
1
Há uma diferença entre o SDK Base e o Destino de Implantação. Você pode ter um SDK base do iOS 9 e um destino de implantação do iOS 7 e enviar para o iTunes Connect. Voto negativo porque você não forneceu uma fonte.
Cœur
1
A documentação atual da Apple ainda menciona o suporte ao iOS 4.3: developer.apple.com/library/content/documentation/IDEs/…
Cœur
1

O trecho de código respondido postado por Leandros parece um pouco antigo. Corrigi e tornei compilável no 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
}
Sazzad Hissain Khan
fonte