Swift e IA: cómo usar ChatGPT en el desarrollo de aplicaciones iOS

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Swift se encuentra con la inteligencia artificial: por qué es importante ahora mismo

\n\n

Imagine: está escribiendo una aplicación para iOS y, de repente, su usuario puede simplemente preguntarle: «¿Cómo preparar pasta carbonara?» — y obtener no un enlace a Wikipedia, sino una respuesta viva y detallada. O pedirle: «Escribe una carta al jefe sobre el aplazamiento de la fecha límite» — y en un segundo el borrador está listo. ¿Suena a magia? No, es Swift + ChatGPT.

\n\n

En 2024, la integración de modelos de lenguaje en aplicaciones móviles ha dejado de ser cosa de gigantes. Ahora cualquier desarrollador de Swift puede añadir inteligencia artificial a su aplicación en una tarde. Y hoy les mostraré cómo hacerlo — con código real, sin rodeos y entendiendo lo que sucede bajo el capó.

\n\n

Por cierto, si recién está comenzando su camino en Swift y quiere profundizar en los fundamentos, PythonLib es un excelente lugar para reforzar la base antes de sumergirse en la IA. Y ahora, al grano.

\n\n

Paso 1. Preparando el entorno: qué se necesita para trabajar con ChatGPT en Swift

\n\n

Antes de escribir código, asegurémonos de que tiene todo lo necesario. Necesitará:

\n\n
    \n
  • Xcode 15.0 o superior (preferiblemente la última versión)
  • \n
  • iOS 16.0+ (para usar async/await sin muletas)
  • \n
  • Clave API de OpenAI (regístrese en platform.openai.com, cree una clave)
  • \n
  • Biblioteca para trabajar con la red — usaremos URLSession, así que no se necesitan dependencias externas
  • \n
\n\n

Consejo importante: nunca guarde la clave API directamente en el código. Use archivos .xcconfig o un proxy de servidor. En los ejemplos mostraré cómo leer la clave desde Info.plist, pero en producción asegúrese de cifrarla o usar un backend.

\n\n

Paso 2. Creando la estructura de la solicitud a ChatGPT

\n\n

ChatGPT usa la API de OpenAI, que recibe JSON y devuelve la respuesta del modelo. Vamos a crear una estructura simple pero funcional para enviar mensajes.

\n\n

Modelos de datos

\n\n
// Modelo de mensaje\nstruct Message: Codable {\n    let role: String    // "system", "user" o "assistant"\n    let content: String\n}\n\n// Modelo de solicitud\nstruct ChatGPTRequest: Codable {\n    let model: String\n    let messages: [Message]\n    let temperature: Double?\n}\n\n// Modelo de respuesta\nstruct ChatGPTResponse: Codable {\n    struct Choice: Codable {\n        let message: Message\n    }\n    let choices: [Choice]\n}\n
\n\n

Observe el temperature — es el parámetro de creatividad. El valor 0.0 hace las respuestas estrictas y factuales, 1.0 las hace creativas. Para un chatbot ponga 0.7, para generación de ideas 0.9.

\n\n

Servicio para trabajar con la API

\n\n
class ChatGPTService {\n    \n    private let apiKey: String\n    private let baseURL = "https://api.openai.com/v1/chat/completions"\n    \n    init() {\n        // Leemos la clave desde Info.plist (¡solo para pruebas!)\n        guard let key = Bundle.main.object(forInfoDictionaryKey: "OPENAI_API_KEY") as? String else {\n            fatalError("API Key not found")\n        }\n        self.apiKey = key\n    }\n    \n    func sendMessage(_ text: String) async throws -> String {\n        let messages = [\n            Message(role: "system", content: "Eres un asistente útil para desarrolladores iOS. Responde brevemente, en español."),\n            Message(role: "user", content: text)\n        ]\n        \n        let requestBody = ChatGPTRequest(\n            model: "gpt-3.5-turbo",\n            messages: messages,\n            temperature: 0.7\n        )\n        \n        var request = URLRequest(url: URL(string: baseURL)!)\n        request.httpMethod = "POST"\n        request.setValue("application/json", forHTTPHeaderField: "Content-Type")\n        request.setValue("Bearer \\(apiKey)", forHTTPHeaderField: "Authorization")\n        request.httpBody = try JSONEncoder().encode(requestBody)\n        \n        let (data, _) = try await URLSe                

Blogs

Book Recommendations