Programação de Rede em Swift: de Sockets a WebSocket

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Programação de Rede em Swift: do simples ao complexo

\n\n

Quando você abre o Xcode pela primeira vez e vê um projeto vazio, parece que ainda falta muito para chegar à verdadeira magia da comunicação em rede. Mas acredite: programação de rede em Swift não é rocket science, mas sim uma ferramenta tangível que transforma um aplicativo local em parte da internet global. Hoje vamos analisar como fazer seu aplicativo "conversar" com servidores, trocar dados e fazer isso de forma elegante.

\n\n

Vou mostrar não apenas definições secas, mas cenários reais da vida de um desenvolvedor iOS. Você aprenderá como funciona a comunicação de rede em Swift em baixo nível (sockets) e em alto nível (URLSession). E no final, um bônus: como conectar WebSocket para um chat ao vivo. Vamos lá!

\n\n

Entendendo os fundamentos: como as redes funcionam no mundo Swift

\n\n

Antes de escrever código, vamos entender os conceitos. A programação de rede em Swift baseia-se nos mesmos princípios de qualquer outra linguagem: arquitetura cliente-servidor, protocolos TCP/UDP, endereços IP e portas. Mas há uma nuance — o ecossistema da Apple oferece seus próprios frameworks que facilitam a vida do desenvolvedor.

\n\n

Tecnologias-chave para trabalhar com rede em Swift

\n\n
    \n
  • URLSession — a principal ferramenta para requisições HTTP/HTTPS. Funciona com REST API, download de arquivos, tarefas em segundo plano.
  • \n
  • Network.framework — acesso de baixo nível a sockets, TCP/UDP. Surgiu no iOS 12, substituindo o antigo CFNetwork.
  • \n
  • WebSocket (URLSessionWebSocketTask) — para comunicação bidirecional em tempo real.
  • \n
  • CFStream — uma forma antiga, mas ainda funcional, de trabalhar com fluxos de dados.
  • \n
\n\n

Pessoalmente, recomendo começar com URLSession — é como dirigir um carro com câmbio automático. E quando quiser algo mais "manual", migre para o Network.framework.

\n\n

URLSession: seu melhor amigo na programação de rede em Swift

\n\n

Vamos começar com a ferramenta mais popular. URLSession Swift é um framework poderoso para enviar e receber dados pela rede. Ele suporta cache, autenticação, downloads em segundo plano e muito mais.

\n\n

Requisição GET básica

\n\n

Imagine que seu aplicativo precisa mostrar uma lista de usuários do servidor. Veja como fazer:

\n\n
import Foundation\n\n// 1. Criamos a URL\nguard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n    fatalError("Invalid URL")\n}\n\n// 2. Criamos a tarefa\nlet task = URLSession.shared.dataTask(with: url) { data, response, error in\n    // 3. Tratamos erros\n    if let error = error {\n        print("Erro: \\(error.localizedDescription)")\n        return\n    }\n    \n    // 4. Verificamos a resposta do servidor\n    guard let httpResponse = response as? HTTPURLResponse,\n          (200...299).contains(httpResponse.statusCode) else {\n        print("Código de status inválido")\n        return\n    }\n    \n    // 5. Trabalhamos com os dados\n    if let data = data {\n        do {\n            let users = try JSONDecoder().decode([User].self, from: data)\n            print("Recebidos \\(users.count) usuários")\n        } catch {\n            print("Erro de parsing: \\(error)")\n        }\n    }\n}\n\n// 6. Iniciamos a tarefa\ntask.resume()
\n\n

Observe: task.resume() é obrigatório! Caso contrário, a requisição nunca será executada. Este é um erro comum de iniciantes em programação de rede em Swift.

\n\n

Requisição POST com corpo

\n\n

Agora vamos enviar dados para o servidor:

\n\n
func createUser(name: String, email: String) {\n    guard let url = URL(string: "https://jsonplaceholder.typicode.com/users") else {\n        return\n    }\n    \n    var request = URLRequest(url: url)\n    request.httpMethod = "POST"\n    request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n    \n    let body                

Blogs

Book Recommendations