O SwiftUI é compatível com versões anteriores do iOS 12.xe mais antigo?


123

Se eu tiver um aplicativo feito com SwiftUI, ele funcionará para iOS abaixo de iOS 13?


1
Por que você não tenta? O Xcode 11 beta está disponível para download e os tutoriais estão aqui developer.apple.com/tutorials/swiftui .
Martin R

1
Pessoal, alguém sabe por que minha resposta excluída por @ Jean-François Fabre
CrazyPro007

10
NÃO, o SwiftUI não funciona com iOS 12.x e anteriores.
ystack

Respostas:


89

Acabei de verificar no Xcode 11 e posso confirmar que não será compatível com versões anteriores, como pode ser visto na Viewimplementação do SwiftUI :

/// A piece of user interface.
///
/// You create custom views by declaring types that conform to the `View`
/// protocol. Implement the required `body` property to provide the content
/// and behavior for your custom view.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public protocol View : _View {

    /// The type of view representing the body of this view.
    ///
    /// When you create a custom view, Swift infers this type from your
    /// implementation of the required `body` property.
    associatedtype Body : View

    /// Declares the content and behavior of this view.
    var body: Self.Body { get }
}

7
Pelo menos mais 5 anos? Então você só usa APIs disponíveis no iOS 7 e inferior no momento?
David Monagle

5
O mais estranho é que você pode fazer um aplicativo SwiftUI com xcode 11 no Mojave (10.4) que só rodará no Catalina (10.5)
Túlio Calazans

34

Acho que não, porque todas as bibliotecas já estão anotadas para iOS 13 ou superior.

Além disso, na documentação , a Apple menciona claramente as versões compatíveis:

  • iOS13.0 + beta
  • macOS10.15 + beta
  • tvOS 13.0+ beta
  • watchOS 6.0+ beta

insira a descrição da imagem aqui


32

SwiftUI e Combine usam Tipos de Retorno Opaco no Swift 5.1 e, uma vez que Tipos de Retorno Opaco (junto com outros recursos) são implementados no Swift 5.1 e devido à natureza de sua implementação, eles não podem ser implantados novamente no Swift 5.0 (ao contrário do DSL ou Property-Wrappers ), e como o iOS 13 é o SDK do iOS mais antigo que contém o tempo de execução Swift 5.1 no sistema operacional, a resposta à pergunta é não e o SwiftUI e o Combine não podem ser usados ​​em versões anteriores do iOS.

A menos que a Apple forneça uma maneira de agrupar o tempo de execução do Swift 5.1 (ou versões futuras) com o aplicativo, como costumava fazer com as versões anteriores do Swift, mas uma vez que aumentará o tamanho do App e adicionará sobrecarga a todo o sistema novamente, duvido que isso vá nunca acontecer.

Ele pode ser compatível

O Swift 5.1 ainda não foi lançado e SwiftUIusa recursos como tipos de retorno opaco , DSL , propertyDelegate (apresentado no WWDC como propertyWrapper ) e etc, que estarão disponíveis apenas no Swift 5.1. Como o Swift 5 é binário estável, acho que não foi possível usar estruturas Swift incorporadas dentro do Xcode11, portanto, eles reimplementaram esses recursos no núcleo do Cocoa e os marcaram como iOS13 + disponível até o lançamento do Swift 5.1.

Minhas suposições são baseadas no fato de que Ordered Collection Diffing e DSL estarão disponíveis no Swift 5.1 e não terão correlações com o Xcode ou o ecossistema da Apple, mas também serão marcados como @available(iOS13,...). Isso significa que eles tiveram que marcar tudo usando os recursos do Swift 5.1 com o atributo de disponibilidade do iOS. Alguns deles serão removidos assim que o Swift 5.1 for lançado, mas não podemos ter certeza sobre isso SwiftUIe a Combinemenos que a Apple diga o contrário. Isso também é mencionado na proposta do DSL :

Implementação: PR . Observe que a implementação na visualização do desenvolvedor do Xcode usa uma transformação um pouco mais simples do que a descrita aqui. O PR vinculado reflete a implementação na visualização, mas está em desenvolvimento ativo para corresponder a esta proposta.

Portanto, a limitação de incompatibilidade com versões anteriores pode ser removida quando o Swift 5.1 for lançado, mas realmente precisa ser esclarecido pela equipe da Apple .


1
alguma atualização disso? PR que você mencionou foi mesclado, Swift 5.1 foi lançado
user158

@ user158 Acabei de atualizar a resposta e descrevi por que esse recurso não é compatível.
farzadshbfn

15

Não. O SwiftUI requer um destino de implantação do iOS 13 ou posterior, macOS 10.15 ou posterior, tvOS 13 ou posterior ou watchOS 6 ou posterior. A estrutura contém muitos novos tipos que não existem nas versões mais antigas dos sistemas operacionais.


É possível usar SwiftUI no iOS 13 ao mesmo tempo em que oferece suporte a um destino de implantação inferior. Verifique stackoverflow.com/a/58372597/840742
Renatus

13

