<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Modern Architect]]></title><description><![CDATA[Sharing insights, strategies and tips for the Modern Software Architect.]]></description><link>https://www.maneshlad.com</link><image><url>https://substackcdn.com/image/fetch/$s_!n1N7!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png</url><title>The Modern Architect</title><link>https://www.maneshlad.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 04 May 2026 12:06:46 GMT</lastBuildDate><atom:link href="https://www.maneshlad.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Lad Digital, LLC, All Rights Reserved.]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[maneshlad@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[maneshlad@substack.com]]></itunes:email><itunes:name><![CDATA[Manesh Lad]]></itunes:name></itunes:owner><itunes:author><![CDATA[Manesh Lad]]></itunes:author><googleplay:owner><![CDATA[maneshlad@substack.com]]></googleplay:owner><googleplay:email><![CDATA[maneshlad@substack.com]]></googleplay:email><googleplay:author><![CDATA[Manesh Lad]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[The Modern Architect 10 - Mobile DevOps Blueprint]]></title><description><![CDATA[Stack: Mobile, Apple iOS, Google Android, DevOps]]></description><link>https://www.maneshlad.com/p/the-modern-architect-10-mobile-devops</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-10-mobile-devops</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Fri, 30 May 2025 20:39:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/829d93e0-d65c-4ba5-9fa5-a85222e77443_1024x1536.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the 10th edition of <em>The Modern Architect</em>. In this  issue, I&#8217;m excited to share a high-level blueprint for building <strong>robust Mobile DevOps pipelines</strong>&#8212;designed to streamline and automate mobile application delivery from code commit to app store release.</p><p>Mobile DevOps is no longer a luxury&#8212;it&#8217;s a necessity. As mobile development becomes more iterative and fast-paced, automating builds, tests, deployments, and feedback loops ensures consistent quality and faster time to market.</p><div><hr></div><h2><strong>&#128260;</strong></h2><h2><strong>Overview: Core Pipeline Stages</strong></h2><p>A well-structured Mobile DevOps pipeline typically flows through the following stages:</p><ul><li><p><strong>Prepare:</strong> Set up the build environment and artifacts.</p></li><li><p><strong>Quality:</strong> Assess code quality and maintainability.</p></li><li><p><strong>Build:</strong> Compile the app for multiple platforms.</p></li><li><p><strong>Test:</strong> Run automated and security tests.</p></li><li><p><strong>Deploy:</strong> Distribute builds to testing or production environments.</p></li><li><p><strong>Notify:</strong> Communicate pipeline results to relevant stakeholders.</p></li></ul><p>Each stage is designed to be modular and reusable across CI and release pipelines.</p><div><hr></div><h2><strong>&#127760;</strong></h2><h2><strong>Environment Strategy</strong></h2><p>Most mobile applications benefit from distinct environments to isolate stages of development and testing. These commonly include:</p><ul><li><p>dev: Active development environment</p></li><li><p>qa: Quality assurance and manual testing</p></li><li><p>stage: Pre-production validation and stakeholder demos</p></li><li><p>at: Automated testing environment (e.g., UI tests, load tests)</p></li><li><p>prod: Live production environment</p></li><li><p>prodcopy: Clone of production for debugging or data replication</p></li></ul><div><hr></div><h2><strong>&#129513;</strong></h2><h2><strong>Pipeline Inputs</strong></h2><p>The pipeline inputs vary slightly depending on the type of pipeline (CI vs. Release). Here&#8217;s how I typically approach them:</p><h3><strong>CI Pipeline Inputs</strong></h3><ul><li><p>repo: Source repository</p></li><li><p>branch: Usually the develop branch or feature branches</p></li><li><p>environment: Typically development</p></li></ul><h3><strong>Release Pipeline Inputs</strong></h3><ul><li><p>repo: Source repository</p></li><li><p>branch: Often main or release branches</p></li><li><p>commit: Specific commit hash (optional)</p></li><li><p>tag: Git tag used to version the release</p></li><li><p>environment: Target deployment environment (e.g., stage, prod)</p></li></ul><div><hr></div><h2><strong>&#128257;</strong></h2><h2><strong>Pipeline Types</strong></h2><h3><strong>Continuous Integration (CI) Pipeline</strong></h3><p>The CI pipeline is triggered on every commit to the develop branch or when a pull request is created. It ensures that new code changes are stable and do not break the build.</p><p><strong>Stages:</strong></p><ul><li><p>Prepare</p></li><li><p>Quality</p></li><li><p>Build</p></li><li><p>Test</p></li><li><p>Notify</p></li></ul><h3><strong>Release Pipeline</strong></h3><p>The release pipeline is triggered when preparing a build for a specific environment (e.g., stage, production). It includes all CI stages plus deployment steps.</p><p><strong>Stages:</strong></p><ul><li><p>Prepare</p></li><li><p>Quality</p></li><li><p>Build</p></li><li><p>Test</p></li><li><p>Deploy</p></li><li><p>Notify</p></li></ul><div><hr></div><h2><strong>&#129521;</strong></h2><h2><strong>Stage-by-Stage Breakdown</strong></h2><h3><strong>&#128295; Prepare</strong></h3><ul><li><p>Checkout code from Git</p></li><li><p>Download dependencies (e.g., CocoaPods, Gradle, npm)</p></li><li><p>Set app version and build numbers</p></li><li><p>Generate release notes from Git history (last two tags or since last tag)</p></li><li><p>Generate app icons for all platforms using a single base image</p></li><li><p>Generate splash screens for all devices from a unified image</p></li></ul><h3><strong>&#128737; Quality</strong></h3><ul><li><p>Run static code analysis (e.g., SwiftLint, ESLint)</p></li><li><p>Execute linters</p></li><li><p>Run unit tests</p></li><li><p>Generate code coverage reports</p></li></ul><h3><strong>&#127959; Build</strong></h3><ul><li><p>Build for iOS using Xcode</p></li><li><p>Build for Android using Gradle</p></li><li><p>Optionally build for web (e.g., React Native / Flutter web)</p></li><li><p>Handle code signing, certificates, and provisioning profiles</p></li></ul><h3><strong>&#128300; Test</strong></h3><ul><li><p>Execute UI tests in simulators/emulators</p></li><li><p>Run UI tests on physical devices (local or remote)</p></li><li><p>Perform cloud-based testing (e.g., Firebase Test Lab, BrowserStack)</p></li><li><p>Conduct security scans on compiled binaries</p></li></ul><h3><strong>&#128640; Deploy</strong></h3><ul><li><p>Upload builds to:</p><ul><li><p>Apple TestFlight</p></li><li><p>Google Play Console (internal/external tracks)</p></li></ul></li><li><p>Publish to app stores (App Store, Google Play)</p></li><li><p>Upload to internal artifact repositories (e.g., Artifactory)</p></li><li><p>Upload crash symbols to crash reporting tools (e.g., Firebase, Sentry)</p></li></ul><h3><strong>&#128227; Notify</strong></h3><ul><li><p>Post build results and artifacts to:</p><ul><li><p>Slack</p></li><li><p>Microsoft Teams</p></li></ul></li><li><p>Automatically generate and submit change requests (e.g., via ServiceNow)</p></li><li><p>Send summary emails to stakeholders</p></li></ul><p></p><h2><strong>&#129520; Tools of the Trade</strong></h2><p>There&#8217;s no one-size-fits-all solution&#8212;select tools that align with your team&#8217;s workflows, infrastructure, and platform requirements. Here are some of the most commonly used:</p><ul><li><p><strong>Xcode Cloud - </strong>Native iOS build automation</p></li><li><p><strong>Fastlane - </strong>Automates build, test, and release for both iOS and Android</p></li><li><p><strong>CircleCI / TravisCI - </strong>Cloud-based CI/CD platforms with mobile support</p></li><li><p><strong>Bitrise - </strong>Mobile-first CI/CD with strong third-party integrations</p></li><li><p><strong>GitHub Actions - </strong>CI/CD built directly into GitHub repos</p></li><li><p><strong>Azure DevOps - </strong>Enterprise-grade pipelines with mobile support</p></li><li><p><strong>Jenkins - </strong>Highly customizable CI/CD server</p></li><li><p><strong>App Center - </strong><em>Retired</em> &#8211; <a href="https://learn.microsoft.com/en-us/appcenter/retirement">See official notice</a></p></li></ul><h2><strong>&#129504; Final Thoughts</strong></h2><p>Mobile DevOps is a game-changer for modern development teams. When set up correctly, it transforms how apps are built, tested, and released&#8212;empowering teams to move faster without sacrificing quality or security.</p><p>As a Mobile Architect, your goal is to define and scale these systems to support continuous innovation and operational excellence.</p><p>Until next time, stay modern.</p><p>&#8212; <em>The Modern Architect</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/p/the-modern-architect-10-mobile-devops?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.maneshlad.com/p/the-modern-architect-10-mobile-devops?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #9 - 10 Must Reads for Mobile Architects]]></title><description><![CDATA[Stack: Mobile, iOS, Android]]></description><link>https://www.maneshlad.com/p/the-modern-architect-6-10-must-reads</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-6-10-must-reads</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Fri, 12 May 2023 00:42:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #6 edition of The Modern Architect newsletter.&nbsp; In this edition I&#8217;m going link to 10 articles that Mobile Architects should read, not in any particular order.</p><ol><li><p><a href="https://ios-factor.com">iOS-factor</a></p></li><li><p><a href="https://engineering.fb.com/2023/02/06/ios/facebook-ios-app-architecture/">The evolution of Facebook&#8217;s iOS app architecture</a></p></li><li><p><a href="https://backendless.com/flutter-vs-react-native-which-is-better-in-2023/">Flutter vs. React Native: Which is Better in 2023</a></p></li><li><p><a href="https://codewithandrea.com/articles/flutter-project-structure/">Flutter Project Structure: Feature-first or Layer-first?</a></p></li><li><p><a href="https://www.uber.com/blog/ubereats-react-native/">Powering UberEATS with React Native and Uber Engineering</a></p></li><li><p>Airbnb - <a href="https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c">React Native at Airbnb</a></p></li><li><p>Airbnb - <a href="https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838">React Native at Airbnb: The Technology</a></p></li><li><p>Airbnb - <a href="https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88">Building a Cross-Platform Mobile Team</a></p></li><li><p>Airbnb - <a href="https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a">Sunsetting React Native</a></p></li><li><p>Airbnb - <a href="https://medium.com/airbnb-engineering/whats-next-for-mobile-at-airbnb-5e71618576ab">What&#8217;s Next for Mobile at Airbnb</a></p></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.  You will also get a free copy of my iOS Development Quick Start Guide!</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #8 - Desk Setups]]></title><description><![CDATA[Stack: Tech, Desk, WFH]]></description><link>https://www.maneshlad.com/p/the-modern-architect-5-desk-setups</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-5-desk-setups</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Thu, 27 Apr 2023 00:17:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/jKaSBKxMBSs" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #5 edition of The Modern Architect newsletter.&nbsp; In this edition we going to talk about desk setups, with the proliferation of work from home dialing in your desk setup just might help you be more productive.</p><h2>The Desk</h2><p>Standing desks are all the rage, my recommend is to either get a 3 stage dual motor model or if you're on a budget manual crank model.  I find both to be pretty stable.  As far as tabletop I recommend getting one with at least a 30&#8221;  in depth with 60&#8221; x 30&#8221; being ideal.  This <a href="https://www.nytimes.com/wirecutter/reviews/best-standing-desk/">article</a> by the Wirecutter showcases some of the best standing desks on the market today.</p><p>I also suggest installing simple low cost pencil drawer under the table top to store away pens, pencils and other office accessories.  They come in multiple depths to suit how much space you have under the top.</p><ul><li><p><a href="https://www.amazon.com/dp/B07JJD4THL?ref=ppx_yo2ov_dt_b_product_details&amp;th=1">Mount-It! Under Desk Pencil Drawer - 12.2&#8221; Wide, 6&#8221; Deep</a></p><div id="youtube2-jKaSBKxMBSs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;jKaSBKxMBSs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/jKaSBKxMBSs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div></li><li><p><a href="https://www.amazon.com/dp/B086D8P9D1?ref=ppx_yo2ov_dt_b_product_details&amp;th=1">Mount-It! Large Under Desk Pencil Drawer - 21.25&#8221; Wide, 16&#8221; Deep</a></p><div id="youtube2-kbU6ysrzcps" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;kbU6ysrzcps&quot;,&quot;startTime&quot;:&quot;1s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/kbU6ysrzcps?start=1s&amp;rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div></li></ul><h2>The Monitor</h2><p>Dual monitors, ultrawide, super ultra wide or a  single large screen those are the choices you have.&nbsp; My  recommendation at minimum is to get a model with USB-C power delivery so you can charge your laptop at the same time. For screen size I  also  recommend  34&#8221; QHD utrawide monitors with PBP (Picture by Picture) support which will allows two computers to be displayed on a single screen.</p><p>If you have or want a dual monitor setup, <a href="https://thisise.substack.com">ThisIsE (Iskren)</a> explores all the different combination and use cases in his Dual Monitor Productivity Setup Guide.</p><div id="youtube2-9YV4-vW174E" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;9YV4-vW174E&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/9YV4-vW174E?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>This slightly older video by <a href="https://www.youtube.com/@HelloDavid">David Zhang</a> also showcases what can be achieved with two screens:</p><div id="youtube2-l1N3jlgqcQ4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;l1N3jlgqcQ4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/l1N3jlgqcQ4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Cable management</h2><p>This video by <a href="https://www.youtube.com/@edwardleefilms">Edward Lee</a> showcases one of the best techniques I have seen to hide you cables under desk, I have repeated this technique many times on multiple desks.</p><div id="youtube2-Tpk0GIpq5JM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Tpk0GIpq5JM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Tpk0GIpq5JM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Accessories</h2><h3>Keyboard &amp; Mouse</h3><p>An external keyboard &amp; mouse is a must and there are plethora of options out there, my recommendations in this are models that work with multiple devices.  </p><p>The Logitech MX Keys &amp; MX Mechanical series of keyboards are a great choice and com win both full and mini sizes.</p><p>The Logitech MX Master series of mice are also a good option to pair with MX Keyboards.</p><p>Another neat feature that some Logitech Keyboard &amp; Mice support is Logitech Flow, which is a technology that allows a single keyboard and mouse to be shared between two computers and will automatically move between devices.  This even works with Macs &amp; PCs.</p><div id="youtube2-0rs6WMN0uUE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0rs6WMN0uUE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0rs6WMN0uUE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Speakers</h3><p>Popular desk speakers from you-tubers tend to be the Kanto YU2 or Audio Engine A2+.  I personally have the Audio Engine A2+ in white and they work great and support line in, usb and bluetooth for inputs.  There is also a subwoofer available if you want even deeper bass but I haven&#8217;t had the need yet.</p><div id="youtube2-KUiCsV6iAoY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;KUiCsV6iAoY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/KUiCsV6iAoY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Laptop Stand</h3><p>You will need a place to store you laptop on your desk you can either use a vertical stand to reclaim the most space on your desk or one that holds the laptop open with the screen visible.  I myself use the Twelve South Curve. </p><div id="youtube2-E4i-lzIV0uw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;E4i-lzIV0uw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/E4i-lzIV0uw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h2>Wrapping Up</h2><p>That&#8217;s all for today, I hope you enjoyed reading this post and got some value out of it.  Please share with your friends &amp; colleagues.</p><p>Please leave a comment if you have any feedback or suggestions. If you liked my post and feel it was of value, please share it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #7 - Mobile DevOps Tooling]]></title><description><![CDATA[Stack: Mobile, DevOps]]></description><link>https://www.maneshlad.com/p/the-modern-architect-4-mobile-devops</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-4-mobile-devops</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Wed, 08 Feb 2023 00:11:05 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #4 edition of The Modern Architect newsletter.&nbsp; In this edition I&#8217;m going tell you about mobile devops and what tools are at your disposal.</p><h3>The Mobile Build Process</h3><p>Compiling a mobile application for testing or distribution could include these steps: </p><ul><li><p>fetching source code from git</p></li><li><p>bumping version numbers</p></li><li><p>downloading dependencies</p></li><li><p>running unit tests</p></li><li><p>compiling source code</p></li><li><p>code signing with certificates &amp; profiles from Apple &amp; Google.</p></li></ul><p>These steps don&#8217;t even cover any complex scenarios such as running UI tests on simulators or devices, code scanning for vulnerabilities or quality, code coverage, uploading building to a distribution service, notifying users or sending crash symbols to crash reporting services.&nbsp; &nbsp;</p><p>It&#8217;s obvious to see with this many manual steps having a human perform these build steps is tedious, time consuming an error prone.&nbsp; The person doing builds can often be the bottle neck in a project with many teams needing to create test builds many times a day.</p><p>The solution to taming complex build processes is automation and that is what I am going to cover in the next section.</p><h3>Mobile Dev Ops Tooling</h3><p>DevOps is a methodology where tools and methodologies implemented throughout the software development lifecycle automate software development &amp; operational tasks related to releasing software.</p><p>I&#8217;m going to cover different Mobile DevOps tools that can be used to get started on your mobile DevOps journey using the good, better, best approach.</p><h4>Good - Script It</h4><p>The simplest thing you could do is automate the build process using a local script that is checked into your source code repository.&nbsp; There is an open source mobile build automation framework by Google that I recommend called <a href="https://fastlane.tools/">Fastlane</a> for building your script.  When its time to create a build any developer can checkout the code repository and execute the Fastlane script.</p><h4>Better - Local Solutions</h4><ul><li><p>Xcode Server - Only recommended if you targeting Apple platforms exclusively but has limited featured compared the other products I am going to talk about.</p></li><li><p><a href="https://www.jenkins.io/">Jenkins</a> - An open source automation server that can be installed in any server and supports building mobile development projects via a number of plugins.  <a href="https://plugins.jenkins.io/xcode-plugin">Xcode Plug-in</a>, <a href="https://www.jenkins.io/doc/pipeline/steps/android-signing/">Android Signing Plug-in</a>.</p></li></ul><h4>Best - Cloud Solutions</h4><p>Building a local mobile automation server requires an always on Mac computer which is configured in a very specific way that could be unique to every project.  Maintaining build machines coupled with mobile build jobs being very time consuming and resource intensive provide enough reasons to build in the cloud to streamline your workloads and allow you free up your resources. </p><ul><li><p><a href="https://developer.apple.com/xcode-cloud/">Xcode Cloud</a> - Again only recommended if you support Apple Platforms exclusively.</p></li><li><p><a href="https://bitrise.io/">Bitrise</a> - Supports all major mobile platforms with pre-configured virtual machines that save you lots of time.&nbsp; Platforms include: IOS,&nbsp; Android, React Native, Flutter, Ionic, Cordova,</p></li><li><p><a href="https://azure.microsoft.com/en-ca/products/devops">Azure DevOps</a> - Includes Azure Pipelines which supports automated build, test, and deploy for any language, platform, and cloud provider.</p></li></ul><h3>Wrapping Up</h3><p>As you can see there is lot of benefits to be gained by adopting DevOps Tools, I did not even have time to cover the DevOps practices that go hand in hand with DevOps tooling.</p><p>Please leave a comment if you have any feedback or suggestions. If you liked my post and feel it was of value, please share it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="poll-embed" data-attrs="{&quot;id&quot;:48420}" data-component-name="PollToDOM"></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #6 - Codebase Refresh]]></title><description><![CDATA[Stack: Any, Mobile]]></description><link>https://www.maneshlad.com/p/the-modern-architect-3-codebase-refresh</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-3-codebase-refresh</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Tue, 31 Jan 2023 22:34:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #3 edition of <strong>The Modern Architect</strong> newsletter.&nbsp; In my <a href="https://www.maneshlad.com/p/the-modern-architect-2-staying-current">last</a> blog post I shared strategies for keeping up with and staying ahead of mobile industry changes.&nbsp; In this post I am going to focus in on strategies for keeping your codebases up to date. &nbsp;These strategies can apply to any technology stack and not just mobile.</p><h3>Why keep refreshing your codebases?</h3><p>Keeping codebases up to date will allow your application to function in an optimal &amp; secure manner and have access to the latest features and improvements.&nbsp; </p><p>Many modern applications utilize dependencies and libraries which if kept up to date can help fix bugs, improve performance and keep you in line with latest industry standards.&nbsp; </p><p>Many vendors in addition will not provide any support unless your on their latest or later versions of their libraries or dependencies.</p><p>For examples if your application utilizes the Salesforce SDK you may need to keep it updated to take advantage of a new features of the SaaS Platform or maintain access your tenant.</p><p>Apple&#8217;s IOS SDK which has a major releases every year often deprecates APIs and introduces newer API&#8217;s the offer performance and security improvements. &nbsp; In addition the only way to support newer Apple iPhones and take advantage of new features is to use the their latest iOS SDK, an example of this would be dynamic Island which was introduce with iPhone 14 Pro &amp; iPhone 14 Pro Max is only available to third party developers in the iOS 16.1 SDK.</p><h3>What areas of my codebase should I update?</h3><p>Here is a checklist of things you should consider checking for any updates:</p><ul><li><p>Platform SDK updates to support latest programming languages</p></li><li><p>Platform SDK updates to support latest frameworks</p></li><li><p>Platform SDK updates for software compatibility</p></li><li><p>Platform SDK updates for hardware compatibility</p></li><li><p>Vendor SDK Libraries or Dependencies i.e. Salesforce SDK, Dropbox SDK,  - a dependency manager may help here</p></li><li><p>Deprecated APIs</p></li><li><p>New APIs with better performance</p></li><li><p>New APIs with improved security</p></li></ul><h3>When to up date?</h3><p>The next topic to consider is when you should be updating your codebases, you may not have the luxury of being able to do it all the time.</p><ul><li><p>Major operating system announcements - when new versions are announced there are usually beta/preview versions to try out.</p></li><li><p>New hardware releases - may trigger new platform SDKs that offer support for the new hardware such as Apple iOS SDK or iPadOS SDK.</p></li><li><p>Your application releases - when developing a new version of your application you could make the update task a part of the release.</p></li><li><p>Code reviews - during a code one of the mandatory checks you can make is if the libraries, dependencies &amp; SDK&#8217;s are up to date.</p></li><li><p>Continuous Integration Step - you could automate the checks during automated deployment pipelines and provide alerts &amp; reporting.</p></li></ul><p>That&#8217;s all for today, I hope you enjoyed reading this post.</p><p>Please leave a comment if you have any feedback or suggestions. If you liked my post and feel it was of value, please share it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #5 - Staying Current]]></title><description><![CDATA[Stack: Mobile]]></description><link>https://www.maneshlad.com/p/the-modern-architect-2-staying-current</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-2-staying-current</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Wed, 18 Jan 2023 00:41:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #2 edition of <strong>The Modern Architect</strong>.&nbsp; I will be sharing some strategies for keeping up with and staying ahead of mobile industry changes.&nbsp; The mobile industry moves fast and these strategies will be key for mobile developers, architects, managers or directors.</p><h4>Platform Updates</h4><p>These links will have the news straight from the horses mouth as it were for the platform vendors themselves.</p><h5>Software</h5><ul><li><p><a href="https://developer.apple.com/news/">https://developer.apple.com/news/</a></p></li><li><p><a href="https://developer.apple.com/news/releases/">https://developer.apple.com/news/releases/</a></p></li><li><p><a href="https://developer.apple.com/news/upcoming-requirements/">https://developer.apple.com/news/upcoming-requirements/</a></p></li><li><p><a href="https://developer.apple.com/news/site-updates/">https://developer.apple.com/news/site-updates/</a></p></li><li><p><a href="https://developer.android.com/about">https://developer.android.com/about</a></p></li><li><p><a href="https://www.android.com/what-is-android/">https://www.android.com/what-is-android/</a></p></li></ul><h5>Hardware</h5><ul><li><p><a href="https://www.apple.com/newsroom/">https://www.apple.com/newsroom/</a> </p></li><li><p><a href="https://blog.google/products/devices-services/">https://blog.google/products/devices-services/</a> </p></li><li><p><a href="https://news.samsung.com/us/category/product/product-mobile/">https://news.samsung.com/us/category/product/product-mobile/</a> </p></li></ul><h4>Developer Conferences</h4><p>Both Apple &amp; Google have annual conferences where you can learn about the latest operating system, feature updates,&nbsp;development strategies, developor tooling, language updates and best practices.</p><ul><li><p><a href="https://developer.apple.com/wwdc/">Apple WWDC </a>- 4-5 day annual conference usually in June.  Click <a href="https://www.maneshlad.com/p/apple-wwdc-keynotes">here</a> to access my post listing all the WWDC keynotes available on YouTube that you can watch anytime.  Watching the keynote is a great way to get a summary of the major changes announced at the conference.</p></li><li><p><a href="https://io.google/">Google IO</a> - 2-3 day annual conference.  Click <a href="https://www.maneshlad.com/p/google-io-keynotes">here</a> to access my post listing all the Google IO keynotes available on YouTube that you can watch anytime.  Watching the keynote is a great way to get a summary of the major changes announced at the conference.</p></li></ul><h4>Beta Programs</h4><p>It&#8217;s important as part of your mobile testing strategy to test your applications against upcoming mobile operating systems for compatibility.  This is especially true for Apple&#8217;s iOS platform which releases a major version every year with wide adoption.</p><ul><li><p><a href="https://developer.apple.com/programs/">Apple Developer Program &amp; Developer Betas</a> </p></li><li><p><a href="https://beta.apple.com/sp/betaprogram/">Apple Public Beta Program</a></p></li><li><p><a href="https://www.google.com/android/beta">Google Android</a></p></li></ul><h4></h4><h4>Newsletters</h4><p>Newsletters are a great way to get regular updates direct to your inbox.  </p><ul><li><p><a href="https://iosdevweekly.com">https://iosdevweekly.com</a></p></li><li><p><a href="https://developer.android.com/newsletter/">https://developer.android.com/newsletter/</a></p></li><li><p><a href="https://androidweekly.ne">https://androidweekly.net</a></p></li><li><p><a href="https://www.kodeco.com/newsletter">https://www.kodeco.com/newsletter</a> - kodeco.com Weekly (formerly raywenderlich.com)</p></li></ul><h4>Podcasts</h4><p>If you rather listen than read, then podcasts are a great way to get a a feel of the latest things happening in the mobile industry with commentary and insights.</p><h5>Apple iOS</h5><ul><li><p><a href="https://atp.fm/">Accidental Tech Podcast</a> - &#8220;Three nerds discussing tech, Apple, programming, and loosely related matters&#8221;</p></li><li><p><a href="https://www.swiftbysundell.com">Swift by Sundell</a> - &#8220;Articles, podcasts and news about Swift development, by John Sundell&#8221;</p></li></ul><h5>Google Android</h5><ul><li><p><a href="http://adbackstage.libsyn.com/">Android Developers Backstage</a>  (by Google) - Welcome to Android Developers Backstage - &#8220;Welcome to Android Developers Backstage, a podcast by and for Android developers. Hosted by developers from the Android platform team, this show covers topics of interest to Android programmers, with in-depth discussions and interviews with engineers on the Android team at Google.&#8221;</p></li><li><p><a href="https://nowinandroid.libsyn.com">Now in Android</a> (by Google) - &#8220;This show gives listeners a quick run-down on things that the Android team has done recently that developers may want to check out. It covers library and platform releases, articles, videos, podcasts, samples, codelabs - whatever seems relevant and interesting for Android developers. Android&#8217;s a big platform and there are many things being released all the time; listen to this podcast to stay up to date on what those things are.&#8221;</p></li><li><p><a href="https://developer.android.com/podcasts/apps-games-insights">Apps, Games, &amp; Insights Podcast</a> (by Google) - &#8220;For developers, business decision makers, and enthusiasts in the apps and games industry the Apps, Games, &amp; Insights podcast series brings the latest insights, stories, and discussion from industry experts. Episodes cover topics from responsible engagement, through advice from mergers and acquisitions and venture capital experts, to how to build quality apps with Firebase and go from PC to mobile gaming. Also hear discussions on hot topics such as privacy, accessibility, product inclusivity, and around critical areas such as app-based learning and pivoting in times of crisis, and raising awareness of climate change in gaming, and much more. Stay tuned and follow us for the latest episodes.&#8221;</p></li><li><p><a href="https://fragmentedpodcast.com">Fragmented</a> - &#8220;A Software Developer Podcast hosted by Donn Felker and Kaushik Gopal&#8221;</p></li></ul><h4>Meetups</h4><p>A great way to stay up to date and connect with peers is to find local meetup groups for mobile developers. There are usually great places to connect local developers with people hiring full time or for side projects.</p><ul><li><p><a href="https://www.meetup.com/topics/ios-development/">iOS Development Meetups</a></p></li><li><p><a href="https://www.meetup.com/topics/android-developers/">Android Development Meetups</a></p></li></ul><h4>Wrapping Up</h4><p>This edition barely scratched the surface but should be sufficient to get you started on your journey to staying current with the mobile industry.</p><p>Please leave a comment if you have any feedback or suggestions. If you liked my post and feel it was of value, please share it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #4 - Mobile Dev Setup]]></title><description><![CDATA[Stack: Mobile]]></description><link>https://www.maneshlad.com/p/the-modern-architect-1-mobile-dev</link><guid isPermaLink="false">https://www.maneshlad.com/p/the-modern-architect-1-mobile-dev</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Tue, 10 Jan 2023 01:57:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c95075c-f58c-4065-bd8d-df7c544871c9_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the #1 edition of <strong>The Modern Architect</strong>. Today I will be sharing with you what setup you need to get started with mobile application development for Apple iOS or Google Android.</p><h4>Hardware</h4><ul><li><p>Computer - Any modern Apple MacBook or Mac Mini that is capable of running the latest Apple desktop operating system.</p></li><li><p>Test Devices - A physical Mobile Phones or Tablet device running the operating system version &amp; mobile platform you want to target.</p></li></ul><h4>Software</h4><ul><li><p>Apple <a href="https://developer.apple.com/xcode/">Xcode</a> - includes everything you need to develop, test, and distribute apps across all Apple platforms.</p></li><li><p><a href="https://developer.android.com/studio">Android Studio</a>, the official Integrated Development Environment (IDE) for Android app development.</p></li></ul><h4>Programming Languages</h4><p>Here are the languages that I think are worth learning if I was starting today:</p><ul><li><p><a href="https://kotlinlang.org/">Kotlin</a> for Android.</p></li><li><p><a href="https://docs.swift.org/swift-book/">Swift</a> for Apple Platforms.</p></li></ul><h4>Design Guidelines</h4><p>I also recommend read the following sites to get a feel for things that need to be considered when designing mobile applications.</p><ul><li><p><a href="https://developer.apple.com/design/human-interface-guidelines/guidelines/overview/">Apple Human Interface Guidelines</a> - Guidance and best practices that can help you design a great experience for any Apple platform.</p></li><li><p><a href="https://developer.apple.com/xcode/swiftui/">Swift UI</a> - SwiftUI helps you build great-looking apps across all Apple platforms with the power of Swift.</p></li><li><p><a href="https://m3.material.io/">Material Design</a> - Google&#8217;s open-source design system.</p></li><li><p><a href="https://developer.android.com/develop/ui">Develop UI for Android</a> - Utilize Compose or Views to build out your user interface.</p></li><li><p><a href="https://developer.android.com/design">Design for Android</a> - Beyond UI, quality guidelines for compatibility, performance &amp; security, and more.</p></li></ul><h4>Wrapping Up</h4><p>Keep in mind this is a basic setup that will allow you to develop for either Apple iOS or Google Android or both if you have the appetite for it :)</p><p>Please leave a comment if you have any feedback or suggestions.  If you liked my post and feel it was of value, please share it.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.maneshlad.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Modern Architect! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #3 - WWDC Keynotes]]></title><description><![CDATA[Stack: Mobile]]></description><link>https://www.maneshlad.com/p/apple-wwdc-keynotes</link><guid isPermaLink="false">https://www.maneshlad.com/p/apple-wwdc-keynotes</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Sun, 08 Jan 2023 00:31:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/q5D55G7Ejs8" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>2022</h1><div id="youtube2-q5D55G7Ejs8" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;q5D55G7Ejs8&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/q5D55G7Ejs8?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2021</h1><div id="youtube2-0TD96VTf0Xs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;0TD96VTf0Xs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/0TD96VTf0Xs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2020</h1><div id="youtube2-GEZhD3J89ZE" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;GEZhD3J89ZE&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/GEZhD3J89ZE?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2019</h1><div id="youtube2-psL_5RIBqnY" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;psL_5RIBqnY&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/psL_5RIBqnY?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2018</h1><div id="youtube2-UThGcWBIMpU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;UThGcWBIMpU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/UThGcWBIMpU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2017</h1><div id="youtube2-oaqHdULqet0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;oaqHdULqet0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/oaqHdULqet0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2016</h1><div id="youtube2-n5jXg_NNiCA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;n5jXg_NNiCA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/n5jXg_NNiCA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2015</h1><div id="youtube2-_p8AsQhaVKI" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;_p8AsQhaVKI&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/_p8AsQhaVKI?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2014</h1><div id="youtube2-w87fOAG8fjk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;w87fOAG8fjk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/w87fOAG8fjk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1></h1><p></p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #2 - Add iOS 15 Support]]></title><description><![CDATA[Stack: Mobile]]></description><link>https://www.maneshlad.com/p/enterprise-ios-15-ipados-15-tvos</link><guid isPermaLink="false">https://www.maneshlad.com/p/enterprise-ios-15-ipados-15-tvos</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Mon, 20 Sep 2021 02:08:38 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B9xn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B9xn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 424w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 848w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 1272w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B9xn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png" width="384" height="384" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/82c10e15-3679-4111-9242-718a241b38d4_384x384.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:384,&quot;width&quot;:384,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B9xn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 424w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 848w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 1272w, https://substackcdn.com/image/fetch/$s_!B9xn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82c10e15-3679-4111-9242-718a241b38d4_384x384.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With iOS 15 coming out tomorrow here are some things to consider to ensure your current applications work fine with the new OS.&nbsp; The same techniques will also apply to iPad OS, tvOS and watchOS.</p><p>Ensure your existing mobile apps work as is on iOS 15, you can do this by installing your iOS 14 compatible app on a device running iOS 15, make sure you obtain your app, pre-built from the Public App Store or your Enterprise App Store, do not rebuild the app using Xcode 13 at this stage.</p><p>As iOS 15 release approaches and a release candidate version of Xcode 13 appears (usually after the iPhone event) the next step is to make sure your app runs fine using new device screen sizes (new iPhone/iPad/Watch variants) using Xcode 12 &amp; iOS 15 simulators using the technique described in this Github <a href="https://gist.github.com/steipete/d9b44d8e9f341e81414e86d7ff8fb62d">Gist</a> by Peter Steinberger.</p><p>By using the above two techniques you will be able to fix any iOS 15 compatibility bugs without needing to upgrade your codebaseto Xcode 13.&nbsp; Upgrading your codebase to the latest Xcode version is not trivial task and could be very time consuming.</p><p>I hope these tips can you help your teams upgrade your apps smoothly and cleanly, let me know your thoughts. </p>]]></content:encoded></item><item><title><![CDATA[The Modern Architect #1 - Google IO Keynotes]]></title><description><![CDATA[Stack: Mobile]]></description><link>https://www.maneshlad.com/p/google-io-keynotes</link><guid isPermaLink="false">https://www.maneshlad.com/p/google-io-keynotes</guid><dc:creator><![CDATA[Manesh Lad]]></dc:creator><pubDate>Thu, 15 Apr 2021 05:09:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/nP-nMZpLM1A" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>2022</h1><div id="youtube2-nP-nMZpLM1A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;nP-nMZpLM1A&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/nP-nMZpLM1A?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2021</h1><div id="youtube2-Mlk888FiI8A" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Mlk888FiI8A&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Mlk888FiI8A?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2020</h1><p>Not Held</p><h1>2019</h1><div id="youtube2-lyRPyRKHO8M" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;lyRPyRKHO8M&quot;,&quot;startTime&quot;:&quot;2s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/lyRPyRKHO8M?start=2s&amp;rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2018</h1><div id="youtube2-ogfYd705cRs" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;ogfYd705cRs&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/ogfYd705cRs?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2017</h1><div id="youtube2-Y2VF8tmLFHw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Y2VF8tmLFHw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Y2VF8tmLFHw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h1>2016</h1><div id="youtube2-862r3XS2YB0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;862r3XS2YB0&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/862r3XS2YB0?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div>]]></content:encoded></item></channel></rss>