<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Juan Sebastián Landy on Medium]]></title>
        <description><![CDATA[Stories by Juan Sebastián Landy on Medium]]></description>
        <link>https://medium.com/@juanlandy?source=rss-d54527023e65------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*eG6LUfXoeiAaTBeynOllog.jpeg</url>
            <title>Stories by Juan Sebastián Landy on Medium</title>
            <link>https://medium.com/@juanlandy?source=rss-d54527023e65------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 02 Jul 2026 05:54:38 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@juanlandy/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[POO vs POP: Lo que las ofertas laborales no te dicen sobre Swift]]></title>
            <link>https://juanlandy.medium.com/poo-vs-pop-lo-que-las-ofertas-laborales-no-te-dicen-sobre-swift-d5def7657126?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/d5def7657126</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[solid-principles]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[swift-programming]]></category>
            <category><![CDATA[ios-development]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Wed, 25 Mar 2026 00:20:10 GMT</pubDate>
            <atom:updated>2026-03-25T00:20:10.586Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*7wZSw1B9bq0V8rBmDs7vuA.png" /></figure><p>Si eres desarrollador iOS y has buscado empleo recientemente, seguramente has visto un patrón repetitivo en las ofertas laborales: “Se requiere conocimiento sólido en principios SOLID y programación orientada a objetos”. Es casi un estándar de la industria. Sin embargo, hay algo que pocas empresas y reclutadores parecen considerar: <strong>Swift no fue diseñado para ser un lenguaje orientado a objetos 😱</strong>.</p><p>En 2015, durante la <a href="https://youtu.be/FlNlyH9uRdI?si=BC09AXevmuxT20Tm">WWDC, Dave Abrahams</a> pronunció una frase que marcó un antes y un después en el ecosistema Apple: <em>“Swift is a Protocol-Oriented Programming language”</em>. Desde entonces, la filosofía de desarrollo en el ecosistema iOS tomó un rumbo diferente al del resto de la industria. Este artículo busca aclarar esas diferencias y reflexionar sobre por qué, como desarrolladores, deberíamos replantear las preguntas y respuestas sobre SOLID en una entrevista técnica.</p><h3>SOLID: El estándar de la industria</h3><p>Los principios SOLID, formulados por <a href="https://en.wikipedia.org/wiki/Robert_C._Martin">Robert C. Martin</a> (uncle Bob), son cinco reglas de diseño pensadas para escribir software mantenible y escalable dentro del paradigma de la programación orientada a objetos:</p><ul><li><strong>S</strong> — Single Responsibility Principle (Responsabilidad única)</li><li><strong>O</strong> — Open/Closed Principle (Abierto/Cerrado)</li><li><strong>L</strong> — Liskov Substitution Principle (Sustitución de Liskov)</li><li><strong>I</strong> — Interface Segregation Principle (Segregación de interfaces)</li><li><strong>D</strong> — Dependency Inversion Principle (Inversión de dependencias)</li></ul><p>Estos principios nacieron en un contexto donde la herencia de clases y las jerarquías profundas eran la norma. Lenguajes como Java, C++ y C# los adoptaron como guía fundamental, y con razón: en un mundo dominado por clases y herencia, SOLID resuelve problemas reales de acoplamiento y rigidez.</p><p>El problema surge cuando trasladamos estos principios de forma literal a Swift. No es que SOLID sea incompatible con Swift, sino que <strong>Swift ofrece herramientas nativas que resuelven muchos de esos problemas de forma más natural y elegante</strong>, sin necesidad de recurrir a los patrones clásicos de POO.</p><h3>POO vs POP: Dos filosofías distintas</h3><h3>Programación Orientada a Objetos (POO)</h3><p>La POO se fundamenta en cuatro pilares: encapsulamiento, herencia, polimorfismo y abstracción. Todo gira en torno a <strong>clases</strong> (tipos por referencia), y la reutilización de código se logra principalmente mediante <strong>herencia vertical</strong>. Una clase hija hereda comportamiento de una clase padre, y así se construyen jerarquías.</p><p>El problema clásico de este enfoque es conocido: las jerarquías crecen, se vuelven rígidas y difíciles de modificar. Además, la herencia múltiple no está permitida en la mayoría de lenguajes, lo que limita la composición de comportamientos.</p><h3>Programación Orientada a Protocolos (POP)</h3><p>POP propone un cambio de mentalidad. En lugar de preguntarse <em>“¿qué es este objeto?”</em>, se pregunta <em>“¿qué puede hacer este objeto?”</em>. La unidad fundamental no es la clase, sino el <strong>protocolo</strong>, y la reutilización de código se logra mediante <strong>composición horizontal</strong>: un tipo puede conformar múltiples protocolos, cada uno con su implementación por defecto a través de extensiones.</p><p>Las diferencias clave son:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tKAiWFJCp8GSCOLuH97ZoQ.png" /></figure><p>En Swift, los protocolos con extensiones permiten definir comportamiento compartido sin crear jerarquías de clases. Las structs, al ser tipos por valor, eliminan problemas de estado compartido y efectos secundarios inesperados. Esto no es simplemente una preferencia estilística; es una decisión de diseño del lenguaje respaldada por Apple.</p><h3>La perspectiva de un desarrollador iOS con más de 10 años de experiencia.</h3><p>Después de más de una década desarrollando aplicaciones iOS, he visto la evolución completa del ecosistema: desde los días de Objective-C y MVC puro, pasando por la llegada de Swift en 2014, hasta el presente con SwiftUI y structured concurrency.</p><p>Si hay algo que esa experiencia me ha enseñado es que <strong>Swift se disfruta de verdad cuando dejas de escribirlo como si fuera Java</strong>.</p><p>Durante los primeros años de Swift, muchos desarrolladores (incluido yo) seguíamos pensando en clases, herencia y <a href="https://www.universojava.com/2024/11/patrones-de-diseno-gof-gang-of-four.html">patrones GOF</a> porque era lo que conocíamos. Funcionaba, sí, pero no aprovechábamos lo que el lenguaje realmente ofrecía. El cambio llegó cuando empecé a diseñar con protocolos como base: el código se volvió más modular, más testeable y significativamente más fácil de mantener.</p><p>Con la llegada de <strong>SwiftUI</strong>, este enfoque se consolidó definitivamente. SwiftUI está construido casi en su totalidad sobre structs y protocolos. El protocolo View, por ejemplo, es el corazón de todo el framework. No hay clases. No hay herencia. No hay UIViewController. Es POP en su forma más pura:</p><pre>struct MiVista: View {<br>    var body: some View {<br>        Text(&quot;Hola, POP&quot;)<br>    }<br>}</pre><p>Combinado con el modelo de concurrencia moderno de Swift — actors, async/await, Sendable — , los tipos por valor y los protocolos no solo son convenientes, sino que son <strong>la forma segura y recomendada</strong> de escribir código concurrente.</p><p>¿Significa esto que SOLID no tiene lugar en Swift? <strong>No</strong>. Sus principios siguen siendo valiosos como guía conceptual. Pero la forma de aplicarlos cambia radicalmente. El principio de segregación de interfaces se cumple naturalmente con protocolos pequeños y específicos. La inversión de dependencias se logra inyectando protocolos, no clases abstractas.</p><p>Mi recomendación para la industria es simple: cuando busquemos talento iOS, preguntemos por <strong>Protocol-Oriented Programming, composición sobre herencia y dominio de tipos valor</strong>. Eso nos dice mucho más sobre un candidato que recitar los cinco principios SOLID de memoria.</p><p>Swift tiene su propia identidad. Es hora de que nuestras entrevistas la reflejen.</p><p>Dejame un comentario con tus opiniones. Nos leemos en la próxima publicación 🚀</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d5def7657126" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Desarrollando Apps iOS con Claude AI: Una Perspectiva Experimentada]]></title>
            <link>https://juanlandy.medium.com/desarrollando-apps-ios-con-claude-ai-una-perspectiva-experimentada-168c09af410b?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/168c09af410b</guid>
            <category><![CDATA[ios-development]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[claude]]></category>
            <category><![CDATA[xcode]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Tue, 10 Mar 2026 04:14:46 GMT</pubDate>
            <atom:updated>2026-03-10T04:14:46.386Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HFm6zDpj71lE2g8-mttAEw.png" /></figure><p>Como desarrollador iOS con más de 10 años de experiencia, desde Objective-C hasta SwiftUI en proyectos fintech y de salud, he explorado herramientas como Claude AI para optimizar flujos de trabajo.</p><p>Claude, de Anthropic, se destaca por su capacidad para generar código y asistir en tareas repetitivas, como se detalla en su manual oficial “The Complete Guide to Building Skills for Claude”. Este guía enfatiza la creación de “skills” — flujos personalizados — para code generation, como vistas SwiftUI o integración con Xcode.</p><p><strong>Ventajas de Utilizar Claude en Desarrollo iOS</strong><br>Claude acelera la productividad al generar código boilerplate, como vistas en SwiftUI o manejadores de API con Combine, manteniendo consistencia en estilos y mejores prácticas. Sus “skills” permiten workflows repetibles, reduciendo tokens y esfuerzo manual. Para iOS, es ideal para prototipos rápidos, depuración lógica y optimización de UI, integrando guías de Apple sin reinvención. Beneficios clave incluyen portabilidad entre interfaces (web, API) y eficiencia en equipos, donde un asistente AI maneja tareas mundanas, liberando tiempo para arquitectura compleja.</p><p><strong>Beneficios de un Asistente AI para Desarrolladores iOS</strong><br>Un AI como Claude actúa como co-piloto: acelera aprendizaje de frameworks nuevos (e.g., RealityKit), sugiere optimizaciones de rendimiento y valida código contra leaks o concurrency issues. En mi experiencia, mejora la innovación, permitiendo iteraciones rápidas en apps como wallets cripto, mejorando calidad sin sacrificar creatividad.</p><p><strong>Desventajas para Juniors y Seniors</strong><br>Para juniors, Claude puede fomentar dependencia, limitando comprensión profunda de conceptos como ARC o async/await, resultando en código “copiado” sin depuración manual. También, prompts mal estructurados llevan a outputs inexactos, retrasando el mastery de Xcode.</p><p>Para seniors, las limitaciones incluyen over-triggering de skills o problemas de contexto grande, que degradan performance en proyectos escalables. Dependencia en MCP (para integraciones como GitHub) introduce fallos si no se configura bien, y carece de testing automatizado nativo, obligando validación manual.</p><p>En resumen, Claude es una herramienta valiosa para iOS dev, pero debe usarse con criterio: juniors para un desarrollo guiado, seniors para workflows avanzados. Recomiendo empezar con el <a href="https://resources.anthropic.com/hubfs/The-Complete-Guide-to-Building-Skill-for-Claude.pdf">manual para skills personalizados </a>— transforma el desarrollo, pero no reemplaza expertise humana.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=168c09af410b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[iOS 26.3: una actualización de madurez antes de la reinvención de Siri]]></title>
            <link>https://juanlandy.medium.com/ios-26-3-una-actualizaci%C3%B3n-de-madurez-antes-de-la-reinvenci%C3%B3n-de-siri-f0e084acf106?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/f0e084acf106</guid>
            <category><![CDATA[app-store]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[iphone]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[macos]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Thu, 12 Feb 2026 19:11:13 GMT</pubDate>
            <atom:updated>2026-02-12T19:11:13.744Z</atom:updated>
            <content:encoded><![CDATA[<p>Por Juan Landy — iOS Developer, desde iPhone 5 hasta iPhone 17</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*lohG0AVGjNZwKggIXZsgqw.jpeg" /></figure><p>El pasado <strong>11 de febrero de 2026</strong>, Apple liberó la versión estable de <a href="https://support.apple.com/en-gb/123075"><strong>iOS 26.3</strong></a>, marcando el último hito importante antes del lanzamiento de la esperada actualización que integrará una nueva generación de <strong>Siri potenciada por Google Gemini</strong>. Lejos de ser una versión con grandes funciones de consumo — esa revolución quedará para iOS 26.4 — , iOS 26.3 representa un <strong>avance crítico en estabilidad, seguridad, compatibilidad entre plataformas y preparación de la plataforma para lo que viene</strong>.</p><p>En mis más de diez años desarrollando para iPhone — desde los tiempos del iPhone 5 — he aprendido a leer cada actualización con dos lentes: ¿qué aporta hoy y qué prepara para mañana? iOS 26.3 es, sin duda, una actualización de madurez cuyo impacto va más allá de lo que Apple destaca en sus notas oficiales. Aquí te explico por qué.</p><h4>🔐 Seguridad y correcciones: la base de toda actualización responsable</h4><p>Antes que ninguna novedad visible al usuario, iOS 26.3 incluye <strong>decenas de correcciones de seguridad</strong> que Apple considera críticas. Entre ellas se encuentran parches para vulnerabilidades que podrían permitir ejecución arbitraria de código o acceso indebido a información sensible — incluyendo al menos una que ya ha sido explotada en el mundo real — según análisis independientes.</p><p>Para desarrolladores y empresas que gestionan dispositivos con <a href="https://support.apple.com/en-bw/125073">MDM</a>, esta actualización también corrige problemas con la autenticación básica en cuentas de correo y mejora la estabilidad de la gestión de software entre dispositivos gestionados.</p><p><strong>Lección para desarrolladores:</strong> mantener tu equipo y tus dispositivos en la última versión no sólo es una cuestión de nuevas APIs, sino de proteger tus datos, tus builds firmados y tus certificados de distribución de amenazas reales.</p><h4>📱 Interoperabilidad: Apple empieza a cruzar puentes</h4><p>Una de las novedades más comentadas de iOS 26.3 es la <strong>herramienta nativa para transferir datos de un iPhone a un dispositivo Android</strong>. Por primera vez Apple ofrece un flujo integrado sin necesidad de apps externas, permitiendo migrar fotos, mensajes, contactos, notas, contraseñas y más — simplificando considerablemente el proceso de cambio de ecosistema.</p><p>Este cambio histórico no solo responde a las demandas de los usuarios: es también una señal clara de la presión regulatoria global (como la Ley de Mercados Digitales en Europa) para facilitar la interoperabilidad entre plataformas.</p><p>Además, en regiones como la <strong>Unión Europea <em>(donde resido la mayor parte del año)</em></strong>, iOS 26.3 añade soporte para <strong>reenvío de notificaciones a relojes o dispositivos terceros</strong> y mecanismos de emparejamiento de proximidad con accesorios no-Apple, acercando la experiencia iPhone a estándares más abiertos.</p><p>Como desarrollador, esto abre nuevas posibilidades: wearable frameworks más compatibles, menos bloqueos en flujos de entrada y salida de datos, y maneras más eficientes de sincronizar experiencias entre Apple y otros ecosistemas.</p><h4>📍 Privacidad reforzada: control granular sobre tu ubicación</h4><p>Apple ha añadido un nuevo ajuste para <strong>limitar el nivel de precisión con el que las redes celulares pueden rastrear tu ubicación</strong>. Esta funcionalidad es especialmente útil si te preocupa compartir coordenadas exactas con tu operador, optando por una precisión mayoritariamente por barrio en lugar de por dirección.</p><p>Aunque esta característica depende del hardware de red (disponible en modelos como iPhone 16e o iPhone Air con módem C1/C1X), es un ejemplo claro de cómo Apple sigue afinando la <strong>privacidad por diseño</strong>, incluso en capas del sistema que suelen quedar fuera del foco principal de los usuarios.</p><h4>🎨 Mejoras menores pero significativas en la experiencia de uso</h4><p>iOS 26.3 también incluye ajustes de UX que, aunque sutiles, hacen que el sistema se sienta más coherente y refinado:</p><ul><li><strong>Galería de fondos de pantalla reorganizada:</strong> separa las secciones de Clima y Astronomía para facilitar la selección.</li><li><strong>Actualizaciones a RCS en Mensajes:</strong> mejora la interoperabilidad avanzada en chats con usuarios Android (sujeto a soporte de los operadores).</li><li><strong>Optimización de animaciones y rendimiento:</strong> reportes tempranos de usuarios indican una sensación más fluida y consistente comparado con versiones anteriores.</li></ul><p>Estas mejoras pueden parecer menores por separado, pero contribuyen a una experiencia de uso más refinada en el día a día.</p><h4>🚀 Mirando hacia iOS 26.4 y el futuro de Siri con Gemini (la parte que mas me emociona 😎)</h4><p>Quizá el aspecto más interesante de iOS 26.3 no es lo que tiene, sino lo que está <strong>preparando para el futuro</strong>.</p><p>Apple ha confirmado que **iOS 26.4 introducirá una versión de Siri potenciada por <strong>Google Gemini</strong>, lo que promete una IA conversacional más contextual, potente y capaz de ejecutar acciones complejas directamente desde el sistema operativo.</p><p>Aunque esta funcionalidad no se activa en iOS 26.3, esta versión ha sido clave para sentar las bases: ajustes de estabilidad, compatibilidad de servicios, gestión de permisos de IA y optimizaciones de rendimiento que serán esenciales para que la nueva Siri funcione de forma eficiente y segura.</p><p>Como desarrolladores debemos prepararnos para:</p><ul><li><strong>Integrar intentos avanzados de Siri</strong> y shortcuts más inteligentes.</li><li><strong>Adoptar eventos de interacción basados en IA.</strong></li><li><strong>Revisar nuestras apps para rendir con nuevos modelos de lenguaje en tiempo real</strong>, manteniendo privacidad y rendimiento.</li></ul><h4>🧠 Conclusión: una actualización que no hace mucho ruido, pero mueve bastante</h4><p>Si te soy sincero, iOS 26.3 no es de esas actualizaciones que te hacen decir “¡qué bestia, esto cambia todo!”. No trae una interfaz nueva ni una función que se vuelva viral en TikTok. Pero ojo — eso no significa que no sea importante.</p><p>Esta versión es de esas que trabajan calladitas. Ajusta, corrige, fortalece y deja todo listo para lo que realmente se viene pesado: la nueva generación de Siri con Gemini.</p><p>Y los que llevamos años desarrollando en iOS sabemos algo clarito: cuando Apple empieza a ordenar la casa, es porque algo grande está por entrar. No es coincidencia que refuercen seguridad, mejoren interoperabilidad y optimicen rendimiento justo antes de meter un motor de IA mucho más potente dentro del sistema.</p><p>Desde mi experiencia — desde el iPhone 5 hasta hoy — estas versiones “intermedias” suelen ser las más estratégicas. No brillan por fuera, pero por dentro están preparando el terreno.</p><p>Así que mi recomendación es simple:<br>Actualiza. Prueba. Revisa tus apps. Optimiza.</p><p>Porque cuando Siri con Gemini llegue oficialmente, los que ya estén listos no van a estar corriendo… van a estar aprovechando.</p><p>Y ahí es donde realmente se nota la diferencia.</p><p>Nos leemos en la próxima actualización 🚀</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f0e084acf106" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ Apple Approves First Game with Integrated Lightning Payments: A Turning Point for iOS]]></title>
            <link>https://juanlandy.medium.com/apple-approves-first-game-with-integrated-lightning-payments-a-turning-point-for-ios-e3b5575bd8f0?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3b5575bd8f0</guid>
            <category><![CDATA[app-store]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[btc]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[bitcoin]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Sat, 12 Jul 2025 18:58:13 GMT</pubDate>
            <atom:updated>2025-07-12T18:58:13.037Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/696/1*irb8nFFnC57w-qlU9Immwg.jpeg" /><figcaption>Apple approves the first iOS game with Bitcoin lightning payments.</figcaption></figure><p>As an iOS developer since 2012, I’ve watched the App Store evolve from a tightly controlled environment into an increasingly open ecosystem for innovation and monetization. What just happened with <strong>SaruTobi</strong> — and its integration of Lightning payments via <strong>ZBD</strong> — isn’t just newsworthy; it’s foundational for mobile Web3 within the Apple ecosystem.</p><p>Apple has officially <strong>approved the first iOS game to implement in-app purchases using Bitcoin’s Lightning Network directly within the app</strong>, without requiring external wallets or browser-based redirects. From a technical standpoint, this kind of integration would have been unthinkable just a couple of years ago.</p><p>Originally launched in 2013, SaruTobi is now back in the App Store with a completely rearchitected payment flow. Players can now purchase power-ups and earn in-game rewards using <strong>satoshis</strong>, the smallest unit of <strong>Bitcoin</strong>. Through ZBD’s SDK, these microtransactions are <strong>instant, low-cost, and fully contained within the app’s runtime environment</strong>, offering a seamless UX without breaking Apple’s sandbox.</p><p>I tried myself a few years ago, after covid, to upload a <strong>Bitcoin</strong> wallet app in Europe, just for testing purposes and I got rejected by Apple because of regulations. I needed some permissions to run <strong>Bitcoin</strong> apps in every single country. Now it seems they have realized that no companie, state or corporation can stop <strong>Bitcoin</strong> adoption because is a protocol, like <a href="https://www.techtarget.com/searchnetworking/definition/TCP-IP"><strong>TCPIP</strong></a> is a protocol for internet.</p><h3><strong>📱 Why This Matters for iOS Developers</strong></h3><p>Apple has long been restrictive about alternative payment methods. This approval signals a <strong>subtle yet significant shift</strong> in how in-app economies might function going forward — particularly when it comes to decentralized and programmable value.</p><p>As developers, this means:</p><ul><li><strong>Real interoperability with cryptoassets within iOS’s sandbox</strong>, without violating App Store policies.</li><li><strong>New user engagement and retention models</strong>, where players can earn real (albeit fractional) value through gameplay and in-app actions.</li><li>A clear opportunity to <strong>rethink in-app economies</strong>, especially in emerging markets where traditional micro-transactions are less viable.</li></ul><h3>⚖️ Regulatory Context: The Rulebook Is Being Rewritten</h3><p>This isn’t happening in a vacuum. It follows increased regulatory pressure from the <strong>EU’s Digital Markets Act (DMA)</strong>, the ripple effects of the <a href="https://www.theverge.com/2024/5/28/24158911/apple-v-epic-evidentiary-hearing-app-store-payments"><strong>Epic vs. Apple</strong> case</a>, and a global push for <strong>greater openness in platform economies</strong>.</p><p>Apple isn’t fully opening the gates — but it’s evolving. And as a developer, that’s an invitation to explore new boundaries.</p><h3>In summary</h3><p>SaruTobi’s approval isn’t just a comeback for a nostalgic game. It’s a signal that the future of iOS monetization will be more decentralized, programmable, and directly tied to real-world value. For those of us who were writing Objective-C before Swift was even announced, this moment feels like another major inflection point.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e3b5575bd8f0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[iOS 18.2: A Leap into the Future of AI-Powered Mobile Experience]]></title>
            <link>https://juanlandy.medium.com/ios-18-2-a-leap-into-the-future-of-ai-powered-mobile-experience-1817ba8f1be7?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/1817ba8f1be7</guid>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[iphone]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Fri, 06 Dec 2024 12:04:05 GMT</pubDate>
            <atom:updated>2024-12-06T12:04:05.909Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zm0GJr9XgG0Enxa6OEkU4A.jpeg" /></figure><p><strong>Apple’s latest iOS update, 18.2, is a significant step forward, particularly in the realm of AI integration.</strong> This update brings a host of new features and improvements, many of which are powered by Apple’s advanced AI technology.</p><p><strong>Key Features and Improvements:</strong></p><ul><li><strong>Enhanced Siri with ChatGPT Integration:</strong> One of the most notable additions is the integration of ChatGPT into Siri. This allows users to ask more complex questions and receive more detailed and informative responses. Siri can now access real-time information and even share screenshots with ChatGPT to provide more accurate and relevant answers.</li><li><strong>Advanced Writing Tools:</strong> Building on the foundation laid in iOS 18.1, iOS 18.2 further expands the capabilities of Writing Tools. Users can now leverage AI-powered features like text summarization, tone adjustment, and creative writing assistance.</li><li><strong>Revolutionary Image Generation with Image Playground:</strong> This new app allows users to generate images based on text prompts, opening up a world of creative possibilities. While the images aren’t hyperrealistic, they offer a fun and innovative way to express ideas visually.</li><li><strong>Customizable Genmoji:</strong> With iOS 18.2, users can create personalized emojis, known as Genmoji, using AI. These custom emojis can be based on real people, objects, or even imaginary concepts, adding a unique touch to messaging.</li><li><strong>Enhanced Camera Control:</strong> The Camera Control on iPhone 16 models gains new features, including adjustable double-click speed and AE/AF Lock. Additionally, users can now activate the Camera app even when the screen is off, providing quick access to capture moments.</li><li><strong>Improved Performance and Stability:</strong> As with any major update, iOS 18.2 brings various performance optimizations and bug fixes to enhance the overall user experience.</li></ul><p><strong>The Future of AI-Powered Mobile Experiences</strong></p><p>iOS 18.2 showcases the potential of AI to revolutionize the way we interact with our devices. By seamlessly integrating AI into various aspects of the operating system, Apple is setting a new standard for mobile experiences. As AI technology continues to advance, we can expect even more innovative and exciting features in future iOS updates.</p><p><strong>What are your thoughts on the latest iOS 18.2 features? Are you excited about the AI integration? Let me know in the comments below!</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1817ba8f1be7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Key differences between Apple Intelligence vs ChatGPT]]></title>
            <link>https://mobileappcircular.com/key-differences-between-apple-intelligence-vs-chatgpt-8729446e4d07?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/8729446e4d07</guid>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[apple-intelligence]]></category>
            <category><![CDATA[wwdc]]></category>
            <category><![CDATA[openai]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Mon, 24 Jun 2024 21:55:57 GMT</pubDate>
            <atom:updated>2024-06-25T10:31:41.639Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ccvqNFQ61cN0D0nDCHoqrQ.jpeg" /><figcaption>Apple Intelligence logo</figcaption></figure><p>At its WWDC 24 keynote, Apple unveiled “<a href="https://www.apple.com/apple-intelligence/">Intelligence</a>,” its groundbreaking personal AI system. Built for iPhone, iPad,and Mac, Intelligence leverages on-device processing powered by Apple silicon. This translates to privacy-focused AI features that work seamlessly within the Apple ecosystem.</p><p>Intelligence personalizes your experience by understanding and creating language, taking actions across apps, and drawing from your context. Imagine smarter dictation, real-time translation in conversations, and proactive suggestions in Mail — all happening directly on your device.</p><p>If you want to lear more about on-device AI, you can take a look to <a href="https://www.deeplearning.ai/short-courses/introduction-to-on-device-ai/"><strong>Introduction to On-Device AI</strong></a> free course.</p><p>This innovative approach offers potential benefits like faster response times and enhanced privacy. While still in its early stages (exclusive to iOS 18, iPadOS 18, and the unreleased macOS Sequoia), Intelligence marks a significant step towards powerful on-device AI, shaping the future of how we interact with our Apple devices.</p><p>Here I’m going to list some key features that differentiate Apple Intelligence vs Chat GPT (<a href="https://openai.com/en-GB/">OpenAI</a>)</p><ol><li><strong>Approach to Processing:</strong></li></ol><p><strong>Apple Intelligence:</strong> Focuses on on-device processing. This means AI models run directly on your iPhone, iPad, or Mac, without relying on the cloud. This offers advantages like:</p><ul><li><strong>Privacy:</strong> User data stays on your device, potentially offering greater privacy compared to cloud-based processing.</li><li><strong>Offline Functionality:</strong> Certain features might work even without an internet connection, as the processing happens locally.</li><li><strong>Potentially Lower Latency:</strong> Processing on the device can be faster than sending data to the cloud and receiving a response.</li></ul><p><strong>ChatGPT:</strong> Relies on cloud-based processing. User requests are sent to powerful servers with large AI models, and the response is sent back to the user. This approach offers:</p><ul><li><strong>Potentially More Powerful AI:</strong> Cloud-based processing allows access to more powerful AI models that might not be feasible to run on individual devices due to resource limitations.</li><li><strong>Scalability:</strong> Cloud infrastructure can handle a larger volume of user requests compared to on-device processing.</li></ul><p><strong>2. Integration:</strong></p><ul><li><strong>Apple Intelligence:</strong> Integrates deeply with Apple’s ecosystem. It works seamlessly with existing Apple apps like Mail, Notes, and Safari, enhancing them with AI functionalities.</li><li><strong>ChatGPT:</strong> Primarily functions as a standalone chatbot or API. Integration with other applications might require additional development effort.</li></ul><p><strong>3. Focus:</strong></p><ul><li><strong>Apple Intelligence:</strong> Focuses on enhancing user experience within the Apple ecosystem. It provides features like improved dictation, smarter suggestions in Mail, and real-time translation.</li><li><strong>ChatGPT:</strong> Offers a broader range of capabilities beyond user experience enhancement. It can be used for tasks like creative text generation, code writing, and translation in various contexts.</li></ul><p><strong>4. Availability:</strong></p><ul><li><strong>Apple Intelligence:</strong> Currently in its initial stages and is exclusive to Apple devices running iOS 18, iPadOS 18, and macOS Sequoia (not yet publicly released).</li><li><strong>ChatGPT:</strong> More widely available through OpenAI’s API and can be integrated into various applications and platforms.</li></ul><p><strong>In summary:</strong></p><ul><li><strong>Choose Apple Intelligence</strong> if you prioritize privacy, offline functionality, and a seamless experience within the Apple ecosystem.</li><li><strong>Choose ChatGPT</strong> if you need a more powerful AI with broader capabilities and wider availability.</li></ul><p>The “better” choice depends on your specific needs and priorities. Both Apple Intelligence and ChatGPT represent advancements in on-device and cloud-based AI, respectively. As these technologies evolve, we can expect them to offer even more powerful and versatile functionalities.</p><p>If you want to learn more about AI, dont forget to take a look to <a href="https://www.deeplearning.ai/courses/">DeepLearning free courses</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8729446e4d07" width="1" height="1" alt=""><hr><p><a href="https://mobileappcircular.com/key-differences-between-apple-intelligence-vs-chatgpt-8729446e4d07">Key differences between Apple Intelligence vs ChatGPT</a> was originally published in <a href="https://mobileappcircular.com">Mobile App Circular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git Branching model for Mobile app development ]]></title>
            <link>https://mobileappcircular.com/git-branching-model-for-mobile-app-development-f38c63fd2f8f?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/f38c63fd2f8f</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[mobile]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Thu, 15 Jun 2023 21:19:57 GMT</pubDate>
            <atom:updated>2023-06-16T08:45:02.690Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*7BvgySl3aAFrCrOayWNMVQ.jpeg" /></figure><p>When I used to develop my firsts mobile apps back then in 2011 using Xcode and Objective-C, I was the only one in my University class room working in this technology. At that time, as a sole developer, there was no necessity to include git in my iOS projects, but when I had to work in bigger projects with multiple developers in remote locations, Git became a mandatory part of all mobile app projects.</p><p>In this post I’ll explain what is Git, GitFlow and why its important to integrate it into your Mobile App Projects.</p><h4>What is Git?</h4><p>Git, in the context of mobile software development, is a distributed version control system that is widely used to manage source code, track changes, and facilitate collaboration among developers. It is a fundamental tool in the development process, allowing teams to work on mobile applications efficiently and effectively.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*Xk69IP9Ud27_P96E" /><figcaption>Photo by <a href="https://unsplash.com/@yancymin?utm_source=medium&amp;utm_medium=referral">Yancy Min</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure><h4>What is GitFlow?</h4><p>GitFlow is a widely adopted branching model and workflow that offers a structured approach to version control and collaboration in mobile software development. It provides a robust framework for managing and organizing code changes, facilitating team collaboration, and ensuring the stability and quality of mobile applications.</p><p>In the context of mobile software development, GitFlow enables developers to work on different features, bug fixes, and releases concurrently while maintaining a clear and controlled development process. It leverages the power of Git, a distributed version control system, to streamline the development lifecycle and support efficient collaboration among team members.</p><p>Key Concepts of GitFlow:</p><ol><li>Branching Model: GitFlow employs a branching model that consists of two main branches — master and develop. The master branch represents the stable and production-ready code, while the develop branch serves as the main development branch where new features are integrated.</li><li>Feature Branches: When working on a new feature or enhancement, developers create feature branches branching off from the develop branch. These branches are dedicated to specific tasks, enabling developers to work on features independently without affecting the main codebase.</li><li>Release Branches: Once the development of new features is complete, a release branch is created from the develop branch to prepare for a new release. Bug fixes, documentation updates, and final testing take place in this branch before merging into the master branch.</li><li>Hotfix Branches: In the event of critical bugs or issues discovered in the production environment, hotfix branches are created from the master branch. These branches allow for quick fixes without disturbing ongoing development on the develop branch.</li></ol><h4>Benefits of GitFlow in Mobile Software Development:</h4><ol><li>Clear Code Isolation: GitFlow promotes isolation of different features, making it easier to manage and merge code changes without introducing conflicts or breaking the existing codebase.</li><li>Seamless Collaboration: By utilizing feature branches, GitFlow allows team members to work on different features simultaneously. This parallel development approach enhances collaboration and accelerates the delivery of new features.</li><li>Version Control: GitFlow provides a reliable version control system, allowing developers to easily track changes, revert to previous versions if needed, and maintain a well-documented history of the project.</li><li>Stability and Quality Assurance: With the introduction of release branches and thorough testing before merging into the master branch, GitFlow ensures the stability and quality of the software before it reaches the production environment.</li><li>Flexibility and Scalability: GitFlow is highly adaptable and scalable, making it suitable for both small and large mobile development teams. It provides a structured workflow that accommodates the complexity of mobile app development projects.</li></ol><h4>GitFlow example</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/692/1*y33BV7uFEbG6016cVm9ZGQ.png" /><figcaption>GitFlow diagram</figcaption></figure><p>In this example we have 2 main branches: Master and Develop</p><h4>Master Branch.</h4><p>In Git, the “master” branch is the default and primary branch in a repository. It serves as the main branch that represents the stable and production-ready version of the codebase. The master branch typically contains the latest release or the most up-to-date version of the project.</p><p>Key Characteristics of the Master Branch:</p><ol><li>Production-Ready Code: The master branch is intended to hold the code that is considered stable, tested, and ready for deployment. It represents the version of the codebase that is expected to be in a state suitable for production use.</li><li>Release Tagging: When a significant milestone or release is achieved in the project, developers often create a “tag” on the master branch to mark that specific version. These tags serve as a reference point, allowing easy access to specific releases in the repository’s history.</li><li>Restricted Direct Commit: It is generally recommended to enforce a code review process and restrict direct commits to the master branch. This helps maintain code quality, consistency, and collaboration by ensuring that changes undergo thorough review before being merged into the main branch.</li><li>Continuous Integration/Continuous Delivery (CI/CD): The master branch often plays a crucial role in CI/CD workflows. It serves as the source for automated build and deployment processes, ensuring that the latest stable version of the application is deployed to the production environment.</li></ol><p>Note: It’s worth mentioning that the use of the term “master” for the primary branch has received scrutiny due to potential racial connotations. As a result, many development communities and platforms have started transitioning to alternative branch names, such as “main” or “default,” to promote inclusivity and eliminate any unintended associations.</p><h4>Develop Branch</h4><p>In Git, the “develop” branch is a common branch used in the GitFlow workflow and other branching models. It serves as the main branch for ongoing development, integration, and collaboration among team members. The develop branch acts as a staging area where new features, bug fixes, and other changes are integrated before being merged into the master branch.</p><p>Key Characteristics of the Develop Branch:</p><ol><li>Ongoing Development: The develop branch is where most of the active development takes place. It contains the latest code changes and serves as a workspace for developers to collaborate on new features, enhancements, and bug fixes.</li><li>Feature Integration: Developers create feature branches branching off from the develop branch. Each feature branch represents a specific task or feature being developed independently. Once a feature is completed, it is merged back into the develop branch for integration with other features.</li><li>Continuous Integration: The develop branch is often associated with continuous integration (CI) practices. CI involves automatically building and testing the code whenever changes are pushed to the develop branch. This ensures early detection of integration issues and helps maintain code quality and stability.</li><li>Preparing for Releases: The develop branch is where code changes are accumulated and prepared for future releases. It undergoes rigorous testing, bug fixing, and quality assurance before creating release branches for specific releases or versions.</li><li>Code Review and Collaboration: The develop branch facilitates code review processes, where team members review each other’s code changes before merging them into the branch. This promotes collaboration, knowledge sharing, and adherence to coding standards within the development team.</li><li>Integration Testing: Integration testing is commonly performed on the develop branch to validate the compatibility and functionality of the integrated code changes. This ensures that different features and components work together as expected before being merged into the main branch.</li><li>Stable but Not Production-Ready: While the develop branch is expected to be relatively stable, it is not considered production-ready on its own. It serves as an intermediate stage before merging into the master branch, where the production-ready code resides.</li></ol><p>By utilizing the develop branch in Git, development teams can maintain a controlled and structured workflow, facilitate collaboration, and ensure that code changes are thoroughly tested and integrated before reaching the production environment</p><h4>Supporting branches</h4><p>Next to the main branches master and develop, our development model uses a variety of supporting branches to aid parallel development between team members, ease tracking of features, prepare for production releases and to assist in quickly fixing live production problems. Unlike the main branches, these branches always have a limited life time, since they will be removed eventually.</p><p>The different types of branches we can use are: feature branches, release branches and hotfixes.</p><h4>Feature branch</h4><p>In Git, a feature branch is a separate branch created from a main branch (such as develop or master, in our diagram its coming from develop) that is dedicated to developing a specific feature or implementing a particular task. Feature branches allow developers to work on new features or changes independently without affecting the main codebase. They promote isolation, parallel development, and collaboration within a development team.</p><p>Key Characteristics of Feature Branches:</p><ol><li>Isolation of Work: Feature branches provide a dedicated space for developers to work on specific features or tasks. Each feature branch is independent of the main branch, allowing developers to make changes and experiment without impacting the stability of the main codebase.</li><li>Parallel Development: Feature branches enable multiple team members to work on different features simultaneously. This parallel development approach accelerates the development process and allows for efficient utilization of resources within the team.</li><li>Code Review and Collaboration: Feature branches facilitate code review processes, where team members review and provide feedback on each other’s code changes. This promotes collaboration, knowledge sharing, and helps maintain code quality and adherence to coding standards.</li><li>Testing and Bug Fixing: Developers can perform testing and bug fixing within their feature branches, ensuring that the new feature or task meets the desired requirements and quality standards before merging it into the main branch.</li><li>Iterative Development: Feature branches support an iterative development approach. Developers can make incremental changes and commit them to the feature branch, enabling them to iterate and refine the implementation until the feature is considered complete.</li><li>Merge into the Main Branch: Once the feature development is completed and the code changes in the feature branch have been reviewed and tested, the feature branch is merged back into the main branch (e.g., develop or master) to incorporate the new functionality into the application.</li><li>Cleanup and Branch Deletion: After merging a feature branch into the main branch, it is common practice to delete the feature branch to keep the repository clean and avoid clutter. This helps maintain a clear history of the codebase and reduces the chances of confusion or conflicts in the future.</li></ol><p>Using feature branches in Git promotes a structured and organized development process, enabling developers to work on features independently, collaborate effectively, and maintain a clean and stable main branch that represents the production-ready code.</p><p><strong>According to our diagram, feature branches may branch off from develop and must merge back into develop.</strong></p><blockquote>Creating a feature branch.</blockquote><p>When starting work on a new feature, branch off from the develop branch with the following command:</p><pre>git checkout -b myfeature develop<br>//Switched to a new branch &quot;myfeature&quot;</pre><blockquote>Incorporating a finished feature on develop:</blockquote><pre>$ git checkout develop<br>//Switched to branch &#39;develop&#39;<br><br>$ git merge --no-ff myfeature<br>//Updating ea1b82a..05e9557<br>//(Summary of changes)<br><br>$ git branch -d myfeature<br>//Deleted branch myfeature (was 05e9557).<br><br>$ git push origin develop</pre><h4>Release branch</h4><p>In Git, a release branch is a branch created from a main branch (such as develop) to prepare for a specific release or version of a software project. Release branches serve as a dedicated space for finalizing and stabilizing the codebase before it is deployed to production or made available to end-users.</p><p>Key Characteristics of Release Branches:</p><ol><li>Release Preparation: Release branches are created to isolate the codebase for a specific release. They provide a controlled environment where final testing, bug fixing, and other release-related activities can take place.</li><li>Stability and Bug Fixes: Release branches are typically used for ensuring stability and addressing any critical bugs or issues discovered during the testing phase. Only essential bug fixes and necessary changes are made on the release branch to avoid introducing new features or risky modifications.</li><li>Documentation and Release Notes: Release branches are an ideal place to update documentation, release notes, and other relevant information related to the specific release. It allows for the inclusion of accurate and up-to-date information about the changes and improvements made in that release.</li><li>Testing and Quality Assurance: Release branches undergo thorough testing, including regression testing and user acceptance testing, to ensure the quality and reliability of the codebase before it is released. This helps identify and address any potential issues or regressions that may have occurred during development.</li><li>Code Freeze: Release branches typically observe a code freeze period, during which no new features are added, and only critical bug fixes are allowed. This freeze ensures that the codebase remains stable and focused on finalizing the release without the introduction of additional changes that may cause complications.</li><li>Release Deployment: Once the release branch is deemed stable and ready for deployment, it is merged into the main branch (e.g., master) to incorporate the release changes into the production-ready codebase. From there, the release can be packaged, deployed, or distributed to end-users.</li><li>Lifecycle of Release Branches: After the release branch is merged into the main branch, it may be deleted to maintain a clean and concise repository history. However, it is often recommended to retain a record of release branches or create tags associated with specific releases for reference and auditing purposes.</li></ol><p>Release branches in Git help ensure that the codebase is thoroughly tested, stabilized, and documented before reaching the production environment. They provide a controlled space for finalizing releases and assist in maintaining a reliable and high-quality software product.</p><p><strong>According to our diagram, release branches should branch off from developer and must merge back into develop and master.</strong></p><blockquote>Creating a release branch</blockquote><pre>$ git checkout -b release-1.2 develop<br>//Switched to a new branch &quot;release-1.2&quot;<br><br>$ git commit -a -m &quot;Release v1.2&quot;<br>//[release-1.2 74d9424] version number to 1.2<br>//1 files changed, 1 insertions(+), 1 deletions(-)</pre><blockquote>Finishing a release branch</blockquote><pre>$ git checkout master<br>//Switched to branch &#39;master&#39;<br><br>$ git merge --no-ff release-1.2<br>//Merge made by recursive.<br>//(Summary of changes)<br><br>$ git tag -a 1.2<br>//tag the branch<br><br>$ git checkout develop<br>//Switched to branch &#39;develop&#39;<br><br>$ git merge --no-ff release-1.2<br>//Merge made by recursive.<br>//(Summary of changes)<br><br>$ git branch -d release-1.2<br>//Deleted branch release-1.2 (was ff452fe).</pre><h4>Hotfix branch</h4><p>In Git, a hotfix branch is a branch created from the main branch (typically master) to address critical issues or bugs discovered in the production environment. Hotfix branches allow developers to quickly develop and deploy emergency fixes without disrupting ongoing development on other branches.</p><p>Key Characteristics of Hotfix Branches:</p><ol><li>Addressing Critical Issues: Hotfix branches are specifically created to tackle urgent and critical issues found in the production environment. These issues may include severe bugs, security vulnerabilities, or other problems that require immediate attention and cannot wait for the regular development cycle.</li><li>Isolated Development: Hotfix branches provide a separate space for developers to work on fixing the identified issue. This isolation ensures that the main codebase remains stable and unaffected by ongoing development on other branches.</li><li>Expedited Development and Testing: Hotfix branches focus solely on resolving the critical issue at hand, allowing for faster development and testing cycles. The scope of changes in a hotfix branch is limited to addressing the specific problem, minimizing the chances of introducing unintended side effects.</li><li>Minimal Changes: Hotfix branches generally avoid introducing new features or significant modifications to the codebase. The focus is on fixing the problem as quickly as possible and keeping the changes minimal to reduce the risk of introducing new issues.</li><li>Merging into Main Branches: Once the hotfix is developed, tested, and validated, it is merged back into the main branch (e.g., master) to incorporate the fix into the production-ready codebase. From there, the fix can be deployed to the production environment to address the critical issue.</li><li>Version Compatibility: Hotfix branches may need to consider version compatibility if the issue affects multiple versions of the software. In such cases, separate hotfix branches may be created for different affected versions to ensure the fix is applied appropriately.</li><li>Cleanup and Branch Deletion: After the hotfix is successfully merged into the main branch and deployed, the hotfix branch is typically deleted to maintain a clean repository history and avoid unnecessary clutter.</li></ol><p>Hotfix branches in Git allow development teams to respond quickly to critical issues and provide timely fixes to the production environment. By isolating the development of hotfixes, teams can address urgent problems while minimizing disruptions to ongoing development efforts.</p><p><strong>According to our diagram, hotfix branches should branch off from master and must merge back into develop and master.</strong></p><blockquote>Creating the hotfix branch</blockquote><pre>$ git checkout -b hotfix-1.2.1 master<br>//Switched to a new branch &quot;hotfix-1.2.1&quot;<br>//Don’t forget to bump the version number after branching off!<br><br>$ git commit -a -m &quot;New version number to 1.2.1&quot;<br>//[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1<br>//1 files changed, 1 insertions(+), 1 dele</pre><p>Then, fix the bug and commit the fix in one or more separate commits.</p><pre>$ git commit -m &quot;Fixed severe production problem&quot;<br>//[hotfix-1.2.1 abbe5d6] Fixed severe production problem<br>//5 files changed, 32 insertions(+), 17 deletions(-)</pre><blockquote>Finishing a hotfix branch</blockquote><pre>$ git checkout master<br>//Switched to branch &#39;master&#39;<br><br>$ git merge --no-ff hotfix-1.2.1<br>//Merge made by recursive.<br>//(Summary of changes)<br><br>$ git tag -a 1.2.1<br>//create a tag for the branch<br><br>$ git checkout develop<br>//Switched to branch &#39;develop&#39;<br><br>$ git merge --no-ff hotfix-1.2.1<br>//Merge made by recursive.<br>//(Summary of changes)<br></pre><p>Finally, remove the temporary branch:</p><pre>$ git branch -d hotfix-1.2.1<br>//Deleted branch hotfix-1.2.1 (was abbe5d6).</pre><h4>Conclusion</h4><p>By following the GitFlow methodology, mobile software development teams can streamline their development process, enhance collaboration, and deliver high-quality mobile applications in a controlled and efficient manner.</p><p>I hope you have enjoyed this blog. If you’ve any questions, comments or suggestions please hit me up on <a href="https://twitter.com/jlandyr">Twitter</a>, <a href="https://www.linkedin.com/in/jlandyr/">Linkedin</a> or <a href="http://linktr.ee/jlandyr">Linktr.ee</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f38c63fd2f8f" width="1" height="1" alt=""><hr><p><a href="https://mobileappcircular.com/git-branching-model-for-mobile-app-development-f38c63fd2f8f">Git Branching model for Mobile app development 📲</a> was originally published in <a href="https://mobileappcircular.com">Mobile App Circular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to generate passive income as a mobile developer? ]]></title>
            <link>https://mobileappcircular.com/how-to-generate-passive-income-as-a-mobile-developer-9c2b0920723d?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/9c2b0920723d</guid>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[passive-income]]></category>
            <category><![CDATA[android-app-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[financial-freedom]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Thu, 18 May 2023 18:25:36 GMT</pubDate>
            <atom:updated>2023-05-23T15:49:10.834Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*njDSrhteoI0Ve-Z108lzSA.jpeg" /><figcaption>Image generated by Artificial Intelligence (Lexica)</figcaption></figure><h3>What is passive income?</h3><p>Passive income refers to the earnings generated with minimal effort or ongoing involvement after the initial setup or investment. It is income that continues to be earned even when you’re not actively working. Unlike active income, which requires consistent time and effort, passive income allows you to earn money on an ongoing basis without constant direct involvement.</p><p>Passive income can be generated through various sources such as investments, real estate rentals, online businesses, royalties, or intellectual property. The key characteristic of passive income is that it continues to generate revenue even when you’re not actively working on it, giving you more flexibility and the potential to earn money while pursuing other ventures or enjoying your free time.</p><p>It’s important to note that creating a passive income stream often requires an initial investment of time, money, or both, to set up the income-generating asset or system. Once established, it can provide a source of income that is less dependent on traditional employment or active labor, offering greater financial freedom and flexibility.</p><h3>Why do I want passive income as mobile developer?</h3><p>I consider that, as software developers we have one of the best professions at this moment, because after a pandemia, remote work and software development has been increasing exponentially, allowing us to work from remote like never before. And actually it was during pandemia when I finished some books about Bitcoin and I learned a new concept: <a href="https://bitcoinmagazine.com/culture/bitcoin-is-a-movement-for-financial-freedom">financial freedom</a>, and one of the ways to archive financial freedom also is generating passive income even when you sleep, not only during your working time at the office for a salary at the end of the month.</p><p>So I hope you realice that most of the professions out there can’t do that, for example, most of doctors have to be at the hospital to help patients, chefs can’t cook in remote, cleaners neither, etc. So, as Will.I.Am said <a href="https://youtu.be/nKIu9yen5nc?t=301">“coders are the new rockstars”</a>, so why not to take advantage of that? 🤔</p><h3>Ideas to generate passive income.</h3><p>As a mobile software developer, there are several ways you can earn passive income online. Here are a just a few ideas and I’m sure depending on your area of software expertise you would have more ideas:</p><p>1. Create and sell mobile apps: Develop useful mobile applications and release them on popular app stores. You can generate income through app sales, in-app purchases, or advertisements within the app.</p><p>2. Develop and sell app templates: Design and build mobile app templates that can be customized and used by other developers. Platforms like CodeCanyon allow you to sell your templates to a wide audience.</p><p>3. In-app advertising: If you have an existing app with a significant user base, consider integrating advertisements. Ad networks like Google AdMob or Facebook Audience Network can help you monetize your app and earn passive income based on ad impressions and clicks. Actually, this is how I get some revenue in one of my apps about football championships in Latam: <a href="http://linktr.ee/futbolecuadorapp">futbolecuador app</a></p><p>4. Create premium content or features: Offer additional premium content or features within your app that users can purchase. This can include exclusive in-app items, access to advanced functionality, or subscription-based services.</p><p>5. Affiliate marketing: Promote relevant products or services within your app and earn a commission for each sale or referral. Research affiliate programs related to your app’s niche and integrate affiliate links or banners.</p><p>6. Mobile app reskinning: Purchase existing app templates or source code and modify them with new designs and themes. Reskinned apps can be published under your own brand and generate revenue through downloads, in-app purchases, or advertisements.</p><p>7. Provide app development services: Offer your expertise as a mobile app developer by freelancing or taking on client projects. This can provide a steady stream of income as you work on various projects.</p><h3>Summary</h3><p>Remember, earning passive income requires initial effort to create and market your products or services. It’s important to choose ideas that align with your skills, interests, and target audience.</p><p>I hope you have enjoyed this blog. If you’ve any questions, comments or suggestions please hit me up on <a href="https://twitter.com/jlandyr">Twitter</a>, <a href="https://www.linkedin.com/in/jlandyr/">Linkedin</a> or <a href="http://linktr.ee/jlandyr">Linktr.ee</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9c2b0920723d" width="1" height="1" alt=""><hr><p><a href="https://mobileappcircular.com/how-to-generate-passive-income-as-a-mobile-developer-9c2b0920723d">How to generate passive income as a mobile developer? 📲💰</a> was originally published in <a href="https://mobileappcircular.com">Mobile App Circular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to simulate network conditions on iOS and macOS ? ]]></title>
            <link>https://mobileappcircular.com/how-to-simulate-network-conditions-on-ios-and-macos-c37db9d79f57?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/c37db9d79f57</guid>
            <category><![CDATA[mobile]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[xcode]]></category>
            <category><![CDATA[apple]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Wed, 10 May 2023 16:45:36 GMT</pubDate>
            <atom:updated>2023-05-12T09:09:19.102Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to simulate network conditions on iOS and macOS ? 🤔</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*IwzTPI2OezsoNaDNLylYpg.jpeg" /><figcaption>Image generated by Artificial Intelligence (Lexica.art)</figcaption></figure><p>As a mobile developers, most of the time we just forget to test apps in real environment&#39;s like poor network conditions (EDGE, GPRS, 3G) because our MacBooks are always connected to reliable Wi-Fi or Ethernet connections at home or office, and trust me, this happened to me a lot of times and it will blow your mind when you test your app in this scenarios, including 3G.</p><p>In this article I’ll show you how to test your apps on the simulator or on your real device using Network Link Conditioner, an additional tool that you can install on Xcode.</p><p>But first lets talk a little bit about Network Link Conditioner</p><h3>What is Network Link Conditioner?</h3><p>The Network Link Conditioner (NLC) is a tool that comes with Xcode, the integrated development environment for macOS. It allows developers to simulate various network conditions such as latency, packet loss, and limited bandwidth to test how their applications perform under different network conditions.</p><p>NLC provides a graphical user interface (GUI) that allows users to create custom profiles that simulate network conditions such as 3G, EDGE, DSL, and Wi-Fi. The tool also includes a set of pre-configured profiles that simulate different network conditions, including a very poor network connection with high latency and packet loss.</p><p>Using NLC, developers can test their applications under different network conditions without leaving their development environment. This tool is particularly useful for developers who need to test their applications under poor network conditions or for those who need to optimize their applications for low-bandwidth or high-latency networks.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9MbSfUDMqzAI0P-F-xta1w.jpeg" /><figcaption>Network Link Conditioner Settings</figcaption></figure><h3>How to install Network Link Conditioner?</h3><p>To install the Network Link Conditioner on macOS, you will need to have Xcode installed on your system. Xcode is a free development environment provided by Apple, which includes the Network Link Conditioner as one of its developer tools.</p><p>Here are the steps to install the Network Link Conditioner on macOS:</p><ol><li>Open the App Store on your Mac and search for “Xcode.”</li><li>Click on the “Get” button to download and install Xcode on your Mac.</li><li>Once Xcode is installed, launch it.</li><li>From the Xcode menu, go to “Open Developer Tool” and then select “More Developer Tools.”</li><li>This will take you to the Apple Developer Downloads page. Search for “<a href="https://developer.apple.com/download/all/?q=additional%20tools">Additional Tools for Xcode</a>” and download the version that matches your Xcode version.</li><li>After downloading the Additional Tools, locate the file “Hardware IO Tools for Xcode” and double-click it to extract its contents.</li><li>Open the extracted folder, then double-click on the “Network Link Conditioner.prefPane” file to install it.</li><li>Follow the prompts to complete the installation process.</li></ol><h3>How to simulate a Network Connection using NLC on macOS?</h3><p>Once you have installed the Network Link Conditioner, you can access it from the System Preferences pane on your Mac, under the “Other” section. From there, you can configure the network conditions you want to simulate.</p><ol><li>Select a profile from the “Profile” drop-down menu, such as “3G” or “100% Loss.”</li><li>Click on the “Turn On” button to enable the profile.</li></ol><p>You can also create a custom profile by clicking on the “+” button in the bottom left corner and configuring the following settings:</p><ul><li>Bandwidth: The maximum bandwidth allowed for the simulated network connection.</li><li>Delay: The delay time before packets are transmitted over the simulated network connection.</li><li>Jitter: The variation in the delay time between packets.</li><li>Packet Loss: The percentage of packets that are lost over the simulated network connection.</li></ul><p>Once you have configured the settings for your custom profile, you can save it by clicking on the “Save” button.</p><p>Now, with a profile selected, you can just run the app from Xcode on your physical device or simulator using one of the NLC profiles and test your app under different conditions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/892/1*y_JzUOsB6AGShjjVMXsa1Q.png" /></figure><h3>How to simulate a Network Connection using NLC on iOS?</h3><p>But, what if you want to use NLC directly on your iPhone? You can do it if you have the “Developer menu” active in Settings.</p><p>Go to Settings, Developer, Network Link Conditioner, choose the profile you want to test and enable it. Don’t forget to deactivate the selected profile once you’ve finished testing your apps 😉.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/828/1*T9zTQLGOJUJAGb3--UYo4g.jpeg" /><figcaption>NLC settings on iOS 16</figcaption></figure><h3>Summary.</h3><p>In summary, using the Network Link Conditioner tool on macOS, you can simulate different network conditions to test how your applications perform under various network scenarios.</p><p>I hope you have enjoyed this blog. If you’ve any questions, comments or suggestions please hit me up on <a href="https://twitter.com/jlandyr">Twitter</a>, <a href="https://www.linkedin.com/in/jlandyr/">Linkedin</a> or <a href="http://linktr.ee/jlandyr">Linktr.ee</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c37db9d79f57" width="1" height="1" alt=""><hr><p><a href="https://mobileappcircular.com/how-to-simulate-network-conditions-on-ios-and-macos-c37db9d79f57">How to simulate network conditions on iOS and macOS ? 🤔</a> was originally published in <a href="https://mobileappcircular.com">Mobile App Circular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Xcode shortcuts that every iOS Developer should know]]></title>
            <link>https://mobileappcircular.com/xcode-shortcuts-that-every-ios-developer-should-know-3e8d14c36546?source=rss-d54527023e65------2</link>
            <guid isPermaLink="false">https://medium.com/p/3e8d14c36546</guid>
            <category><![CDATA[xcode]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[mobile-app-developers]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <dc:creator><![CDATA[Juan Sebastián Landy]]></dc:creator>
            <pubDate>Tue, 25 Apr 2023 19:22:25 GMT</pubDate>
            <atom:updated>2023-04-26T04:24:30.320Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3S4aQExWVHL7hJUfFmDTaQ.jpeg" /><figcaption>Image generated by Artificial Intelligence (Lexica)</figcaption></figure><p><a href="https://developer.apple.com/xcode/">Xcode</a> is a powerful integrated development environment (IDE) developed by Apple for creating software applications for macOS, iOS, iPadOS, watchOS, and tvOS. It provides a comprehensive suite of tools and features to help developers design, build, and debug their applications. Xcode includes a code editor, a graphical user interface (GUI) builder, a debugger, performance analysis tools, and a wide range of frameworks and libraries that make it easier to build complex applications.</p><p>With Xcode, developers can create apps using a variety of programming languages, including Swift, Objective-C, and C++. The IDE comes with a built-in source code editor that offers features such as syntax highlighting, auto-completion, and code folding. The GUI builder, Interface Builder, allows developers to create and design user interfaces visually, without writing code.</p><p>Xcode also includes a suite of debugging tools that make it easy to find and fix bugs in your code. It offers features such as breakpoints, which allow developers to pause the execution of their code at a specific line to inspect variables and debug the application. Xcode also offers tools for analyzing application performance, identifying memory leaks, and optimizing code.</p><p>Overall, Xcode is a powerful tool that helps developers build high-quality, robust, and scalable applications for Apple’s various operating systems.</p><p>If you’re working everyday with Xcode, let me tell you that keyboard shortcuts will be you best friends when developing apps for the Apple enviroment.</p><h3>Why are keyboard shortcuts hepful?</h3><p>Keyboard shortcuts are useful for several reasons:</p><ol><li>Efficiency: Keyboard shortcuts can save a lot of time by allowing you to quickly perform tasks without having to move your hands away from the keyboard to use the mouse or touchpad. This can be especially helpful for repetitive tasks or when working with large amounts of data.</li><li>Accuracy: Keyboard shortcuts can also increase accuracy by reducing the likelihood of errors that can occur when using a mouse or touchpad. With keyboard shortcuts, you can perform tasks more quickly and accurately, which can lead to a more efficient workflow.</li><li>Accessibility: Keyboard shortcuts can be helpful for individuals who have difficulty using a mouse or touchpad due to physical limitations. Keyboard shortcuts can provide an alternative means of performing tasks that might otherwise be difficult or impossible.</li><li>Consistency: Keyboard shortcuts can help ensure consistency across applications and platforms. Many applications use similar or identical keyboard shortcuts for common tasks, which can make it easier to switch between applications and platforms without having to learn new ways of doing things.</li></ol><h3>Xcode shortcuts</h3><p>Here are some useful keyboard shortcuts in Xcode:</p><ol><li>Command + N: Create a new file, project, workspace, or playground.</li><li>Command + S: Save the current file.</li><li>Command + Shift + O: Open a file quickly by typing its name.</li><li>Command + Shift + J: Reveal the current file in the Project Navigator. <em>(this is one of my favorites 😉)</em></li><li>Command + Shift + A: Open the Assistant Editor.</li><li>Command + R: Run the current scheme.</li><li>Command + B: Build the current scheme.</li><li>Command + . (period): Stop the current task.</li><li>Command + Shift + K: Clean the project.</li><li>Command + Shift + Y: Show or hide the Debug area.</li><li>Command + Option + Enter: Enter or exit full-screen mode.</li><li>Command + /: Comment or uncomment selected lines of code.</li><li>Control + Command + Up/Down arrow: Move between header and implementation files.</li><li>Control + Command + Left/Right arrow: Move between open tabs.</li><li>Control + Command + Shift + Left/Right arrow: Move between editor and assistant editor.</li><li>Shift + Command + [ : Gives extra indentation space for the selected code.</li><li>Shift + Command + ]: Delete extra indentation space for the selected code.</li></ol><p>These are just a few of the many keyboard shortcuts available in Xcode. By learning and using keyboard shortcuts, you can speed up your workflow and become a more productive Xcode user.</p><h3>Conclusion.</h3><p>Overall, keyboard shortcuts can make you a more efficient and productive computer user by allowing you to quickly perform tasks without having to rely on a mouse or touchpad. By learning and using keyboard shortcuts, you can save time, increase accuracy, and reduce the risk of errors.</p><p>I hope you have enjoyed this blog. If you’ve any questions, comments or suggestions please hit me up on <a href="https://twitter.com/jlandyr">Twitter</a>, <a href="https://www.linkedin.com/in/jlandyr/">Linkedin</a> or <a href="http://linktr.ee/jlandyr">Linktr.ee</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3e8d14c36546" width="1" height="1" alt=""><hr><p><a href="https://mobileappcircular.com/xcode-shortcuts-that-every-ios-developer-should-know-3e8d14c36546">Xcode shortcuts that every iOS Developer should know</a> was originally published in <a href="https://mobileappcircular.com">Mobile App Circular</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>