Se você pretende oferecer suporte ao iPhone e não ao iPad, provavelmente espera que a maioria dos usuários atualize para o iOS 13 dentro de 12 a 18 meses (começando com a data de lançamento). Talvez 85-90%? (Acho que a Apple disse que neste momento ainda há 15% das pessoas que não usam o iOS 12). Ainda é um bom tempo, mas você não será capaz de implantar aplicativos SwiftUI imediatamente ou então arriscará alienar muitos usuários.

Também dependendo dos outros 10-15%, isso pode significar muitos usuários (e $$) para você deixados na mesa.

Se você também oferece suporte ao iPad, é mais complicado porque as pessoas não atualizam seus iPads com frequência. Há muitos iPads 2s junto com os iPads de 3ª e 4ª geração ainda disponíveis, que têm apenas 10.3.3 e não podem mais ser atualizados. As pessoas simplesmente não vão se levantar e pagar entre US $ 400 e US $ 1.000 por um novo iPad quando o deles funciona perfeitamente bem.

Sempre há espaço e a necessidade de atualizar o aplicativo, torná-lo melhor, corrigir bugs, que não necessariamente têm nada a ver com o iOS 13. ou seja, encontrar um bug que você não conhecia antes, deixando muitos usuários insatisfeitos. não na versão mais recente do iOS. e nem mesmo falamos sobre clientes corporativos / corporativos que muitas lojas de desenvolvimento suportam. há muito mais resistência nas atualizações do iOS por vários motivos nessa área.

Portanto, antes de ficar todo empolgado com o iOS 13 e o SwiftUI (o que você deve, porque é incrível), de volta ao mundo real, fora do Vale do Silício, isso não vai exatamente se alinhar com o que o consumidor médio espera e você precisará oferecer suporte dispositivos mais antigos e precisam porque há muitas pessoas que você estaria alienando.


1
Eu conheço várias pessoas em iPhones "sem suporte", então você nunca vai chegar a 100% para a versão mais recente do iOS. Eu sei que estarei pensando muito sobre meu próximo telefone quando o atual morrer
Gavin

@cspam Embora suas suposições possam ser corretas, elas não respondem à pergunta.
user1892364

O iOS 12 não deixou de oferecer suporte a mais de 10% dos dispositivos, então é difícil dizer se podemos esperar as mesmas taxas de adoção para o iOS 13.
Casper Zandbergen

O SwiftUI precisará oferecer suporte a dispositivos mais antigos e precisa porque há muitas pessoas que você estaria alienando! thumb
Trevor

9

Com base na documentação da Apple, ele está disponível apenas a partir do iOS 13, infelizmente.

https://developer.apple.com/documentation/swiftui/


Tudo o que a documentação vinculada diz é que você precisa usar o iOS 13 SDK (ou seja, Xcode 11). Isso não significa que a versão iOS mínima suportada do dispositivo deve ser iOS 13 ... você pode suportar versões mais antigas do iOS perfeitamente ...
escalonado


6

só funciona para ios 13 ou posterior

você ainda pode anexar seu SwiftUIcódigo usando

@available(iOS 13.0, *)

se você ainda usa o Xcode abaixo do Xcode 11 e tem o código SwiftUI, pode envolvê-lo com

#if canImport(SwiftUI)
...
#endif

Isso pode corrigir o problema ao compilar com Xcode abaixo de Xcode 11


4

Como todos disseram, não será compatível com versões anteriores do iOS. Mas dado que a Apple tem uma base de instalação consistente de seu iOS mais recente, e também dado que o iOS 13 requer iPhone 6S ou posterior, iPad Air 2 ou posterior, o novo iPad mini 4 e iPhone SE. A grande maioria dos usuários será capaz de instalar o iOS 13 e desfrutar de aplicativos SwiftUI adoráveis.


3
Meu iPad não faz o corte para iOS 13, e dado que ainda está forte e vai ser substituído por um tempo (espero) aqui, esperando que os aplicativos que eu gosto / preciso não joguem dispositivos antigos à deriva.
Gavin de

3

Como todas as pessoas antes de mim mencionaram, é muito claro que exigirá o iOS 13 ou posterior. Mas, como um novo desenvolvedor de iOS, estava preocupado em até que ponto deveria adotar o SwiftUI em comparação com o UIKit. Já construí alguns pequenos projetos com o UIKit e fui a algum lugar avançado com ele.

Mas quando o SwiftUI começou, como combinar os dois. O artigo no link a seguir coloca tudo em contexto: https://www.hackingwithswift.com/quick-start/swiftui/answering-the-big-question-should-you-learn-swiftui-uikit-or-both

Minha única preocupação agora é que percebi com o Xcode 11 que um projeto Xcode não pode combinar Storyboards e SwiftUI.


3

Infelizmente não, o SwiftUI só é permitido no iOS 13 e superior. Ele foi introduzido na estrutura do iOS 13. Antes do iOS 13, tudo era construído usando a estrutura Obj-C (incluindo Swift).

No lado direito da documentação dev, ele mostra as versões suportadas de iOS, macOS, tvOS, watchOS, etc.

https://developer.apple.com/documentation/swiftui/

Espero que isto ajude!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.