CINXE.COM
Mobile App Development Publication - Medium
<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Mobile App Development Publication - Medium</title><link rel="canonical" href="https://medium.com/mobile-app-development-publication"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/mobile-app-development-publication"><meta name="robots" content="index,follow"><meta name="title" content="Mobile App Development Publication - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Sharing iOS, Android and relevant Mobile App Development Technology and Learning."><meta name="keywords" content="PROGRAMMING, MOBILE APP DEVELOPMENT, ANDROID APP DEVELOPMENT, IOS APP DEVELOPMENT, ANDROIDDEV"><meta name="theme-color" content="#000000"><meta property="og:title" content="Mobile App Development Publication – Medium"><meta property="twitter:title" content="Mobile App Development Publication – Medium"><meta property="og:url" content="https://medium.com/mobile-app-development-publication"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*r5bO5bEjNCKLt6fKZbPdCA.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Sharing iOS, Android and relevant Mobile App Development Technology and Learning."><meta name="twitter:description" content="Sharing iOS, Android and relevant Mobile App Development Technology and Learning."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*r5bO5bEjNCKLt6fKZbPdCA.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@elye-project"><meta name="twitter:creator" content="@elye_project"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://mobile-app-development-publication"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://mobile-app-development-publication"><meta property="al:android:url" content="medium://mobile-app-development-publication"><meta property="al:web:url" content="https://medium.com/mobile-app-development-publication"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/mobile-app-development-publication" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/mobile-app-development-publication", "name": "Mobile App Development Publication"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.tWIMt8r3Nl52PPi9OfgcVw.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*r5bO5bEjNCKLt6fKZbPdCA.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*r5bO5bEjNCKLt6fKZbPdCA.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*r5bO5bEjNCKLt6fKZbPdCA.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*r5bO5bEjNCKLt6fKZbPdCA.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/mobile-app-development-publication%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fmobile-app-development-publication%3Fsource%3D---------9-----------------------&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/mobile-app-development-publication?source=---------9-----------------------" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fmobile-app-development-publication%3Fsource%3D---------9-----------------------&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/mobile-app-development-publication?source=---------9-----------------------" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutLarge collectionHeader--alignmentCenter collectionHeader--withoutLogo collectionHeader--withBackground collectionHeader--colorBehaviorSubtle collectionHeader--withNavigation collectionHeader--editorLayoutTitle is-modeView"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground" style="background-image: url("https://cdn-images-1.medium.com/max/2400/1*C2ZAeP1Mo3zhxYDLB04i5Q.png"); background-position: 50% 50% !important;"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-imageSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style=""><a class="link u-baseColor--link" href="https://medium.com/mobile-app-development-publication" title="Go to Mobile App Development Publication" aria-label="Go to Mobile App Development Publication"><div class="u-relative u-marginAuto"><div style="padding-bottom: 75%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/mobile-app-development-publication" title="Go to Mobile App Development Publication" aria-label="Go to Mobile App Development Publication"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">Mobile App Development</h1></a><h2 class="collectionHeader-description js-collectionDescription u-foreground u-baseColor--textNormal u-contentSansRegular u-fontSize24 u-xs-fontSize18">for Android and iOS</h2></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/tagged/android-app-development">Android App Development</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/tagged/ios-app-development">iOS App Development</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/tagged/jetpack-compose">Jetpack Compose</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/tagged/kotlin">Kotlin</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/tagged/swift">Swift</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/dagger/home">Dagger</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/mobile-app-development-publication/android-ui/home">Android UI</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search" required="true" data-collection-id="f9c208bdbb09" /></label><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/elye_project" title="Visit “Mobile App Development Publication” on X" aria-label="Visit “Mobile App Development Publication” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="//facebook.com/elye.proj" title="Visit “Mobile App Development Publication” on Facebook" aria-label="Visit “Mobile App Development Publication” on Facebook" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--facebookFilled svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" ><path d="M21 12.646C21 7.65 16.97 3.6 12 3.6s-9 4.05-9 9.046a9.026 9.026 0 007.59 8.924v-6.376H8.395V12.64h2.193v-1.88c0-2.186 1.328-3.375 3.267-3.375.93 0 1.728.07 1.96.1V9.77H14.47c-1.055 0-1.26.503-1.26 1.242v1.63h2.517l-.33 2.554H13.21V21.6c4.398-.597 7.79-4.373 7.79-8.954"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/mobile-app-development-publication" data-action-source="pub_header----f9c208bdbb09----------------------follow_pub" data-collection-id="f9c208bdbb09"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><div class="u-marginTop30 u-xs-marginTop0 u-marginBottom15 u-maxWidth1032 u-marginAuto"><div class="u-marginBottom15 u-xs-paddingLeft20 u-xs-paddingRight20"><header class="heading heading--borderedBottom u-fontSize18 u-contentSansThin" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight u-fontSize18 u-contentSansThin">Mobile App Development</span></div></div></header></div><div class="u-paddingTop35 u-paddingBottom20 u-paddingLeft20 u-paddingRight20 u-maxWidth1000 u-marginAuto u-textAlignCenter js-trackedPromo" style="background-color: #DDFFFF;"data-action="open-promo-link" data-promo-id="ebb927f68e94" data-collection-id="f9c208bdbb09"><div class="u-marginBottom20"><a class="button button--large button--withChrome u-baseColor--buttonNormal u-borderNormal" href="https://medium.com/mobile-app-development-publication/introducing-mobile-app-development-publication-6ca8c726ad4d" rel="nofollow noopener" target="_blank" data-action-source="collection_home---2------0-----------------------">Write for the Publication</a></div></div></div></div><div class="streamItem streamItem--section js-streamItem"><div class="u-marginTop30 u-xs-marginTop0 u-marginBottom15 u-maxWidth1032 u-marginAuto"><div class="u-table u-width100pct u-height450 u-xs-minHeight350"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height450 u-xs-minHeight350" data-source="collection_home---2------0-----------------------" data-post-id="f208489e9a80" data-index="0"><div class="u-baseColor--textDark u-height450 u-xs-minHeight350"><a href="https://medium.com/mobile-app-development-publication/scaling-mobile-development-with-micro-frontends-f208489e9a80?source=collection_home---2------0-----------------------" data-post-id="f208489e9a80" data-source="collection_home---2------0-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*aNaza0DZhpH5O2Gh"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Scaling Mobile Development with Micro-frontends</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/mobile-app-development-publication/scaling-mobile-development-with-micro-frontends-f208489e9a80?source=collection_home---2------0-----------------------" data-action-source="collection_home---2------0-----------------------" data-post-id="f208489e9a80"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize44"><div class="">Scaling Mobile Development with Micro-frontends</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="">It is more than just modularizing your app development</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-03-17T10:54:38.259Z">Mar 17, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></div></div><div class="u-table u-width100pct u-height350 u-xs-height250"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-paddingRight15 u-height350 u-xs-height250 u-width40pct " data-source="collection_home---2------1-----------------------" data-post-id="e1e1723f392" data-index="1"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/mobile-app-development-publication/migrate-to-android-13-predictive-back-soon-before-its-too-late-e1e1723f392?source=collection_home---2------1-----------------------" data-post-id="e1e1723f392" data-source="collection_home---2------1-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*auvWOv4025FcpgXs"); background-position: 50% 50% !important;"><span class="u-textScreenReader">The onBackPressed Is Now Deprecated in Android 13 and Might Need Major Changes in Existing Apps</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15"><a class="" href="https://medium.com/mobile-app-development-publication/migrate-to-android-13-predictive-back-soon-before-its-too-late-e1e1723f392?source=collection_home---2------1-----------------------" data-action-source="collection_home---2------1-----------------------" data-post-id="e1e1723f392"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">The onBackPressed Is Now Deprecated in Android 13 and Might Need Ma...</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">Migrate to Android 13's “Predictive Back” Before It’s Too Late</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-09-03T14:28:34.065Z">Sep 3, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="15 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></div><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height350 u-xs-height250" data-source="collection_home---2------2-----------------------" data-post-id="1aef83d67659" data-index="2"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/mobile-app-development-publication/secure-your-only-chance-to-ask-for-android-push-notification-permission-1aef83d67659?source=collection_home---2------2-----------------------" data-post-id="1aef83d67659" data-source="collection_home---2------2-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*igShgG2-U_kP1568"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Secure Your “Only” Chance to Ask for Android Post-Notification Permission</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/mobile-app-development-publication/secure-your-only-chance-to-ask-for-android-push-notification-permission-1aef83d67659?source=collection_home---2------2-----------------------" data-action-source="collection_home---2------2-----------------------" data-post-id="1aef83d67659"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">Secure Your “Only” Chance to Ask for Android Post-Notification Perm...</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-08-26T14:50:03.517Z">Aug 26, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></div></div><div class="u-table u-width100pct u-height350 u-xs-height250"><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-paddingRight15 u-height350 u-xs-height250" data-source="collection_home---2------3-----------------------" data-post-id="c82283d15564" data-index="3"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/mobile-app-development-publication/negative-padding-for-jetpack-compose-made-possible-c82283d15564?source=collection_home---2------3-----------------------" data-post-id="c82283d15564" data-source="collection_home---2------3-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*1m2hiuc-KeIbPEdH"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Negative Padding For Jetpack Compose Made Possible</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15 u-right40Percent u-md-right0"><a class="" href="https://medium.com/mobile-app-development-publication/negative-padding-for-jetpack-compose-made-possible-c82283d15564?source=collection_home---2------3-----------------------" data-action-source="collection_home---2------3-----------------------" data-post-id="c82283d15564"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">Negative Padding For Jetpack Compose Made Possible</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-06-21T13:09:42.743Z">Jun 21, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></div><div class="u-tableCell u-sm-size12of12 u-sm-block u-overflowHidden js-trackPostPresentation u-imageSpectrum u-paddingTop15 u-height350 u-xs-height250 u-width40pct " data-source="collection_home---2------4-----------------------" data-post-id="9cb8f664cfcf" data-index="4"><div class="u-baseColor--textDark u-height350 u-xs-height250"><a href="https://medium.com/mobile-app-development-publication/android-app-signing-a-refresher-9cb8f664cfcf?source=collection_home---2------4-----------------------" data-post-id="9cb8f664cfcf" data-source="collection_home---2------4-----------------------" class="u-block u-sizeFull u-backgroundSizeCover u-backgroundOriginBorderBox u-borderLighter u-borderBox u-backgroundColorGrayLight"style="background-image: url("https://cdn-images-1.medium.com/max/2400/gradv/29/81/30/darken/25/0*WhV_HVvRnfWaJCL3"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Android App Signing —A Refresher</span></a><div class="u-relative"><div class="u-absolute u-left0 u-bottom0 u-marginVertical30 u-marginHorizontal40 u-xs-marginHorizontal20 u-xs-marginBottom20 u-xs-marginTop15"><a class="" href="https://medium.com/mobile-app-development-publication/android-app-signing-a-refresher-9cb8f664cfcf?source=collection_home---2------4-----------------------" data-action-source="collection_home---2------4-----------------------" data-post-id="9cb8f664cfcf"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="">Android App Signing —A Refresher</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-hide">App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-07-26T11:36:45.789Z">Jul 26, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="10 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></div></div></div></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><header class="heading heading--borderedBottom u-fontSize18 u-contentSansThin" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight u-fontSize18 u-contentSansThin">Latest</span></div></div></header><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------0-----------------------" data-post-id="c4975bd00621" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/custom-android-push-notification-use-case-cloning-grab-live-tracking-notification-c4975bd00621?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/custom-android-push-notification-use-case-cloning-grab-live-tracking-notification-c4975bd00621?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/1200/0*gjCtJJYxpcWmGDhR"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Custom Android Push Notification Use Case: Cloning Grab Live Tracking Notification</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/custom-android-push-notification-use-case-cloning-grab-live-tracking-notification-c4975bd00621?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="c4975bd00621"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Custom Android Push Notification Use Case: Cloning Grab Live Tracking Notification</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Exploring The Power Of RemoteViews</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*DJiLTxXxBct1jjWE.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Adi Andrea"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto">Adi Andrea</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-22T04:49:07.785Z">Nov 21</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------1-----------------------" data-post-id="efb2e71a878c" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/1200/0*JNVtgEEM6B1o62lq"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Enable SwiftUI Views Sharing Across Packages Without Dependency Constraint</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="efb2e71a878c"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Enable SwiftUI Views Sharing Across Packages Without Dependency Constraint</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">An Aligned Autonomy Scaling Mobile Development Approach</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-11T12:35:26.453Z">Nov 11</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="225b855ba5b8" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/how-i-migrate-android-build-configurations-from-groovy-to-kotlin-dsl-225b855ba5b8?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/how-i-migrate-android-build-configurations-from-groovy-to-kotlin-dsl-225b855ba5b8?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*9VkZC1tT8yb8d2_F"); background-position: 50% 50% !important;"><span class="u-textScreenReader">How I Migrate Android Build Configurations From Groovy To Kotlin DSL</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/how-i-migrate-android-build-configurations-from-groovy-to-kotlin-dsl-225b855ba5b8?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="225b855ba5b8"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">How I Migrate Android Build Configurations From Groovy To Kotlin DSL</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">See you later, Groovy!</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*DJiLTxXxBct1jjWE.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Adi Andrea"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto">Adi Andrea</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-11T12:15:28.687Z">Nov 11</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------3-----------------------" data-post-id="a7290257d987" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987?source=collection_home---4------3-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*l8VttMnsOYFqPeQd"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Enable Composable Views Sharing Across Modules Without Dependency Constraint</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="a7290257d987"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Enable Composable Views Sharing Across Modules Without Dependency Constraint</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">An Aligned Autonomy Scaling Mobile Development Approach</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-08T06:12:29.629Z">Nov 7</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------4-----------------------" data-post-id="3d8beb05c2e8" data-index="4"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/how-to-prevent-reverse-engineering-on-your-android-app-3d8beb05c2e8?source=collection_home---4------4-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/how-to-prevent-reverse-engineering-on-your-android-app-3d8beb05c2e8?source=collection_home---4------4-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*Cg7czJ28GT7ZLybl"); background-position: 50% 50% !important;"><span class="u-textScreenReader">How To Prevent Reverse Engineering On Your Android App</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/how-to-prevent-reverse-engineering-on-your-android-app-3d8beb05c2e8?source=collection_home---4------4-----------------------" data-action-source="collection_home---4------4-----------------------" data-post-id="3d8beb05c2e8"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">How To Prevent Reverse Engineering On Your Android App</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Or at least make it more difficult</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*DJiLTxXxBct1jjWE.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Adi Andrea"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@adiandrea" data-action="show-user-card" data-action-value="7b8cf0bd846" data-action-type="hover" data-user-id="7b8cf0bd846" dir="auto">Adi Andrea</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-06T22:33:46.499Z">Nov 6</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------5-----------------------" data-post-id="e679cd2bbca0" data-index="5"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/ai-vs-human-top-tabs-examples-for-ios-app-e679cd2bbca0?source=collection_home---4------5-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/ai-vs-human-top-tabs-examples-for-ios-app-e679cd2bbca0?source=collection_home---4------5-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*GJ8ovItCBZzW6-wf"); background-position: 50% 50% !important;"><span class="u-textScreenReader">AI vs Human: Top Tabs Examples for iOS App</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/ai-vs-human-top-tabs-examples-for-ios-app-e679cd2bbca0?source=collection_home---4------5-----------------------" data-action-source="collection_home---4------5-----------------------" data-post-id="e679cd2bbca0"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">AI vs Human: Top Tabs Examples for iOS App</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-31T03:02:15.240Z">Oct 30</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------6-----------------------" data-post-id="40e99fcd1d57" data-index="6"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/intercept-the-start-of-ios-and-android-application-40e99fcd1d57?source=collection_home---4------6-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/intercept-the-start-of-ios-and-android-application-40e99fcd1d57?source=collection_home---4------6-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*MLeg4ElFFDD6oBg0"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Intercept the Start of iOS and Android Application</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/intercept-the-start-of-ios-and-android-application-40e99fcd1d57?source=collection_home---4------6-----------------------" data-action-source="collection_home---4------6-----------------------" data-post-id="40e99fcd1d57"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Intercept the Start of iOS and Android Application</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">It’s Not Provided by Default On Your New iOS or Android Project</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-30T04:25:11.624Z">Oct 29</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------7-----------------------" data-post-id="65e8258353fc" data-index="7"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/a-step-by-step-guide-creating-swift-package-manager-65e8258353fc?source=collection_home---4------7-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/a-step-by-step-guide-creating-swift-package-manager-65e8258353fc?source=collection_home---4------7-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*6_31ob1e2C58GRwA"); background-position: 50% 50% !important;"><span class="u-textScreenReader">A Step By Step Guide Creating Swift Package Manager</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/a-step-by-step-guide-creating-swift-package-manager-65e8258353fc?source=collection_home---4------7-----------------------" data-action-source="collection_home---4------7-----------------------" data-post-id="65e8258353fc"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">A Step By Step Guide Creating Swift Package Manager</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">It’s Time To Start Moving Away from CocoaPods</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-30T01:58:16.805Z">Oct 29</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------8-----------------------" data-post-id="9b69943cf92d" data-index="8"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/the-future-of-android-development-embracing-emerging-trends-and-technologies-9b69943cf92d?source=collection_home---4------8-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/the-future-of-android-development-embracing-emerging-trends-and-technologies-9b69943cf92d?source=collection_home---4------8-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*08RqtZl6VlTPsT6WEo073A.jpeg"); background-position: 50% 50% !important;"><span class="u-textScreenReader">The Future of Android Development: Embracing Emerging Trends and Technologies</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/the-future-of-android-development-embracing-emerging-trends-and-technologies-9b69943cf92d?source=collection_home---4------8-----------------------" data-action-source="collection_home---4------8-----------------------" data-post-id="9b69943cf92d"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">The Future of Android Development: Embracing Emerging Trends and Technologies</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@harmanpreet.khera" data-action="show-user-card" data-action-value="4588dfdfdccb" data-action-type="hover" data-user-id="4588dfdfdccb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*z0eDkJYyTzE_ZZbY9Cy7KA@2x.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Harman Khera"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@harmanpreet.khera" data-action="show-user-card" data-action-value="4588dfdfdccb" data-action-type="hover" data-user-id="4588dfdfdccb" dir="auto">Harman Khera</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-29T00:36:28.187Z">Oct 28</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------9-----------------------" data-post-id="4572afb99821" data-index="9"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821?source=collection_home---4------9-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821?source=collection_home---4------9-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*bw8mqxPtm6PXIbM-"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Socket & Plug Design Kit: A Scalable, Collaborative Model for Mobile Development</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821?source=collection_home---4------9-----------------------" data-action-source="collection_home---4------9-----------------------" data-post-id="4572afb99821"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Socket & Plug Design Kit: A Scalable, Collaborative Model for Mobile Development</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*0wVPGGR_3FMoPVGzT4nbTw.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Elye - A One Eye Dev By His Grace"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@elye-project" data-action="show-user-card" data-action-value="5742b4fcf89e" data-action-type="hover" data-user-id="5742b4fcf89e" dir="auto">Elye - A One Eye Dev By His Grace</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-28T11:48:01.934Z">Oct 28</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="10 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------10-----------------------" data-post-id="16c6dc8de464" data-index="10"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464?source=collection_home---4------10-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464?source=collection_home---4------10-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*_tefJfVrG10f1-Imn8nfHA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Why ViewModel is Your Best Friend (and Yes, You Really Need It!)</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464?source=collection_home---4------10-----------------------" data-action-source="collection_home---4------10-----------------------" data-post-id="16c6dc8de464"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Why ViewModel is Your Best Friend (and Yes, You Really Need It!)</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Architect your mobile project right</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*BNdLrGmBfjkUNkHuvoSNyw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Android Dev Nexus"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto">Android Dev Nexus</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-23T18:50:42.871Z">Oct 23</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------11-----------------------" data-post-id="bc2bbce2d278" data-index="11"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278?source=collection_home---4------11-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278?source=collection_home---4------11-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*Ogl3q_-rebrPitW-iCAulA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">JUnit vs. AndroidJUnit vs. Robolectric: Fixing Your Test Failures Without Losing Your Mind!</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278?source=collection_home---4------11-----------------------" data-action-source="collection_home---4------11-----------------------" data-post-id="bc2bbce2d278"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">JUnit vs. AndroidJUnit vs. Robolectric: Fixing Your Test Failures Without Losing Your Mind!</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Join me to solve a unit testing problem without losing your mind! Let’s understand JUnit, AndroidJUnit, and Robolectric effortlessly.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*BNdLrGmBfjkUNkHuvoSNyw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Android Dev Nexus"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto">Android Dev Nexus</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-09T13:23:15.728Z">Oct 9</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------12-----------------------" data-post-id="9ee764f3dee6" data-index="12"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/kotlin-multiplatform-demystified-cross-platform-made-simple-9ee764f3dee6?source=collection_home---4------12-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/kotlin-multiplatform-demystified-cross-platform-made-simple-9ee764f3dee6?source=collection_home---4------12-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*PVv1qHHT7XI40R1emEBvQw.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Kotlin Multiplatform Demystified: Cross-Platform Made Simple</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/kotlin-multiplatform-demystified-cross-platform-made-simple-9ee764f3dee6?source=collection_home---4------12-----------------------" data-action-source="collection_home---4------12-----------------------" data-post-id="9ee764f3dee6"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Kotlin Multiplatform Demystified: Cross-Platform Made Simple</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Code once and deploy on both mobile platforms!</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@avinashreddy.kr" data-action="show-user-card" data-action-value="6087acd1fe7" data-action-type="hover" data-user-id="6087acd1fe7" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*OVsVq9-kre_cVylhx7YBPw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Avinash Reddy"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@avinashreddy.kr" data-action="show-user-card" data-action-value="6087acd1fe7" data-action-type="hover" data-user-id="6087acd1fe7" dir="auto">Avinash Reddy</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-29T12:36:39.867Z">Sep 29</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------13-----------------------" data-post-id="76db6544b78d" data-index="13"><div class="u-lineHeightBase postItem"><a href="https://medium.com/mobile-app-development-publication/how-is-java-platform-independent-when-it-needs-a-jvm-to-run-76db6544b78d?source=collection_home---4------13-----------------------" data-action="open-post" data-action-value="https://medium.com/mobile-app-development-publication/how-is-java-platform-independent-when-it-needs-a-jvm-to-run-76db6544b78d?source=collection_home---4------13-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*eDv75WsH9J_JjMwdNmX_iA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">How is Java platform-independent when it needs a JVM to run?</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/mobile-app-development-publication/how-is-java-platform-independent-when-it-needs-a-jvm-to-run-76db6544b78d?source=collection_home---4------13-----------------------" data-action-source="collection_home---4------13-----------------------" data-post-id="76db6544b78d"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">How is Java platform-independent when it needs a JVM to run?</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Learning under the hood of Android Development</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*BNdLrGmBfjkUNkHuvoSNyw.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Android Dev Nexus"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@android-dev-nexus" data-action="show-user-card" data-action-value="2e51b1e460ff" data-action-type="hover" data-user-id="2e51b1e460ff" dir="auto">Android Dev Nexus</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-09-29T06:08:38.726Z">Sep 28</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></section></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #1A8917 !important;} .u-accentColor--borderNormal {border-color: #1A8917 !important;} .u-accentColor--borderDark {border-color: #0F730C !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #0F730C !important;} .u-accentColor--textNormal {color: #0F730C !important;} .u-accentColor--hoverTextNormal:hover {color: #0F730C !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #0F730C !important;} .u-accentColor--textDark {color: #0F730C !important;} .u-accentColor--backgroundLight {background-color: #1A8917 !important;} .u-accentColor--backgroundNormal {background-color: #1A8917 !important;} .u-accentColor--backgroundDark {background-color: #0F730C !important;} .u-accentColor--buttonDark {border-color: #0F730C !important; color: #0F730C !important;} .u-accentColor--buttonDark:hover {border-color: #0F730C !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #0F730C !important; fill: #0F730C !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #1A8917 !important; color: #0F730C !important;} .u-accentColor--buttonNormal:hover {border-color: #0F730C !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #1A8917 !important; fill: #1A8917 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #0F730C !important; border-color: #0F730C !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #1A8917 !important; border-color: #1A8917 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #0F730C !important;} .u-accentColor--highlightFaint {background-color: rgba(232, 243, 232, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(163, 208, 162, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(232, 243, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(232, 243, 232, 1), rgba(232, 243, 232, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(209, 231, 209, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(209, 231, 209, 1), rgba(209, 231, 209, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-borderTopLighter"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/mobile-app-development-publication/about" title="About Mobile App Development Publication" aria-label="About Mobile App Development Publication">About Mobile App Development Publication</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/mobile-app-development-publication/latest" title="Latest Stories for Mobile App Development Publication" aria-label="Latest Stories for Mobile App Development Publication">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/mobile-app-development-publication/archive" title="Archive for Mobile App Development Publication" aria-label="Archive for Mobile App Development Publication">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241216-1623-root","currentUser":{"userId":"lo_877b594b02e4","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.eBhzWGgpeTCq2eignYP2yQ.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.L_dvbFgPZ1QKQCbFVFNERw.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.jBpQ-AmW2gI0MYa6vwJodg.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.VXINXi3BrSW4Ni1oF5OUCw.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.FYmryJSLVzKplGrLyVk8Vw.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.1fT0s51LhOxIFhpF7VpcMg.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.DnlxCkHj_azc_YKsYoXK_w.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.6xwYcZsPD5BekGx_rvvtBg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.l4jO8KDvWKsNQBZh97r9vA.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.bwrlrKIyNPpj9E1vXfUHtg.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.V8KT40i1KU-zDSpeaw-3fA.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1734504782560:99e5904a34f8","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_abandoned_paywall_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bg_post_post":true,"enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_cancellation_discount_v1_gate":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_gift_banner":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_post_bottom_responses_native":true,"enable_post_publish_permission_check":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_pub_featuring":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_sms_verification_for_publish":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_trust_service_recaptcha":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"enable_winback_promotion_email":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":3,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.eBhzWGgpeTCq2eignYP2yQ.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"CollectionPromo":{"ebb927f68e94":{"promoId":"ebb927f68e94","collectionId":"f9c208bdbb09","createdAt":1593330169451,"linkWithContentItem":{"url":"https://medium.com/mobile-app-development-publication/introducing-mobile-app-development-publication-6ca8c726ad4d","description":"","buttonText":"Write for the Publication","tintColor":"#FFDDFFFF","colorSpectrum":{"colorPoints":[{"color":"#FFDDFFFF","point":0},{"color":"#FFCBEDED","point":0.1},{"color":"#FFB9DADA","point":0.2},{"color":"#FFA6C7C7","point":0.3},{"color":"#FF93B3B4","point":0.4},{"color":"#FF7F9F9F","point":0.5},{"color":"#FF6B8A8A","point":0.6},{"color":"#FF567474","point":0.7},{"color":"#FF3F5D5D","point":0.8},{"color":"#FF264344","point":0.9},{"color":"#FF062727","point":1}],"backgroundColor":"#FFDDFFFF"},"isLightText":false},"itemType":"linkWithContentItem","type":"CollectionPromo"}},"Collection":{"f9c208bdbb09":{"id":"f9c208bdbb09","name":"Mobile App Development Publication","slug":"mobile-app-development-publication","tags":["PROGRAMMING","MOBILE APP DEVELOPMENT","ANDROID APP DEVELOPMENT","IOS APP DEVELOPMENT","ANDROIDDEV"],"creatorId":"5742b4fcf89e","description":"Sharing iOS, Android and relevant Mobile App Development Technology and Learning","shortDescription":"Sharing iOS, Android and relevant Mobile App Development…","image":{"imageId":"1*r5bO5bEjNCKLt6fKZbPdCA.png","filter":"","backgroundSize":"","originalWidth":570,"originalHeight":570,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":3639,"activeAt":1732250947866},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*MdMgVRTnupYGv9gYoKASQQ.png","filter":"","backgroundSize":"","originalWidth":1233,"originalHeight":115,"strategy":"resample","height":0,"width":0},"twitterUsername":"elye_project","facebookPageName":"elye.proj","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Mobile App Development","description":"for Android and iOS","backgroundImage":{"id":"1*C2ZAeP1Mo3zhxYDLB04i5Q.png","originalWidth":2400,"originalHeight":748},"logoImage":{},"alignment":1,"layout":6}},{"type":3,"promoMetadata":{"sectionHeader":"Mobile App Development","promoId":"ebb927f68e94"}},{"type":1,"postListMetadata":{"source":3,"layout":2,"number":5,"postIds":["f208489e9a80","e1e1723f392","1aef83d67659","c82283d15564","9cb8f664cfcf"]}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":14,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":2,"layout":4,"number":14,"postIds":[],"sectionHeader":"Trending"}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":14,"postIds":[],"tagSlug":"Android App Development","sectionHeader":"Android App Development"}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":14,"postIds":[],"tagSlug":"iOS App Development","sectionHeader":"iOS App Development"}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Android App Development","tagSlug":"android-app-development","url":"https://medium.com/mobile-app-development-publication/tagged/android-app-development","source":"tagSlug"},{"type":1,"title":"iOS App Development","tagSlug":"ios-app-development","url":"https://medium.com/mobile-app-development-publication/tagged/ios-app-development","source":"tagSlug"},{"type":1,"title":"Jetpack Compose","tagSlug":"jetpack-compose","url":"https://medium.com/mobile-app-development-publication/tagged/jetpack-compose","source":"tagSlug"},{"type":1,"title":"Kotlin","tagSlug":"kotlin","url":"https://medium.com/mobile-app-development-publication/tagged/kotlin","source":"tagSlug"},{"type":1,"title":"Swift","tagSlug":"swift","url":"https://medium.com/mobile-app-development-publication/tagged/swift","source":"tagSlug"},{"type":4,"title":"Dagger","url":"https://medium.com/mobile-app-development-publication/dagger/home","topicId":"c14e29bbdf41","source":"topicId"},{"type":4,"title":"Android UI","url":"https://medium.com/mobile-app-development-publication/android-ui/home","topicId":"8eae2192d281","source":"topicId"}],"colorBehavior":1,"collectionFeatures":[30],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Mobile App Development","description":"for Android and iOS","backgroundImage":{"id":"1*C2ZAeP1Mo3zhxYDLB04i5Q.png","originalWidth":2400,"originalHeight":748},"logoImage":{},"alignment":1,"layout":6},"subscriberCount":3639,"tagline":"Sharing Mobile App Development and Learning","isOptedIntoAurora":false,"newsletterV3":{"newsletterV3Id":"88a7c4c85c6","type":1,"name":"Update from Mobile App Development Publication","description":"A place where we learn and share our mobile app development experience on Medium","collectionId":"f9c208bdbb09","newsletterSlug":"update-from-mobile-app-development-publication","isSubscribed":false,"showPromo":false,"avatarImageId":"","creatorId":"5742b4fcf89e","showNewsletterPostsInCollectionHome":false,"exportableSubscribersCount":29,"subscribersCount":28,"promoHeadline":"","promoBody":"","replyToEmail":""},"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092799481,"type":"Collection"}},"User":{"5742b4fcf89e":{"userId":"5742b4fcf89e","name":"Elye - A One Eye Dev By His Grace","username":"elye-project","createdAt":1459594452304,"imageId":"1*0wVPGGR_3FMoPVGzT4nbTw.png","backgroundImageId":"","bio":"Sharing Software Learning, Life and Faith Journey","twitterScreenName":"elye_project","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"Elye Proj","optInToIceland":true,"subdomainCreatedAt":1602767973619,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,22,21,19,18,49,48,12,11,9,41,8,50,5,3,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-au","type":"User"},"7b8cf0bd846":{"userId":"7b8cf0bd846","name":"Adi Andrea","username":"adiandrea","createdAt":1454486173821,"imageId":"0*DJiLTxXxBct1jjWE.jpg","backgroundImageId":"","bio":"Converting my learning journey into stories","twitterScreenName":"kadek_adiandrea","allowNotes":1,"mediumMemberAt":1729647304034,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedAndroidApp":1729650170672,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,48,47,29,8,50,21,3,19,2,33,49],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"4588dfdfdccb":{"userId":"4588dfdfdccb","name":"Harman Khera","username":"harmanpreet.khera","createdAt":1562236871645,"imageId":"1*z0eDkJYyTzE_ZZbY9Cy7KA@2x.jpeg","backgroundImageId":"","bio":"Android Application Developer | Passionate Traveler, Avid Learner","twitterScreenName":"","allowNotes":1,"mediumMemberAt":1724908721971,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":true,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[8,47,29,12,19],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-in","type":"User"},"2e51b1e460ff":{"userId":"2e51b1e460ff","name":"Android Dev Nexus","username":"android-dev-nexus","createdAt":1726560912758,"imageId":"1*BNdLrGmBfjkUNkHuvoSNyw.jpeg","backgroundImageId":"","bio":"Your friendly neighborhood developers working at PayPal, turning Android fundamentals into concepts you’ll actually understand.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":1726561901344,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1727194811943,"firstOpenedAndroidApp":1726561139648,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1726562889005,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[47,50,29,19,49],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"6087acd1fe7":{"userId":"6087acd1fe7","name":"Avinash Reddy","username":"avinashreddy.kr","createdAt":1564484789035,"imageId":"1*OVsVq9-kre_cVylhx7YBPw.jpeg","backgroundImageId":"","bio":"Android SDE-3 @ Microsoft | Ex - Mercedes Benz","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1696437316495,"firstOpenedAndroidApp":1567923645546,"isMembershipTrialEligible":false,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":true,"userDismissableFlags":[29,12,8,21,35,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"}},"Post":{"f208489e9a80":{"id":"f208489e9a80","versionId":"cc70fb912e84","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Scaling Mobile Development with Micro-frontends","detectedLanguage":"en","latestVersion":"cc70fb912e84","latestPublishedVersion":"cc70fb912e84","hasUnpublishedEdits":false,"latestRev":1209,"createdAt":1679032680627,"updatedAt":1731504684892,"acceptedAt":0,"firstPublishedAt":1679050478259,"latestPublishedAt":1731504684892,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"It is more than just modularizing your app development","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*aNaza0DZhpH5O2Gh","filter":"","backgroundSize":"","originalWidth":6000,"originalHeight":4000,"strategy":"resample","height":0,"width":0},"wordCount":1362,"imageCount":6,"readingTime":6.089622641509434,"subtitle":"It is more than just modularizing your app development","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":27,"isBookmarked":false,"tags":[{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":453917,"metadata":{"postCount":453917,"coverImage":{"id":"1*IodtST4Qfwjaur7Pnn9kXg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://www.meetup.com/rea-unstackd/events/291927159/","alts":[{"type":3,"url":"meetup:"},{"type":2,"url":"meetup:"}],"httpStatus":200},{"url":"https://www.reddit.com/r/androiddev/comments/11sfye4/have_you_used_the_concept_of_microfrontends_to/","alts":[],"httpStatus":403},{"url":"https://www.reddit.com/r/androiddev/comments/11sfye4/comment/jceh6wb/?utm_source=share&utm_medium=web2x&context=3","alts":[],"httpStatus":403},{"url":"https://www.reddit.com/r/iOSProgramming/comments/11sfzgd/have_you_used_the_concept_of_microfrontends_to/","alts":[],"httpStatus":403},{"url":"https://unsplash.com/@brenoassis?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://microservices.io/","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c","alts":[{"type":3,"url":"medium://p/efb2e71a878c"},{"type":2,"url":"medium://p/efb2e71a878c"}],"httpStatus":200},{"url":"https://demo.microfrontends.com/about","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987","alts":[{"type":3,"url":"medium://p/a7290257d987"},{"type":2,"url":"medium://p/a7290257d987"}],"httpStatus":200},{"url":"https://www.aplyca.com/en/blog/micro-frontends-what-are-they-and-when-to-use-them","alts":[],"httpStatus":200},{"url":"https://betterprogramming.pub/the-id-principle-for-improving-any-software-design-solution-b375db8cc823","alts":[{"type":3,"url":"medium://p/b375db8cc823"},{"type":2,"url":"medium://p/b375db8cc823"}],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/scaling-mobile-development-365cab84781e","alts":[{"type":3,"url":"medium://p/365cab84781e"},{"type":2,"url":"medium://p/365cab84781e"}],"httpStatus":200},{"url":"https://betterprogramming.pub/why-hiring-more-developers-can-impede-team-productivity-831362ba243","alts":[{"type":3,"url":"medium://p/831362ba243"},{"type":2,"url":"medium://p/831362ba243"}],"httpStatus":200},{"url":"https://www.rea-group.com/about-us/news-and-insights/blog/from-monolith-to-micro-frontends-how-we-revolutionised-rea-mobile-app-development/","alts":[{"type":1,"url":"https://cdn.ampproject.org/c/s/www.rea-group.com/about-us/news-and-insights/blog/from-monolith-to-micro-frontends-how-we-revolutionised-rea-mobile-app-development/amp/"}],"httpStatus":200}],"version":"0.3","generatedAt":1731504687232},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":48,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"scaling-mobile-development-with-micro-frontends","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"scaling-mobile-development-with-micro-frontends-f208489e9a80","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*aNaza0DZhpH5O2Gh","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"r3WAWU5Fi5Q"}},{"name":"d949","type":13,"text":"Learning Mobile Development","markups":[],"alignment":1},{"name":"f532","type":3,"text":"Scaling Mobile Development with Micro-frontends","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"It is more than just modularizing your app development"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"6f3777989a8c","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1679050476946,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d949","type":13,"text":"Learning Mobile Development","markups":[]},{"name":"f532","type":3,"text":"Scaling Mobile Development with Micro-frontends","markups":[]},{"name":"b289","type":13,"text":"It is more than just modularizing your app development","markups":[]},{"name":"1d82","type":4,"text":"Photo by Breno Assis on Unsplash","markups":[{"type":3,"start":9,"end":20,"href":"https://unsplash.com/@brenoassis?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":24,"end":32,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*aNaza0DZhpH5O2Gh","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"r3WAWU5Fi5Q"}},{"name":"85bc","type":1,"text":"Recently, I share an upcoming talk below on Scaling App Development using Micro-frontends below on Reddit’s androiddev and iosprogramming subreddit.","markups":[{"type":3,"start":21,"end":89,"href":"https://www.meetup.com/rea-unstackd/events/291927159/","title":"","rel":"","anchorType":0},{"type":3,"start":108,"end":118,"href":"https://www.reddit.com/r/androiddev/comments/11sfye4/have_you_used_the_concept_of_microfrontends_to/","title":"","rel":"","anchorType":0},{"type":3,"start":123,"end":137,"href":"https://www.reddit.com/r/iOSProgramming/comments/11sfzgd/have_you_used_the_concept_of_microfrontends_to/","title":"","rel":"","anchorType":0}],"hasDropCap":true},{"name":"6dbd","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"b849bcd4c85b0b0ffb3550e504d329ca","iframeWidth":500,"iframeHeight":281,"thumbnailUrl":"https://i.embed.ly/1/image?url=https%3A%2F%2Fabs.twimg.com%2Ferrors%2Flogo46x38.png&key=a19fcc184b9711e1b4764040d3dc5c07"}},{"name":"5df2","type":1,"text":"Unexpectedly, there is this question. What is the use of making Mobile Application scalable? It is a fair question.","markups":[{"type":3,"start":38,"end":92,"href":"https://www.reddit.com/r/androiddev/comments/11sfye4/comment/jceh6wb/?utm_source=share&utm_medium=web2x&context=3","title":"","rel":"noopener","anchorType":0},{"type":1,"start":38,"end":92},{"type":2,"start":38,"end":93}]},{"name":"3ab9","type":11,"text":"","markups":[],"layout":1,"iframe":{"mediaResourceId":"0a0a075f044b3e6ac7fdc7f228d4385b","iframeWidth":600,"iframeHeight":400}},{"name":"92de","type":1,"text":"There’s a misconception that all App Development is just…","markups":[]}],"sections":[{"name":"1b4e","startIndex":0}]},"isFullContent":false,"subtitle":"It is more than just modularizing your app development"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e1e1723f392":{"id":"e1e1723f392","versionId":"e93f895676b5","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"The onBackPressed Is Now Deprecated in Android 13 and Might Need Major Changes in Existing Apps","detectedLanguage":"en","latestVersion":"e93f895676b5","latestPublishedVersion":"e93f895676b5","hasUnpublishedEdits":false,"latestRev":2579,"createdAt":1693489358179,"updatedAt":1722301054281,"acceptedAt":0,"firstPublishedAt":1693751314065,"latestPublishedAt":1693810495090,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Migrate to Android 13's “Predictive Back” Before It’s Too Late","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*auvWOv4025FcpgXs","filter":"","backgroundSize":"","originalWidth":5150,"originalHeight":3219,"strategy":"resample","height":0,"width":0},"wordCount":3282,"imageCount":31,"readingTime":14.684905660377357,"subtitle":"Migrate to Android 13's “Predictive Back” Before It’s Too Late","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":143,"isBookmarked":false,"tags":[{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"google","name":"Google","postCount":114249,"metadata":{"postCount":114249,"coverImage":{"id":"0*MXyZrVn6u_kuBzPj.jpg","originalWidth":1366,"originalHeight":769,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":144529,"metadata":{"postCount":144529,"coverImage":{"id":"1*IVdzt2CKqQK-moWlu18X6Q.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":10,"links":{"entries":[{"url":"https://developer.android.com/develop/ui/views/touch-and-input/gestures/gesturenav","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/navigation-custom-back","alts":[],"httpStatus":200},{"url":"https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture","alts":[],"httpStatus":200},{"url":"https://medium.com/p/1aef83d67659","alts":[{"type":3,"url":"medium://p/1aef83d67659"},{"type":2,"url":"medium://p/1aef83d67659"}],"httpStatus":200},{"url":"https://medium.com/p/d16fb3e827e5","alts":[{"type":3,"url":"medium://p/d16fb3e827e5"},{"type":2,"url":"medium://p/d16fb3e827e5"}],"httpStatus":200},{"url":"https://github.com/elye/demo_android_predictive_back_migration","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=Elpqr5xpLxQ","alts":[{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=Elpqr5xpLxQ&feature=applinks"},{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=Elpqr5xpLxQ&feature=applinks"}],"httpStatus":200},{"url":"https://unsplash.com/@marekpiwnicki?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1693810495357},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":578,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"migrate-to-android-13-predictive-back-soon-before-its-too-late","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"migrate-to-android-13-predictive-back-soon-before-its-too-late-e1e1723f392","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*auvWOv4025FcpgXs","originalWidth":5150,"originalHeight":3219,"isFeatured":true,"unsplashPhotoId":"bKYO5IQ2mKI"}},{"name":"previewTitle","type":3,"text":"The onBackPressed Is Now Deprecated in Android 13 and Might Need Major Changes in Existing Apps","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Migrate to Android 13's “Predictive Back” Before It’s Too Late"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"3af36e5f740","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1693751312629,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"bb8d","type":13,"text":"Learning Android Development","markups":[]},{"name":"ce9c","type":3,"text":"The onBackPressed Is Now Deprecated in Android 13 and Might Need Major Changes in Existing Apps","markups":[]},{"name":"9d5c","type":13,"text":"Migrate to Android 13's “Predictive Back” Before It’s Too Late","markups":[]},{"name":"8028","type":4,"text":"Photo by Marek Piwnicki on Unsplash","markups":[{"type":3,"start":9,"end":23,"href":"https://unsplash.com/@marekpiwnicki?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":27,"end":35,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*auvWOv4025FcpgXs","originalWidth":5150,"originalHeight":3219,"isFeatured":true,"unsplashPhotoId":"bKYO5IQ2mKI"}},{"name":"0d0c","type":1,"text":"Other than Push Notification Permission, one of the most prominent features introduced in Android 13 is the Predictive Back feature. It is not a feature that is enabled by default, but it will be the future direction of Android beginning Android 13.","markups":[{"type":3,"start":11,"end":39,"href":"https://medium.com/p/1aef83d67659","title":"","rel":"","anchorType":0}],"hasDropCap":true},{"name":"0453","type":1,"text":"Google has warned","markups":[]},{"name":"14b7","type":6,"text":"Important: We strongly recommend that…","markups":[{"type":3,"start":0,"end":185,"href":"https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture","title":"","rel":"","anchorType":0},{"type":1,"start":0,"end":10}]}],"sections":[{"name":"92b4","startIndex":0}]},"isFullContent":false,"subtitle":"Migrate to Android 13's “Predictive Back” Before It’s Too Late"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1aef83d67659":{"id":"1aef83d67659","versionId":"13317fca3b46","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Secure Your “Only” Chance to Ask for Android Post-Notification Permission","detectedLanguage":"en","latestVersion":"13317fca3b46","latestPublishedVersion":"13317fca3b46","hasUnpublishedEdits":false,"latestRev":1588,"createdAt":1693023005537,"updatedAt":1694353235365,"acceptedAt":0,"firstPublishedAt":1693061403517,"latestPublishedAt":1694353235365,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*igShgG2-U_kP1568","filter":"","backgroundSize":"","originalWidth":3840,"originalHeight":2160,"strategy":"resample","height":0,"width":0},"wordCount":1638,"imageCount":12,"readingTime":7.531132075471698,"subtitle":"Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":17,"isBookmarked":false,"tags":[{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"google","name":"Google","postCount":114249,"metadata":{"postCount":114249,"coverImage":{"id":"0*MXyZrVn6u_kuBzPj.jpg","originalWidth":1366,"originalHeight":769,"isFeatured":true}},"type":"Tag"},{"slug":"push-notification","name":"Push Notification","postCount":3596,"metadata":{"postCount":3596,"coverImage":{"id":"1*XwdYiqtbbbYgOmTTDo4sKw.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://stackoverflow.com/questions/76962136/how-to-i-request-for-post-notification-permission-for-android-12l-or-lower","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@ashin_k_suresh?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_android_push_notification_permission","alts":[],"httpStatus":200},{"url":"https://developer.android.com/training/permissions/requesting#request-permission","alts":[],"httpStatus":200},{"url":"https://source.android.com/docs/core/display/notification-perm","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/notifications/notification-permission","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/notifications/notification-permission#wait-to-show-prompt","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1694353236362},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":45,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"secure-your-only-chance-to-ask-for-android-push-notification-permission","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"secure-your-only-chance-to-ask-for-android-push-notification-permission-1aef83d67659","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*igShgG2-U_kP1568","originalWidth":3840,"originalHeight":2160,"isFeatured":true,"unsplashPhotoId":"mkxTOAxqTTo"}},{"name":"334b","type":13,"text":"Learning Android Development","markups":[],"alignment":1},{"name":"6b97","type":3,"text":"Secure Your “Only” Chance to Ask for Android Post-Notification Permission","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"a72d80a135a9","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1693061402471,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"334b","type":13,"text":"Learning Android Development","markups":[]},{"name":"6b97","type":3,"text":"Secure Your “Only” Chance to Ask for Android Post-Notification Permission","markups":[]},{"name":"4ce7","type":13,"text":"Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows","markups":[]},{"name":"543a","type":4,"text":"Photo by Ashin K Suresh on Unsplash","markups":[{"type":3,"start":9,"end":23,"href":"https://unsplash.com/@ashin_k_suresh?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":27,"end":35,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*igShgG2-U_kP1568","originalWidth":3840,"originalHeight":2160,"isFeatured":true,"unsplashPhotoId":"mkxTOAxqTTo"}},{"name":"d3ae","type":1,"text":"Do you know that beginning Android 13, you are only given “one” chance to ask the user for Post Notification Permission? If they disallow it, you can not ask them again.","markups":[],"hasDropCap":true},{"name":"2ccc","type":1,"text":"Therefore it is vital for the developer to provide the best rationale to avoid losing this permission. But what…","markups":[]}],"sections":[{"name":"8729","startIndex":0}]},"isFullContent":false,"subtitle":"Learn Some Undocumented Android Post Notification Permission Request Behaviors and Flows"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"c82283d15564":{"id":"c82283d15564","versionId":"eba286893d58","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Negative Padding For Jetpack Compose Made Possible","detectedLanguage":"en","latestVersion":"eba286893d58","latestPublishedVersion":"eba286893d58","hasUnpublishedEdits":false,"latestRev":667,"createdAt":1687342206857,"updatedAt":1687872788318,"acceptedAt":0,"firstPublishedAt":1687352982743,"latestPublishedAt":1687872788318,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*1m2hiuc-KeIbPEdH","filter":"","backgroundSize":"","originalWidth":6000,"originalHeight":4000,"strategy":"resample","height":0,"width":0},"wordCount":784,"imageCount":9,"readingTime":4.158490566037735,"subtitle":"From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":45,"isBookmarked":false,"tags":[{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6237,"metadata":{"postCount":6237,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@sxoxm?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://stackoverflow.com/a/66408776/3286489","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_android_jetpack_compose_custom_layout","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/jetpack-compose-custom-layout-made-easy-b5743f8cc82c","alts":[{"type":2,"url":"medium://p/b5743f8cc82c"},{"type":3,"url":"medium://p/b5743f8cc82c"}],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/demystify-jetpack-compose-layout-constraint-and-size-setting-b89fa2c43f1c","alts":[{"type":3,"url":"medium://p/b89fa2c43f1c"},{"type":2,"url":"medium://p/b89fa2c43f1c"}],"httpStatus":200}],"version":"0.3","generatedAt":1687872789131},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":224,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"negative-padding-for-jetpack-compose-made-possible","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"negative-padding-for-jetpack-compose-made-possible-c82283d15564","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*1m2hiuc-KeIbPEdH","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"A-btl_OPYWA"}},{"name":"1c16","type":13,"text":"Learn Android Development","markups":[],"alignment":1},{"name":"4c19","type":3,"text":"Negative Padding For Jetpack Compose Made Possible","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"4e845bd198d7","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1687352981345,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1c16","type":13,"text":"Learn Android Development","markups":[]},{"name":"4c19","type":3,"text":"Negative Padding For Jetpack Compose Made Possible","markups":[]},{"name":"fd0a","type":13,"text":"From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose","markups":[]},{"name":"9280","type":4,"text":"Photo by Sven Mieke on Unsplash","markups":[{"type":3,"start":9,"end":19,"href":"https://unsplash.com/@sxoxm?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":23,"end":31,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*1m2hiuc-KeIbPEdH","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"A-btl_OPYWA"}},{"name":"d132","type":1,"text":"One of the features in Android View XML Layout that is not easily found in Jetpack Compose is Negative Padding. In XML View we can have both positive and negative padding easily.","markups":[{"type":1,"start":94,"end":110}],"hasDropCap":true}],"sections":[{"name":"0916","startIndex":0}]},"isFullContent":false,"subtitle":"From Bad To Better Solution: Different Ways of Negative Padding for Jetpack Compose"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"9cb8f664cfcf":{"id":"9cb8f664cfcf","versionId":"8742026f1cac","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Android App Signing —A Refresher","detectedLanguage":"en","latestVersion":"8742026f1cac","latestPublishedVersion":"8742026f1cac","hasUnpublishedEdits":false,"latestRev":1366,"createdAt":1690242220169,"updatedAt":1690404665884,"acceptedAt":0,"firstPublishedAt":1690371405789,"latestPublishedAt":1690379961540,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*WhV_HVvRnfWaJCL3","filter":"","backgroundSize":"","originalWidth":7360,"originalHeight":4912,"strategy":"resample","height":0,"width":0},"wordCount":2016,"imageCount":22,"readingTime":9.45754716981132,"subtitle":"App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":45,"isBookmarked":false,"tags":[{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"android","name":"Android","postCount":144529,"metadata":{"postCount":144529,"coverImage":{"id":"1*IVdzt2CKqQK-moWlu18X6Q.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@homajob?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://stackoverflow.com/questions/12642293/change-signing-key-keep-packagename/59617776#59617776","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/android-apk-to-app-bundle-made-simple-e12c52e8641","alts":[{"type":3,"url":"medium://p/e12c52e8641"},{"type":2,"url":"medium://p/e12c52e8641"}],"httpStatus":200},{"url":"https://stackoverflow.com/a/59617776/3286489","alts":[],"httpStatus":200},{"url":"https://source.android.com/docs/security/features/apksigning","alts":[],"httpStatus":200},{"url":"https://support.google.com/googleplay/android-developer/answer/9842756","alts":[],"httpStatus":200},{"url":"https://play.google.com/console/developers/app/keymanagement","alts":[],"httpStatus":200},{"url":"https://developer.android.com/studio/publish/app-signing","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=odv_1fxt9BI","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=odv_1fxt9BI&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=odv_1fxt9BI&feature=applinks"}],"httpStatus":200},{"url":"https://developer.android.com/studio/publish/app-signing#sign-apk","alts":[],"httpStatus":200},{"url":"https://medium.com/androiddevelopers/answers-to-common-questions-about-app-signing-by-google-play-b28fef836af0","alts":[{"type":3,"url":"medium://p/b28fef836af0"},{"type":2,"url":"medium://p/b28fef836af0"}],"httpStatus":200}],"version":"0.3","generatedAt":1690379962655},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":191,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"android-app-signing-a-refresher","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"android-app-signing-a-refresher-9cb8f664cfcf","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*WhV_HVvRnfWaJCL3","originalWidth":7360,"originalHeight":4912,"isFeatured":true,"unsplashPhotoId":"OQMZwNd3ThU"}},{"name":"previewTitle","type":3,"text":"Android App Signing —A Refresher","alignment":1},{"name":"previewSubtitle","type":13,"text":"App Signing — An essential Android App development knowledge that is…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"2aa61842018e","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1690371404414,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ac6c","type":13,"text":"Learning Android Development","markups":[]},{"name":"471d","type":3,"text":"Android App Signing —A Refresher","markups":[]},{"name":"1b59","type":13,"text":"App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy when needed.","markups":[]},{"name":"ac7e","type":4,"text":"Photo by Scott Graham on Unsplash","markups":[{"type":3,"start":9,"end":21,"href":"https://unsplash.com/@homajob?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":25,"end":33,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*WhV_HVvRnfWaJCL3","originalWidth":7360,"originalHeight":4912,"isFeatured":true,"unsplashPhotoId":"OQMZwNd3ThU"}},{"name":"6559","type":1,"text":"One of the crucial bits of Android development is setting up “signing the App” and publishing it to the Play Store. It’s usually a one-off process for each app published. Hence it’s a step not only can be easily forgotten, but also the knowledge one can become dated.","markups":[],"hasDropCap":true},{"name":"a327","type":1,"text":"The last…","markups":[]}],"sections":[{"name":"9b71","startIndex":0}]},"isFullContent":false,"subtitle":"App Signing — An essential Android App development knowledge that is rarely used. A good read to check through them, as it will be handy."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"c4975bd00621":{"id":"c4975bd00621","versionId":"ee35eac41da4","creatorId":"7b8cf0bd846","homeCollectionId":"f9c208bdbb09","title":"Custom Android Push Notification Use Case: Cloning Grab Live Tracking Notification","detectedLanguage":"en","latestVersion":"ee35eac41da4","latestPublishedVersion":"ee35eac41da4","hasUnpublishedEdits":false,"latestRev":767,"createdAt":1732065596992,"updatedAt":1732330628448,"acceptedAt":0,"firstPublishedAt":1732250947785,"latestPublishedAt":1732250947785,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Exploring The Power Of RemoteViews","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*gjCtJJYxpcWmGDhR","filter":"","backgroundSize":"","originalWidth":3500,"originalHeight":2479,"strategy":"resample","height":0,"width":0},"wordCount":1305,"imageCount":5,"readingTime":5.7578616352201255,"subtitle":"Exploring The Power Of RemoteViews","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":7,"isBookmarked":false,"tags":[{"slug":"remoteviews","name":"Remoteviews","postCount":8,"metadata":{"postCount":8,"coverImage":{"id":"0*gjCtJJYxpcWmGDhR","originalWidth":3500,"originalHeight":2479,"isFeatured":true,"unsplashPhotoId":"Cy_GT5VzANs"}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"push-notification","name":"Push Notification","postCount":3596,"metadata":{"postCount":3596,"coverImage":{"id":"1*XwdYiqtbbbYgOmTTDo4sKw.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://engineering.grab.com/live-activity-2","alts":[],"httpStatus":200},{"url":"https://stackoverflow.com/questions/79125396/how-uber-made-their-progress-bar-in-android-notification#comment139522570_79125396","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@vidarnm?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://github.com/dekzitfz/ProgressNotif","alts":[],"httpStatus":200},{"url":"https://developer.android.com/develop/ui/views/notifications/custom-notification","alts":[],"httpStatus":200},{"url":"https://developer.android.com/reference/android/widget/RemoteViews","alts":[],"httpStatus":200},{"url":"https://www.grab.com/sg/inside-grab/stories/live-activities-grab-lock-screen-ios-apple/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1732250948949},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":102,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"custom-android-push-notification-use-case-cloning-grab-live-tracking-notification","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"custom-android-push-notification-use-case-cloning-grab-live-tracking-notification-c4975bd00621","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*gjCtJJYxpcWmGDhR","originalWidth":3500,"originalHeight":2479,"isFeatured":true,"unsplashPhotoId":"Cy_GT5VzANs"}},{"name":"previewTitle","type":3,"text":"Custom Android Push Notification Use Case: Cloning Grab Live Tracking Notification","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Exploring The Power Of RemoteViews"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1732200277957,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"91e3","type":13,"text":"Learning android Development","markups":[]},{"name":"97df","type":3,"text":"Custom Android Push Notification Use Case: Cloning Grab Live Tracking Notification","markups":[]},{"name":"f650","type":13,"text":"Exploring The Power Of RemoteViews","markups":[]},{"name":"69c4","type":4,"text":"Photo by Vidar Nordli-Mathisen on Unsplash","markups":[{"type":3,"start":9,"end":30,"href":"https://unsplash.com/@vidarnm?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":34,"end":42,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*gjCtJJYxpcWmGDhR","originalWidth":3500,"originalHeight":2479,"isFeatured":true,"unsplashPhotoId":"Cy_GT5VzANs"}},{"name":"4edb","type":1,"text":"Recently, I’ve read about how Grab implementing Apple’s Live Activities on their IOS app and gives user a new way to track their rides & deliveries status progress right on the phone lock screen. With Live Activities, users do not have to switch back and forth between apps either. This…","markups":[],"hasDropCap":true}],"sections":[{"name":"e867","startIndex":0}]},"isFullContent":false,"subtitle":"Exploring The Power Of RemoteViews"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"efb2e71a878c":{"id":"efb2e71a878c","versionId":"00445f0307d4","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Enable SwiftUI Views Sharing Across Packages Without Dependency Constraint","detectedLanguage":"en","latestVersion":"00445f0307d4","latestPublishedVersion":"00445f0307d4","hasUnpublishedEdits":false,"latestRev":166,"createdAt":1731327618237,"updatedAt":1731528614056,"acceptedAt":0,"firstPublishedAt":1731328526453,"latestPublishedAt":1731329001917,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*JNVtgEEM6B1o62lq","filter":"","backgroundSize":"","originalWidth":4581,"originalHeight":3058,"strategy":"resample","height":0,"width":0},"wordCount":1017,"imageCount":7,"readingTime":4.887735849056604,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":5,"isBookmarked":false,"tags":[{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"ios-development","name":"iOS Development","postCount":6939,"metadata":{"postCount":6939,"coverImage":{"id":"0*sU7oOIPkQyMZjelB","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"swiftui","name":"Swiftui","postCount":12744,"metadata":{"postCount":12744,"coverImage":{"id":"0*BOUIHhY2pM4iHVXh","originalWidth":4118,"originalHeight":2745,"isFeatured":true,"unsplashPhotoId":"H_tdgaW-0fU"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821","alts":[{"type":3,"url":"medium://p/4572afb99821"},{"type":2,"url":"medium://p/4572afb99821"}],"httpStatus":200},{"url":"https://unsplash.com/@woodpecker65?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987","alts":[{"type":3,"url":"medium://p/a7290257d987"},{"type":2,"url":"medium://p/a7290257d987"}],"httpStatus":200},{"url":"https://github.com/elye/demo_ios_cross_package_screen_sharing","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1731329002512},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":18,"sectionCount":2,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"enable-swiftui-views-sharing-across-packageswithout-dependency-constraint","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*JNVtgEEM6B1o62lq","originalWidth":4581,"originalHeight":3058,"isFeatured":true,"unsplashPhotoId":"8S96OpxSlvg"}},{"name":"0813","type":13,"text":"Learning Android Development","markups":[],"alignment":1},{"name":"ed24","type":3,"text":"Enable SwiftUI Views Sharing Across Packages Without Dependency…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"15cb89366237","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1731328525051,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0813","type":13,"text":"Learning Android Development","markups":[]},{"name":"ed24","type":3,"text":"Enable SwiftUI Views Sharing Across Packages Without Dependency Constraint","markups":[]},{"name":"38d2","type":13,"text":"An Aligned Autonomy Scaling Mobile Development Approach","markups":[]},{"name":"8da0","type":4,"text":"Photo by Christian Stahl on Unsplash","markups":[{"type":3,"start":9,"end":24,"href":"https://unsplash.com/@woodpecker65?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":28,"end":36,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*JNVtgEEM6B1o62lq","originalWidth":4581,"originalHeight":3058,"isFeatured":true,"unsplashPhotoId":"8S96OpxSlvg"}},{"name":"e736","type":1,"text":"Imagine you have multiple teams working on different screens within your app, with each team responsible for its own screen. Ideally, these screens should be completely independent from one another. However, there are situations where one team may need to load a view created by another team, as shown below.","markups":[],"hasDropCap":true},{"name":"c2ed","type":1,"text":"…","markups":[]}],"sections":[{"name":"34b7","startIndex":0}]},"isFullContent":false,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"225b855ba5b8":{"id":"225b855ba5b8","versionId":"30599f561477","creatorId":"7b8cf0bd846","homeCollectionId":"f9c208bdbb09","title":"How I Migrate Android Build Configurations From Groovy To Kotlin DSL","detectedLanguage":"en","latestVersion":"30599f561477","latestPublishedVersion":"30599f561477","hasUnpublishedEdits":false,"latestRev":813,"createdAt":1731243411192,"updatedAt":1733973038083,"acceptedAt":0,"firstPublishedAt":1731327328687,"latestPublishedAt":1731327328687,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"See you later, Groovy!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*9VkZC1tT8yb8d2_F","filter":"","backgroundSize":"","originalWidth":3943,"originalHeight":2700,"strategy":"resample","height":0,"width":0},"wordCount":1499,"imageCount":1,"readingTime":5.856603773584906,"subtitle":"See you later, Groovy!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":2,"isBookmarked":false,"tags":[{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"groovy","name":"Groovy","postCount":1403,"metadata":{"postCount":1403,"coverImage":{"id":"1*JgkrMpGsiytlXjkNSD5YRw.png","originalWidth":875,"originalHeight":782}},"type":"Tag"},{"slug":"kotlin-dsl","name":"Kotlin Dsl","postCount":120,"metadata":{"postCount":120,"coverImage":{"id":"1*rM3Wnogztfzt2sXtDOk6-w.png","originalWidth":1261,"originalHeight":717,"isFeatured":true}},"type":"Tag"},{"slug":"kotlin","name":"Kotlin","postCount":31400,"metadata":{"postCount":31400,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@hgudka97?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1731327330184},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":14,"sectionCount":8,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"how-i-migrate-android-build-configurations-from-groovy-to-kotlin-dsl","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"how-i-migrate-android-build-configurations-from-groovy-to-kotlin-dsl-225b855ba5b8","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*9VkZC1tT8yb8d2_F","originalWidth":3943,"originalHeight":2700,"isFeatured":true,"unsplashPhotoId":"aKcVSSDotgo"}},{"name":"d891","type":13,"text":"Learning Android Development","markups":[],"alignment":1},{"name":"e874","type":3,"text":"How I Migrate Android Build Configurations From Groovy To Kotlin DSL","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"See you later, Groovy!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1731310170589,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d891","type":13,"text":"Learning Android Development","markups":[]},{"name":"e874","type":3,"text":"How I Migrate Android Build Configurations From Groovy To Kotlin DSL","markups":[]},{"name":"6c00","type":13,"text":"Journey towards all Kotlin in Android","markups":[]},{"name":"9467","type":4,"text":"Photo by Harshil Gudka on Unsplash","markups":[{"type":3,"start":9,"end":22,"href":"https://unsplash.com/@hgudka97?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":26,"end":34,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":3,"metadata":{"id":"0*9VkZC1tT8yb8d2_F","originalWidth":3943,"originalHeight":2700,"isFeatured":true,"unsplashPhotoId":"aKcVSSDotgo"}},{"name":"f0ed","type":1,"text":"For a long long time, even since Android Studio was released for the first time, we as Android developers have used Groovy language to define build configurations on our projects. But an era has come to an end.","markups":[],"hasDropCap":true},{"name":"fb25","type":6,"text":"For you who create new projects using the latest Android Studio may…","markups":[]}],"sections":[{"name":"7c0b","startIndex":0}]},"isFullContent":false,"subtitle":"See you later, Groovy!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a7290257d987":{"id":"a7290257d987","versionId":"42324efe608e","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Enable Composable Views Sharing Across Modules Without Dependency Constraint","detectedLanguage":"en","latestVersion":"42324efe608e","latestPublishedVersion":"42324efe608e","hasUnpublishedEdits":false,"latestRev":558,"createdAt":1731039135842,"updatedAt":1731536060946,"acceptedAt":0,"firstPublishedAt":1731046349629,"latestPublishedAt":1731328799808,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*l8VttMnsOYFqPeQd","filter":"","backgroundSize":"","originalWidth":4288,"originalHeight":2848,"strategy":"resample","height":0,"width":0},"wordCount":951,"imageCount":7,"readingTime":4.638679245283019,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":21,"isBookmarked":false,"tags":[{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":331934,"metadata":{"postCount":331934,"coverImage":{"id":"1*IodtST4Qfwjaur7Pnn9kXg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":4,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821","alts":[{"type":3,"url":"medium://p/4572afb99821"},{"type":2,"url":"medium://p/4572afb99821"}],"httpStatus":200},{"url":"https://unsplash.com/@benhershey?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_android_cross_module_screen_sharing","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/enable-swiftui-views-sharing-across-packageswithout-dependency-constraint-efb2e71a878c","alts":[{"type":3,"url":"medium://p/efb2e71a878c"},{"type":2,"url":"medium://p/efb2e71a878c"}],"httpStatus":200}],"version":"0.3","generatedAt":1731328800477},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":56,"sectionCount":2,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"enable-composable-views-sharing-across-modules-without-dependency-constraint","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"enable-composable-views-sharing-across-modules-without-dependency-constraint-a7290257d987","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*l8VttMnsOYFqPeQd","originalWidth":4288,"originalHeight":2848,"isFeatured":true,"unsplashPhotoId":"10Y5hYSMdD4"}},{"name":"ef5d","type":13,"text":"Learning Android Development","markups":[],"alignment":1},{"name":"ed24","type":3,"text":"Enable Composable Views Sharing Across Modules Without Dependency…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"d0f309180c8e","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1731046348278,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ef5d","type":13,"text":"Learning Android Development","markups":[]},{"name":"ed24","type":3,"text":"Enable Composable Views Sharing Across Modules Without Dependency Constraint","markups":[]},{"name":"38d2","type":13,"text":"An Aligned Autonomy Scaling Mobile Development Approach","markups":[]},{"name":"563f","type":4,"text":"Photo by Ben Hershey on Unsplash","markups":[{"type":3,"start":9,"end":20,"href":"https://unsplash.com/@benhershey?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":24,"end":32,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*l8VttMnsOYFqPeQd","originalWidth":4288,"originalHeight":2848,"isFeatured":true,"unsplashPhotoId":"10Y5hYSMdD4"}},{"name":"e736","type":1,"text":"Imagine you have multiple teams working on different screens within your app, with each team responsible for its own screen. Ideally, these screens should be completely independent from one another. However, there are situations where one team may need to load a view created by another team, as shown below.","markups":[],"hasDropCap":true},{"name":"c2ed","type":1,"text":"…","markups":[]}],"sections":[{"name":"50ca","startIndex":0}]},"isFullContent":false,"subtitle":"An Aligned Autonomy Scaling Mobile Development Approach"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3d8beb05c2e8":{"id":"3d8beb05c2e8","versionId":"260e7ada4bf3","creatorId":"7b8cf0bd846","homeCollectionId":"f9c208bdbb09","title":"How To Prevent Reverse Engineering On Your Android App","detectedLanguage":"en","latestVersion":"260e7ada4bf3","latestPublishedVersion":"260e7ada4bf3","hasUnpublishedEdits":false,"latestRev":748,"createdAt":1730784765192,"updatedAt":1733973032578,"acceptedAt":0,"firstPublishedAt":1730932426499,"latestPublishedAt":1730932488279,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Or at least make it more difficult","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*Cg7czJ28GT7ZLybl","filter":"","backgroundSize":"","originalWidth":5760,"originalHeight":3840,"strategy":"resample","height":0,"width":0},"wordCount":816,"imageCount":1,"readingTime":3.2792452830188683,"subtitle":"Or at least make it more difficult","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":2,"isBookmarked":false,"tags":[{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"android-development","name":"Android Development","postCount":5330,"metadata":{"postCount":5330,"coverImage":{"id":"0*qW2txGPW2ktT1KyL","originalWidth":4032,"originalHeight":3024,"isFeatured":true,"unsplashPhotoId":"lud4OaUCP4Q"}},"type":"Tag"},{"slug":"reverse-engineering","name":"Reverse Engineering","postCount":3964,"metadata":{"postCount":3964,"coverImage":{"id":"1*4ZIQ-740fP1euQBNimmGCw.png","originalWidth":609,"originalHeight":645,"isFeatured":true}},"type":"Tag"},{"slug":"security","name":"Security","postCount":124591,"metadata":{"postCount":124591,"coverImage":{"id":"1*r0cTT7YQuuR5-jzNrptzEA.jpeg","originalWidth":1280,"originalHeight":719}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@markusspiske?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://www.guardsquare.com/proguard","alts":[],"httpStatus":200},{"url":"https://www.guardsquare.com/dexguard","alts":[],"httpStatus":200},{"url":"https://developer.android.com/privacy-and-security/keystore","alts":[],"httpStatus":200},{"url":"https://github.com/sqlcipher/sqlcipher-android","alts":[],"httpStatus":200},{"url":"https://developer.android.com/topic/libraries/architecture/datastore","alts":[],"httpStatus":200},{"url":"https://developer.android.com/google/play/integrity","alts":[],"httpStatus":200},{"url":"https://github.com/google/secrets-gradle-plugin","alts":[],"httpStatus":200},{"url":"https://github.com/sqlcipher/sqlcipher-android?tab=readme-ov-file#sqlcipher-for-android-room-integration","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730932488869},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":23,"sectionCount":2,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"how-to-prevent-reverse-engineering-on-your-android-app","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"how-to-prevent-reverse-engineering-on-your-android-app-3d8beb05c2e8","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*Cg7czJ28GT7ZLybl","originalWidth":5760,"originalHeight":3840,"isFeatured":true,"unsplashPhotoId":"Jjue0ESkXAU"}},{"name":"795b","type":13,"text":"Learning Android Development","markups":[],"alignment":1},{"name":"7a6d","type":3,"text":"How To Prevent Reverse Engineering On Your Android App","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Or at least make it more difficult"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730814461103,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"795b","type":13,"text":"Learning Android Development","markups":[]},{"name":"7a6d","type":3,"text":"How To Prevent Reverse Engineering On Your Android App","markups":[]},{"name":"7770","type":13,"text":"Or at least make it more difficult","markups":[]},{"name":"56cb","type":4,"text":"Photo by Markus Spiske on Unsplash","markups":[{"type":3,"start":9,"end":22,"href":"https://unsplash.com/@markusspiske?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":26,"end":34,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*Cg7czJ28GT7ZLybl","originalWidth":5760,"originalHeight":3840,"isFeatured":true,"unsplashPhotoId":"Jjue0ESkXAU"}},{"name":"a2b0","type":1,"text":"You have successfully built an awesome Android application. It has excellent UI & UX. Your application launched successfully, has many active users, and become popular. Everything seems good and works as intended, until suddenly something unusual things happens.","markups":[]},{"name":"8bdd","type":1,"text":"Your API retrieves so many unusual requests, your application credentials get used…","markups":[]}],"sections":[{"name":"5b0c","startIndex":0}]},"isFullContent":false,"subtitle":"Or at least make it more difficult"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e679cd2bbca0":{"id":"e679cd2bbca0","versionId":"b013325dad7f","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"AI vs Human: Top Tabs Examples for iOS App","detectedLanguage":"en","latestVersion":"b013325dad7f","latestPublishedVersion":"b013325dad7f","hasUnpublishedEdits":false,"latestRev":439,"createdAt":1730341731767,"updatedAt":1731566581351,"acceptedAt":0,"firstPublishedAt":1730343735240,"latestPublishedAt":1730345316892,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*GJ8ovItCBZzW6-wf","filter":"","backgroundSize":"","originalWidth":5184,"originalHeight":3456,"strategy":"resample","height":0,"width":0},"wordCount":973,"imageCount":7,"readingTime":4.721698113207547,"subtitle":"Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":4,"isBookmarked":false,"tags":[{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"ios-development","name":"iOS Development","postCount":6939,"metadata":{"postCount":6939,"coverImage":{"id":"0*sU7oOIPkQyMZjelB","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":331934,"metadata":{"postCount":331934,"coverImage":{"id":"1*IodtST4Qfwjaur7Pnn9kXg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://www.youtube.com/watch?v=QUPg0mZLBD4","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@esver?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_ios_top_tabs","alts":[],"httpStatus":200},{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://stackoverflow.com/questions/79140724/how-to-move-swiftui-bottom-tab-to-the-top/79141931#79141931","alts":[],"httpStatus":200},{"url":"https://github.com/QuynhNguyen/SlidingTabView","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730345317026},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":22,"sectionCount":1,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"ai-vs-human-top-tabs-examples-for-ios-app","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"ai-vs-human-top-tabs-examples-for-ios-app-e679cd2bbca0","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*GJ8ovItCBZzW6-wf","originalWidth":5184,"originalHeight":3456,"isFeatured":true,"unsplashPhotoId":"uMykgs8uE1E"}},{"name":"d00c","type":13,"text":"Learning iOS Development","markups":[],"alignment":1},{"name":"55a0","type":3,"text":"AI vs Human: Top Tabs Examples for iOS App","markups":[],"alignment":1},{"name":"d32a","type":13,"text":"Examples from…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"b9baa093515c","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730343733715,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d00c","type":13,"text":"Learning iOS Development","markups":[]},{"name":"55a0","type":3,"text":"AI vs Human: Top Tabs Examples for iOS App","markups":[]},{"name":"d32a","type":13,"text":"Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow.","markups":[]},{"name":"8261","type":4,"text":"Photo by Artem Polezhaev on Unsplash","markups":[{"type":3,"start":9,"end":24,"href":"https://unsplash.com/@esver?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":28,"end":36,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*GJ8ovItCBZzW6-wf","originalWidth":5184,"originalHeight":3456,"isFeatured":true,"unsplashPhotoId":"uMykgs8uE1E"}},{"name":"45b6","type":1,"text":"In iOS design patterns, tabs are typically positioned at the bottom of the app when using SwiftUI’s built-in TabView component.","markups":[{"type":10,"start":109,"end":116}],"hasDropCap":true},{"name":"7358","type":8,"text":"import SwiftUI\n\nstruct BottomTabs: View {\n var body: some View {\n TabView {…","markups":[],"codeBlockMetadata":{"mode":2,"lang":"swift"}}],"sections":[{"name":"5a89","startIndex":0}]},"isFullContent":false,"subtitle":"Examples from ChatGPT, Gemini, Llama, and libraries, along with the best from StackOverflow."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"40e99fcd1d57":{"id":"40e99fcd1d57","versionId":"b24b06342eec","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Intercept the Start of iOS and Android Application","detectedLanguage":"en","latestVersion":"b24b06342eec","latestPublishedVersion":"b24b06342eec","hasUnpublishedEdits":false,"latestRev":301,"createdAt":1730257895758,"updatedAt":1731569235169,"acceptedAt":0,"firstPublishedAt":1730262311624,"latestPublishedAt":1730262311624,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"It’s Not Provided by Default On Your New iOS or Android Project","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*MLeg4ElFFDD6oBg0","filter":"","backgroundSize":"","originalWidth":8000,"originalHeight":6000,"strategy":"resample","height":0,"width":0},"wordCount":468,"imageCount":5,"readingTime":2.59937106918239,"subtitle":"It’s Not Provided by Default On Your New iOS or Android Project","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":6,"isBookmarked":false,"tags":[{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":331934,"metadata":{"postCount":331934,"coverImage":{"id":"1*IodtST4Qfwjaur7Pnn9kXg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@hubblespacetelescope?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730262312794},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":10,"sectionCount":1,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"intercept-the-start-of-ios-and-android-application","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"intercept-the-start-of-ios-and-android-application-40e99fcd1d57","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*MLeg4ElFFDD6oBg0","originalWidth":8000,"originalHeight":6000,"isFeatured":true,"unsplashPhotoId":"yU2_oJOB9aM"}},{"name":"1921","type":13,"text":"Learning Mobile Development","markups":[],"alignment":1},{"name":"d004","type":3,"text":"Intercept the Start of iOS and Android Application","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"It’s Not Provided by Default On Your New iOS or Android Project"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"313fab92fbb0","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730262309902,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1921","type":13,"text":"Learning Mobile Development","markups":[]},{"name":"d004","type":3,"text":"Intercept the Start of iOS and Android Application","markups":[]},{"name":"a92e","type":13,"text":"It’s Not Provided by Default On Your New iOS or Android Project","markups":[]},{"name":"6f1d","type":4,"text":"Photo by NASA Hubble Space Telescope on Unsplash","markups":[{"type":3,"start":9,"end":36,"href":"https://unsplash.com/@hubblespacetelescope?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":40,"end":48,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*MLeg4ElFFDD6oBg0","originalWidth":8000,"originalHeight":6000,"isFeatured":true,"unsplashPhotoId":"yU2_oJOB9aM"}},{"name":"cd06","type":1,"text":"In In mobile app development, setting up initial configurations for an app is often necessary, but these aren’t provided by default when creating a new project. Experienced developers know where and how to set this up manually, but for newcomers, the correct approach isn’t always obvious, risking one code in…","markups":[],"hasDropCap":true}],"sections":[{"name":"bffa","startIndex":0}]},"isFullContent":false,"subtitle":"It’s Not Provided by Default On Your New iOS or Android Project"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"65e8258353fc":{"id":"65e8258353fc","versionId":"815919044ee2","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"A Step By Step Guide Creating Swift Package Manager","detectedLanguage":"en","latestVersion":"815919044ee2","latestPublishedVersion":"815919044ee2","hasUnpublishedEdits":false,"latestRev":504,"createdAt":1730251269328,"updatedAt":1731569325739,"acceptedAt":0,"firstPublishedAt":1730253496805,"latestPublishedAt":1730288379399,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"It’s Time To Start Moving Away from CocoaPods","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*6_31ob1e2C58GRwA","filter":"","backgroundSize":"","originalWidth":5760,"originalHeight":3840,"strategy":"resample","height":0,"width":0},"wordCount":761,"imageCount":10,"readingTime":4.121698113207547,"subtitle":"It’s Time To Start Moving Away from CocoaPods","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":5,"isBookmarked":false,"tags":[{"slug":"ios","name":"iOS","postCount":89611,"metadata":{"postCount":89611,"coverImage":{"id":"1*rmErsURXJWa9IglitpnwUQ.jpeg","originalWidth":1080,"originalHeight":569}},"type":"Tag"},{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"ios-development","name":"iOS Development","postCount":6939,"metadata":{"postCount":6939,"coverImage":{"id":"0*sU7oOIPkQyMZjelB","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://blog.cocoapods.org/CocoaPods-Support-Plans/","alts":[],"httpStatus":200},{"url":"https://github.com/QuynhNguyen/SlidingTabView","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@theretrostoreuk?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=QUPg0mZLBD4","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730288380108},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":12,"sectionCount":1,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"a-step-by-step-guide-creating-swift-package-manager","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"a-step-by-step-guide-creating-swift-package-manager-65e8258353fc","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*6_31ob1e2C58GRwA","originalWidth":5760,"originalHeight":3840,"isFeatured":true,"unsplashPhotoId":"c2ULvZriVNY"}},{"name":"f152","type":13,"text":"Learning iOS Development","markups":[],"alignment":1},{"name":"9864","type":3,"text":"A Step By Step Guide Creating Swift Package Manager","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"It’s Time To Start Moving Away from CocoaPods"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"5922ebee1b44","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730253494990,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"f152","type":13,"text":"Learning iOS Development","markups":[]},{"name":"9864","type":3,"text":"A Step By Step Guide Creating Swift Package Manager","markups":[]},{"name":"6ac3","type":13,"text":"It’s Time To Start Moving Away from CocoaPods","markups":[]},{"name":"f5ee","type":4,"text":"Photo by The Retro Store on Unsplash","markups":[{"type":3,"start":9,"end":24,"href":"https://unsplash.com/@theretrostoreuk?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":28,"end":36,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*6_31ob1e2C58GRwA","originalWidth":5760,"originalHeight":3840,"isFeatured":true,"unsplashPhotoId":"c2ULvZriVNY"}},{"name":"6ed0","type":1,"text":"In a blogpost from blog.cocaopods.org in 13 August 2024, it was stated as below","markups":[{"type":3,"start":5,"end":55,"href":"https://blog.cocoapods.org/CocoaPods-Support-Plans/","title":"","rel":"","anchorType":0}],"hasDropCap":true},{"name":"b094","type":6,"text":"TLDR: We’re still keeping it ticking, but we’re being more up-front that CocoaPods is in maintenance mode.","markups":[{"type":1,"start":0,"end":106}]},{"name":"985c","type":1,"text":"Therefore, for a new iOS project in Xcode, it’s worth exploring Swift Package Manager. I tried it today, and…","markups":[]}],"sections":[{"name":"1bdd","startIndex":0}]},"isFullContent":false,"subtitle":"It’s Time To Start Moving Away from CocoaPods"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"9b69943cf92d":{"id":"9b69943cf92d","versionId":"cd774eb7e810","creatorId":"4588dfdfdccb","homeCollectionId":"f9c208bdbb09","title":"The Future of Android Development: Embracing Emerging Trends and Technologies","detectedLanguage":"en","latestVersion":"cd774eb7e810","latestPublishedVersion":"cd774eb7e810","hasUnpublishedEdits":false,"latestRev":327,"createdAt":1730135523551,"updatedAt":1731571815335,"acceptedAt":0,"firstPublishedAt":1730162188187,"latestPublishedAt":1730162188187,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*08RqtZl6VlTPsT6WEo073A.jpeg","filter":"","backgroundSize":"","originalWidth":6000,"originalHeight":4000,"strategy":"resample","height":0,"width":0},"wordCount":1158,"imageCount":3,"readingTime":4.919811320754717,"subtitle":"The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":3,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":144529,"metadata":{"postCount":144529,"coverImage":{"id":"1*IVdzt2CKqQK-moWlu18X6Q.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"},{"slug":"emerging-trends","name":"Emerging Trends","postCount":215,"metadata":{"postCount":215,"coverImage":{"id":"0*gQtMSg6tHmzBCGbF","originalWidth":5184,"originalHeight":3456,"isFeatured":true,"unsplashPhotoId":"GWe0dlVD9e0"}},"type":"Tag"},{"slug":"jetpack-compose","name":"Jetpack Compose","postCount":6237,"metadata":{"postCount":6237,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"ar-vr","name":"Ar Vr","postCount":565,"metadata":{"postCount":565,"coverImage":{"id":"0*GEgXgQoug8eUtDNh","originalWidth":1340,"originalHeight":480,"isFeatured":true}},"type":"Tag"},{"slug":"innovation","name":"Innovation","postCount":173885,"metadata":{"postCount":173885,"coverImage":{"id":"1*HcQkDuVUYvpc9vSI48I2Iw.jpeg"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://unsplash.com/@nampoh?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/a-person-holding-a-cell-phone-in-their-hand-uk5FrhKtr7E?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/woman-in-black-sweater-holding-white-and-black-vr-goggles-8vn4KvfU640?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://medium.com/@harmanpreet.khera/building-a-secure-android-application-encryption-techniques-dd11a2208242","alts":[{"type":3,"url":"medium://p/dd11a2208242"},{"type":2,"url":"medium://p/dd11a2208242"}],"httpStatus":200},{"url":"https://medium.com/@harmanpreet.khera/handling-state-in-jetpack-compose-best-practices-ccffc09ce46a","alts":[{"type":3,"url":"medium://p/ccffc09ce46a"},{"type":2,"url":"medium://p/ccffc09ce46a"}],"httpStatus":200},{"url":"https://ai.plainenglish.io/boost-your-android-app-with-ml-kit-a-beginners-guide-36b557c08e3b","alts":[{"type":3,"url":"medium://p/36b557c08e3b"},{"type":2,"url":"medium://p/36b557c08e3b"}],"httpStatus":200},{"url":"https://medium.com/@harmanpreet.khera","alts":[{"type":2,"url":"medium://@harmanpreet.khera"},{"type":3,"url":"medium://@harmanpreet.khera"}],"httpStatus":200},{"url":"https://unsplash.com/@onurbinay?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730162189190},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":23,"sectionCount":4,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"the-future-of-android-development-embracing-emerging-trends-and-technologies","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-future-of-android-development-embracing-emerging-trends-and-technologies-9b69943cf92d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*08RqtZl6VlTPsT6WEo073A.jpeg","originalWidth":6000,"originalHeight":4000,"isFeatured":true}},{"name":"2694","type":13,"text":"Learning Android Develo","markups":[],"alignment":1},{"name":"215e","type":3,"text":"The Future of Android Development: Embracing Emerging Trends and Technologies","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"448315ff1841","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730137051005,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"2694","type":13,"text":"Learning Android Develo","markups":[]},{"name":"215e","type":3,"text":"The Future of Android Development: Embracing Emerging Trends and Technologies","markups":[]},{"name":"9ee0","type":13,"text":"Get prepared ahead for the future of Android Development.","markups":[]},{"name":"38e8","type":4,"text":"Photo by Onur Binay on Unsplash","markups":[{"type":3,"start":9,"end":19,"href":"https://unsplash.com/@onurbinay?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","title":"","rel":"","anchorType":0},{"type":3,"start":23,"end":31,"href":"https://unsplash.com/photos/a-person-holding-a-cell-phone-in-their-hand-uk5FrhKtr7E?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","title":"","rel":"","anchorType":0}],"layout":3,"metadata":{"id":"1*08RqtZl6VlTPsT6WEo073A.jpeg","originalWidth":6000,"originalHeight":4000,"isFeatured":true}},{"name":"c3bc","type":1,"text":"The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes daunting journey for us developers.","markups":[]},{"name":"0c51","type":1,"text":"To stay ahead, we need to keep our fingers on the pulse of innovation, embracing new tools and adapting our skills to create…","markups":[]}],"sections":[{"name":"25f1","startIndex":0}]},"isFullContent":false,"subtitle":"The Android world is a whirlwind of constant change. New trends and technologies keep popping up, making it an exciting but sometimes…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"4572afb99821":{"id":"4572afb99821","versionId":"97643e95d778","creatorId":"5742b4fcf89e","homeCollectionId":"f9c208bdbb09","title":"Socket & Plug Design Kit: A Scalable, Collaborative Model for Mobile Development","detectedLanguage":"en","latestVersion":"97643e95d778","latestPublishedVersion":"97643e95d778","hasUnpublishedEdits":false,"latestRev":1870,"createdAt":1730008082115,"updatedAt":1731574550131,"acceptedAt":0,"firstPublishedAt":1730116081934,"latestPublishedAt":1730345756003,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*bw8mqxPtm6PXIbM-","filter":"","backgroundSize":"","originalWidth":3515,"originalHeight":3515,"strategy":"resample","height":0,"width":0},"wordCount":2154,"imageCount":22,"readingTime":9.978301886792453,"subtitle":"Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":14,"isBookmarked":false,"tags":[{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"},{"slug":"app-development","name":"App Development","postCount":47900,"metadata":{"postCount":47900,"coverImage":{"id":"1*GClAKniHsXK4qJBxT7CB5A.jpeg","originalWidth":678,"originalHeight":452}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"ios-app-development","name":"iOS App Development","postCount":29560,"metadata":{"postCount":29560,"coverImage":{"id":"0*gAlcs6gtGWZc4Q-A.png","originalWidth":1200,"originalHeight":1200,"isFeatured":true}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":331934,"metadata":{"postCount":331934,"coverImage":{"id":"1*IodtST4Qfwjaur7Pnn9kXg.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_android_scaling_socket_plug","alts":[],"httpStatus":200},{"url":"https://github.com/elye/demo_ios_scaling_socket_plug","alts":[],"httpStatus":200},{"url":"https://medium.com/mobile-app-development-publication/scaling-mobile-development-with-micro-frontends-f208489e9a80","alts":[{"type":3,"url":"medium://p/f208489e9a80"},{"type":2,"url":"medium://p/f208489e9a80"}],"httpStatus":200},{"url":"https://unsplash.com/@alvinmahmudov?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://betterprogramming.pub/the-id-principle-for-improving-any-software-design-solution-b375db8cc823","alts":[{"type":3,"url":"medium://p/b375db8cc823"},{"type":2,"url":"medium://p/b375db8cc823"}],"httpStatus":200}],"version":"0.3","generatedAt":1730345756976},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":55,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"socket-plug-design-kit-a-scalable-collaborative-model-for-mobile-development-4572afb99821","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*bw8mqxPtm6PXIbM-","originalWidth":3515,"originalHeight":3515,"isFeatured":true,"unsplashPhotoId":"RgAUYSTa0NI"}},{"name":"previewTitle","type":3,"text":"Socket & Plug Design Kit: A Scalable, Collaborative Model for Mobile Development","alignment":1},{"name":"previewSubtitle","type":13,"text":"Beyond Aligned…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"5b95c7fd01c4","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1730116080346,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ff75","type":13,"text":"Learning Mobile Development","markups":[]},{"name":"110e","type":3,"text":"Socket & Plug Design Kit: A Scalable, Collaborative Model for Mobile Development","markups":[]},{"name":"20a3","type":13,"text":"Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development","markups":[]},{"name":"5b0d","type":4,"text":"Photo by Alvin Mahmudov on Unsplash","markups":[{"type":3,"start":9,"end":23,"href":"https://unsplash.com/@alvinmahmudov?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":27,"end":35,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":5,"metadata":{"id":"0*bw8mqxPtm6PXIbM-","originalWidth":3515,"originalHeight":3515,"isFeatured":true,"unsplashPhotoId":"RgAUYSTa0NI"}},{"name":"3d56","type":1,"text":"In today’s technology-driven world, mobile development is ubiquitous, making scalable solutions a key focus for organizations with large mobile teams. But how can development be scaled without teams stepping on each other’s toes? Some have explored mobile frameworks, only to be set back when those frameworks fall out of trend…","markups":[],"hasDropCap":true}],"sections":[{"name":"a447","startIndex":0}]},"isFullContent":false,"subtitle":"Beyond Aligned Autonomy — A Independently Dependent Collaborated Approach in Scaling Mobile Development"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"16c6dc8de464":{"id":"16c6dc8de464","versionId":"6661b4fff249","creatorId":"2e51b1e460ff","homeCollectionId":"f9c208bdbb09","title":"Why ViewModel is Your Best Friend (and Yes, You Really Need It!)","detectedLanguage":"en","latestVersion":"6661b4fff249","latestPublishedVersion":"6661b4fff249","hasUnpublishedEdits":false,"latestRev":306,"createdAt":1729707965226,"updatedAt":1731612951830,"acceptedAt":0,"firstPublishedAt":1729709442871,"latestPublishedAt":1730162112546,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Architect your mobile project right","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*_tefJfVrG10f1-Imn8nfHA.png","filter":"","backgroundSize":"","originalWidth":1060,"originalHeight":602,"strategy":"resample","height":0,"width":0},"wordCount":1003,"imageCount":1,"readingTime":3.9849056603773585,"subtitle":"Architect your mobile project right","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":8,"isBookmarked":false,"tags":[{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"viewmodel","name":"Viewmodel","postCount":641,"metadata":{"postCount":641,"coverImage":{"id":"0*UWANTBQf4U1V1hGy","originalWidth":1792,"originalHeight":1024}},"type":"Tag"},{"slug":"kotlin","name":"Kotlin","postCount":31400,"metadata":{"postCount":31400,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"android","name":"Android","postCount":144529,"metadata":{"postCount":144529,"coverImage":{"id":"1*IVdzt2CKqQK-moWlu18X6Q.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://android-dev-nexus.medium.com/why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464?sk=ebd87cf11a45e1f17fe97a51bc2fd78a","alts":[{"type":3,"url":"medium://p/16c6dc8de464"},{"type":2,"url":"medium://p/16c6dc8de464"}],"httpStatus":200},{"url":"https://buymeacoffee.com/android.dev.nexus","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730162112846},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":106,"sectionCount":9,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"why-viewmodel-is-your-best-friend-and-yes-you-really-need-it","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*_tefJfVrG10f1-Imn8nfHA.png","originalWidth":1060,"originalHeight":602,"isFeatured":true}},{"name":"6684","type":13,"text":"Learning Mobile Development","markups":[],"alignment":1},{"name":"87ce","type":3,"text":"Why ViewModel is Your Best Friend (and Yes, You Really Need It!)","markups":[{"type":1,"start":0,"end":64}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Architect your mobile project right"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"01c0e076e57c","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1729709441616,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"6684","type":13,"text":"Learning Mobile Development","markups":[]},{"name":"87ce","type":3,"text":"Why ViewModel is Your Best Friend (and Yes, You Really Need It!)","markups":[{"type":1,"start":0,"end":64}]},{"name":"53fa","type":13,"text":"Architect your mobile project right","markups":[]},{"name":"3450","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*_tefJfVrG10f1-Imn8nfHA.png","originalWidth":1060,"originalHeight":602,"isFeatured":true}},{"name":"d10e","type":1,"text":"🌟Members can scroll down to enjoy! Non-members, click here for full access.🌟","markups":[{"type":3,"start":55,"end":59,"href":"https://android-dev-nexus.medium.com/why-viewmodel-is-your-best-friend-and-yes-you-really-need-it-16c6dc8de464?sk=ebd87cf11a45e1f17fe97a51bc2fd78a","title":"","rel":"","anchorType":0},{"type":1,"start":0,"end":78}]},{"name":"cf3b","type":1,"text":"Okay, let’s get real for a second. You’ve probably heard “ViewModel this” and “ViewModel that” from almost every Android tutorial out there. But honestly, why do you really need it? Can’t you just get away with onSaveInstanceState() or…","markups":[{"type":10,"start":211,"end":232},{"type":2,"start":166,"end":172}]}],"sections":[{"name":"1ed7","startIndex":0}]},"isFullContent":false,"subtitle":"Architect your mobile project right"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"bc2bbce2d278":{"id":"bc2bbce2d278","versionId":"18708b5b6036","creatorId":"2e51b1e460ff","homeCollectionId":"f9c208bdbb09","title":"JUnit vs. AndroidJUnit vs. Robolectric: Fixing Your Test Failures Without Losing Your Mind!","detectedLanguage":"en","latestVersion":"18708b5b6036","latestPublishedVersion":"18708b5b6036","hasUnpublishedEdits":false,"latestRev":707,"createdAt":1728458189198,"updatedAt":1731665174594,"acceptedAt":0,"firstPublishedAt":1728480195728,"latestPublishedAt":1730162222973,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Join me to solve a unit testing problem without losing your mind! Let’s understand JUnit, AndroidJUnit, and Robolectric effortlessly.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*Ogl3q_-rebrPitW-iCAulA.png","filter":"","backgroundSize":"","originalWidth":982,"originalHeight":638,"strategy":"resample","height":0,"width":0},"wordCount":958,"imageCount":6,"readingTime":4.565094339622641,"subtitle":"Join me to solve a unit testing problem without losing your mind! Let’s understand JUnit, AndroidJUnit, and Robolectric effortlessly.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":5,"isBookmarked":false,"tags":[{"slug":"testing-framework","name":"Testing Framework","postCount":785,"metadata":{"postCount":785,"coverImage":{"id":"1*B51n2N7eqkXU9Up4EJ32ZA.jpeg","originalWidth":2560,"originalHeight":1440,"isFeatured":true}},"type":"Tag"},{"slug":"junit","name":"Junit","postCount":1075,"metadata":{"postCount":1075,"coverImage":{"id":"1*7LCQHSwaBMSQIyaz83xAWg.png","originalWidth":276,"originalHeight":276,"isFeatured":true}},"type":"Tag"},{"slug":"android-app-developers","name":"Android App Developers","postCount":1279,"metadata":{"postCount":1279,"coverImage":{"id":"1*tVyusS0UeX36B-GNS9F2lA.png","originalWidth":1752,"originalHeight":1760}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"androiddev","name":"AndroidDev","postCount":12289,"metadata":{"postCount":12289,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://android-dev-nexus.medium.com/junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278?sk=83ce5fc4a388d3ff450fe5f333116be2","alts":[{"type":3,"url":"medium://p/bc2bbce2d278"},{"type":2,"url":"medium://p/bc2bbce2d278"}],"httpStatus":200},{"url":"https://buymeacoffee.com/android.dev.nexus","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730162223367},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":135,"sectionCount":3,"readingList":0,"topics":[{"topicId":"64756708407c","slug":"android-development","createdAt":1521652914155,"deletedAt":0,"image":{"id":"1*zLD64ewnrZ3XKBtDUMXQ-w@2x.jpeg","originalWidth":3000,"originalHeight":1997},"name":"Android Dev","description":"Building little green robots.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Android Development: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*Ogl3q_-rebrPitW-iCAulA.png","originalWidth":982,"originalHeight":638,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"JUnit vs. AndroidJUnit vs. Robolectric: Fixing Your Test Failures Without Losing Your Mind!","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Join me to solve a unit testing problem without losing your mind! Let’s understand JUnit, AndroidJUnit, and Robolectric effortlessly."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"67951e20de25","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1728480194471,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4594","type":3,"text":"JUnit vs. AndroidJUnit vs. Robolectric: Fixing Your Test Failures How I Learned to Love Testing Again!","markups":[]},{"name":"9f49","type":6,"text":"Here’s a special treat for our non-Medium members: we’re offering free access to this blog! Just follow this link — because your curiosity and passion for coding should never be limited! 😉😉","markups":[{"type":3,"start":104,"end":113,"href":"https://android-dev-nexus.medium.com/junit-vs-androidjunit-vs-robolectric-fixing-your-test-failures-without-losing-your-mind-bc2bbce2d278?sk=83ce5fc4a388d3ff450fe5f333116be2","title":"","rel":"","anchorType":0},{"type":2,"start":0,"end":191}]},{"name":"36b1","type":1,"text":"Recently, I was writing a test for the following code:","markups":[]},{"name":"fbcf","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*68j4naH236DIMOFvnqBVpQ.png","originalWidth":2632,"originalHeight":1436}},{"name":"f4f8","type":9,"text":"First test: onlyproductType was passed as empty.","markups":[{"type":10,"start":16,"end":27}]},{"name":"76b4","type":9,"text":"…","markups":[{"type":10,"start":18,"end":21}]}],"sections":[{"name":"1196","startIndex":0}]},"isFullContent":false,"subtitle":"Join me to solve a unit testing problem without losing your mind! Let’s understand JUnit, AndroidJUnit, and Robolectric effortlessly."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"9ee764f3dee6":{"id":"9ee764f3dee6","versionId":"09f07f1cb22f","creatorId":"6087acd1fe7","homeCollectionId":"f9c208bdbb09","title":"Kotlin Multiplatform Demystified: Cross-Platform Made Simple","detectedLanguage":"en","latestVersion":"09f07f1cb22f","latestPublishedVersion":"09f07f1cb22f","hasUnpublishedEdits":false,"latestRev":782,"createdAt":1727441761772,"updatedAt":1731707803013,"acceptedAt":0,"firstPublishedAt":1727613399867,"latestPublishedAt":1727691445997,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Code once and deploy on both mobile platforms!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*PVv1qHHT7XI40R1emEBvQw.png","filter":"","backgroundSize":"","originalWidth":734,"originalHeight":248,"strategy":"resample","height":0,"width":0},"wordCount":986,"imageCount":6,"readingTime":4.670754716981132,"subtitle":"Code once and deploy on both mobile platforms!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"kotlin","name":"Kotlin","postCount":31400,"metadata":{"postCount":31400,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"kotlin-multiplatform","name":"Kotlin Multiplatform","postCount":1437,"metadata":{"postCount":1437,"coverImage":{"id":"0*d6s6DV5oQo_A0E6n","originalWidth":4928,"originalHeight":3264,"isFeatured":true,"unsplashPhotoId":"bAYP_kAtNWg"}},"type":"Tag"},{"slug":"android","name":"Android","postCount":144529,"metadata":{"postCount":144529,"coverImage":{"id":"1*IVdzt2CKqQK-moWlu18X6Q.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"},{"slug":"android-app-development","name":"Android App Development","postCount":48557,"metadata":{"postCount":48557,"coverImage":{"id":"1*WEJ1mIjP5d32jGhapRiscQ.png","originalWidth":2181,"originalHeight":1188}},"type":"Tag"},{"slug":"mobile-app-development","name":"Mobile App Development","postCount":96692,"metadata":{"postCount":96692,"coverImage":{"id":"1*IXtsgrUcINV0nbaVXYmHkg.jpeg","originalWidth":1312,"originalHeight":736,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://skie.touchlab.co/features/flows","alts":[],"httpStatus":200},{"url":"https://skie.touchlab.co/features/suspend","alts":[],"httpStatus":200},{"url":"https://skie.touchlab.co/","alts":[],"httpStatus":200},{"url":"https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-ktor-sqldelight.html","alts":[],"httpStatus":200},{"url":"https://ktor.io/docs/client-create-multiplatform-application.html","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1727691446517},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":53,"sectionCount":4,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"kotlin-multiplatform-demystified-cross-platform-made-simple","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"kotlin-multiplatform-demystified-cross-platform-made-simple-9ee764f3dee6","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*PVv1qHHT7XI40R1emEBvQw.png","originalWidth":734,"originalHeight":248,"isFeatured":true}},{"name":"4679","type":13,"text":"Learning KMP","markups":[],"alignment":1},{"name":"6694","type":3,"text":"Kotlin Multiplatform Demystified: Cross-Platform Made Simple","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Code once and deploy on both mobile platforms!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"ad834b3e1e48","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4679","type":13,"text":"Learning KMP","markups":[]},{"name":"6694","type":3,"text":"Kotlin Multiplatform Demystified: Cross-Platform Made Simple","markups":[]},{"name":"9380","type":13,"text":"Code once and deploy on both mobile platforms!","markups":[]},{"name":"e8d1","type":1,"text":"This article introduces you to Kotlin Multiplatform (KMP), explains how it works, discusses its pros and cons, and addresses all your queries by the end of the article.","markups":[]},{"name":"292e","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*PVv1qHHT7XI40R1emEBvQw.png","originalWidth":734,"originalHeight":248,"isFeatured":true}},{"name":"4abd","type":3,"text":"What is Kotlin multi platform ?","markups":[]},{"name":"06c9","type":1,"text":"Kotlin Multiplatform is a technology that allows you to create applications for various platforms and efficiently reuse code across them while retaining…","markups":[{"type":1,"start":137,"end":188},{"type":2,"start":137,"end":188}]}],"sections":[{"name":"cc03","startIndex":0}]},"isFullContent":false,"subtitle":"Code once and deploy on both mobile platforms!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"76db6544b78d":{"id":"76db6544b78d","versionId":"2d41a83ef973","creatorId":"2e51b1e460ff","homeCollectionId":"f9c208bdbb09","title":"How is Java platform-independent when it needs a JVM to run?","detectedLanguage":"en","latestVersion":"2d41a83ef973","latestPublishedVersion":"2d41a83ef973","hasUnpublishedEdits":false,"latestRev":262,"createdAt":1727031463731,"updatedAt":1731707902030,"acceptedAt":0,"firstPublishedAt":1727590118726,"latestPublishedAt":1728390423145,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Learning under the hood of Android Development","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*eDv75WsH9J_JjMwdNmX_iA.png","filter":"","backgroundSize":"","originalWidth":1818,"originalHeight":1024,"strategy":"resample","height":0,"width":0},"wordCount":725,"imageCount":4,"readingTime":3.4358490566037734,"subtitle":"Learning under the hood of Android Development","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":13,"isBookmarked":false,"tags":[{"slug":"java","name":"Java","postCount":90817,"metadata":{"postCount":90817,"coverImage":{"id":"1*0ygFBsM_EIjgR4M7ebLdbA.png","originalWidth":1058,"originalHeight":536,"isFeatured":true}},"type":"Tag"},{"slug":"interview-questions","name":"Interview Questions","postCount":14697,"metadata":{"postCount":14697,"coverImage":{"id":"1*eTzRijTX1PHdKkBj9J_kNg.png","originalWidth":551,"originalHeight":331,"isFeatured":true}},"type":"Tag"},{"slug":"java-interview-questions","name":"Java Interview Questions","postCount":862,"metadata":{"postCount":862,"coverImage":{"id":"1*Kovz33Nn1AkMVSNYWe54rw.jpeg","originalWidth":800,"originalHeight":600,"isFeatured":true}},"type":"Tag"},{"slug":"jvm","name":"JVM","postCount":2218,"metadata":{"postCount":2218,"coverImage":{"id":"1*NdOshsg2dBXm1Ro-_EZXlw.png","originalWidth":777,"originalHeight":362,"isFeatured":true}},"type":"Tag"},{"slug":"platform-independent","name":"Platform Independent","postCount":20,"metadata":{"postCount":20,"coverImage":{"id":"1*Jh9IjCUeFe6ahVdM36v2Fg.jpeg","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":5,"links":{"entries":[{"url":"https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.linkedin.com%2Fpulse%2Fjvm-architecture-how-internally-work-ali-as-ad&psig=AOvVaw2W5UgVMC55T-A8_B35ezps&ust=1727638711597000&source=images&cd=vfe&opi=89978449&ved=0CBcQjhxqFwoTCMim9O-x5ogDFQAAAAAdAAAAABAV","alts":[],"httpStatus":200},{"url":"https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.linkedin.com%2Fpulse%2Fjava-architecture-how-works-omar-ismail&psig=AOvVaw0cPklDWD53alqMpSJX75fd&ust=1727625889195000&source=images&cd=vfe&opi=89978449&ved=0CBcQjhxqFwoTCMDj_JCC5ogDFQAAAAAdAAAAABAE","alts":[],"httpStatus":200},{"url":"https://buymeacoffee.com/android.dev.nexus","alts":[],"httpStatus":200},{"url":"https://android-dev-nexus.medium.com/how-is-java-platform-independent-when-it-needs-a-jvm-to-run-76db6544b78d?sk=e92bf00c85862e1bcfac67969ebd18f5","alts":[{"type":3,"url":"medium://p/76db6544b78d"},{"type":2,"url":"medium://p/76db6544b78d"}],"httpStatus":200},{"url":"https://www.upgrad.com/blog/why-is-java-platform-independent-language/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1728390426244},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":146,"sectionCount":2,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"how-is-java-platform-independent-when-it-needs-a-jvm-to-run","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"how-is-java-platform-independent-when-it-needs-a-jvm-to-run-76db6544b78d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*eDv75WsH9J_JjMwdNmX_iA.png","originalWidth":1818,"originalHeight":1024,"isFeatured":true}},{"name":"1ed5","type":13,"text":"Learning Androi Development","markups":[],"alignment":1},{"name":"8a72","type":3,"text":"How is Java platform-independent when it needs a JVM to run?","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Learning under the hood of Android Development"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"f9c208bdbb09","isNewsletter":false,"newsletterId":"5845ef9e2394","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1727590117227,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1ed5","type":13,"text":"Learning Androi Development","markups":[]},{"name":"8a72","type":3,"text":"How is Java platform-independent when it needs a JVM to run?","markups":[]},{"name":"d356","type":13,"text":"Learning under the hood of Android Development","markups":[]},{"name":"2032","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*eDv75WsH9J_JjMwdNmX_iA.png","originalWidth":1818,"originalHeight":1024,"isFeatured":true}},{"name":"f64e","type":1,"text":"If you’ve been coding with Java or are just starting to learn it, you’ve probably come across this statement: Java is platform-independent. But wait… doesn’t Java need a JVM (Java Virtual Machine) to run? 🤨 How can it be platform-independent if it relies on this specific environment?","markups":[{"type":1,"start":110,"end":138},{"type":1,"start":170,"end":196}]},{"name":"f4b7","type":1,"text":"Let’s break down…","markups":[{"type":1,"start":66,"end":92}]}],"sections":[{"name":"36f5","startIndex":0}]},"isFullContent":false,"subtitle":"Learning under the hood of Android Development"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/f9c208bdbb09/stream","next":{"to":"1727590118726","ignoredIds":[],"page":4}},"collection":{"id":"f9c208bdbb09","name":"Mobile App Development Publication","slug":"mobile-app-development-publication","tags":["PROGRAMMING","MOBILE APP DEVELOPMENT","ANDROID APP DEVELOPMENT","IOS APP DEVELOPMENT","ANDROIDDEV"],"creatorId":"5742b4fcf89e","description":"Sharing iOS, Android and relevant Mobile App Development Technology and Learning","shortDescription":"Sharing iOS, Android and relevant Mobile App Development…","image":{"imageId":"1*r5bO5bEjNCKLt6fKZbPdCA.png","filter":"","backgroundSize":"","originalWidth":570,"originalHeight":570,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":3639,"activeAt":1732250947866},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"1*MdMgVRTnupYGv9gYoKASQQ.png","filter":"","backgroundSize":"","originalWidth":1233,"originalHeight":115,"strategy":"resample","height":0,"width":0},"twitterUsername":"elye_project","facebookPageName":"elye.proj","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Mobile App Development","description":"for Android and iOS","backgroundImage":{"id":"1*C2ZAeP1Mo3zhxYDLB04i5Q.png","originalWidth":2400,"originalHeight":748},"logoImage":{},"alignment":1,"layout":6}},{"type":3,"promoMetadata":{"sectionHeader":"Mobile App Development","promoId":"ebb927f68e94"}},{"type":1,"postListMetadata":{"source":3,"layout":2,"number":5,"postIds":["f208489e9a80","e1e1723f392","1aef83d67659","c82283d15564","9cb8f664cfcf"]}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":14,"postIds":["c4975bd00621","efb2e71a878c","225b855ba5b8","a7290257d987","3d8beb05c2e8","e679cd2bbca0","40e99fcd1d57","65e8258353fc","9b69943cf92d","4572afb99821","16c6dc8de464","bc2bbce2d278","9ee764f3dee6","76db6544b78d"],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":2,"layout":4,"number":14,"postIds":[],"sectionHeader":"Trending"}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":14,"postIds":[],"tagSlug":"Android App Development","tagName":"Android App Development","sectionHeader":"Android App Development"}},{"type":1,"postListMetadata":{"source":4,"layout":4,"number":14,"postIds":[],"tagSlug":"iOS App Development","tagName":"iOS App Development","sectionHeader":"iOS App Development"}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":1,"title":"Android App Development","tagSlug":"android-app-development","url":"https://medium.com/mobile-app-development-publication/tagged/android-app-development","source":"tagSlug"},{"type":1,"title":"iOS App Development","tagSlug":"ios-app-development","url":"https://medium.com/mobile-app-development-publication/tagged/ios-app-development","source":"tagSlug"},{"type":1,"title":"Jetpack Compose","tagSlug":"jetpack-compose","url":"https://medium.com/mobile-app-development-publication/tagged/jetpack-compose","source":"tagSlug"},{"type":1,"title":"Kotlin","tagSlug":"kotlin","url":"https://medium.com/mobile-app-development-publication/tagged/kotlin","source":"tagSlug"},{"type":1,"title":"Swift","tagSlug":"swift","url":"https://medium.com/mobile-app-development-publication/tagged/swift","source":"tagSlug"},{"type":4,"title":"Dagger","url":"https://medium.com/mobile-app-development-publication/dagger/home","topicId":"c14e29bbdf41","source":"topicId"},{"type":4,"title":"Android UI","url":"https://medium.com/mobile-app-development-publication/android-ui/home","topicId":"8eae2192d281","source":"topicId"}],"colorBehavior":1,"collectionFeatures":[30],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Mobile App Development","description":"for Android and iOS","backgroundImage":{"id":"1*C2ZAeP1Mo3zhxYDLB04i5Q.png","originalWidth":2400,"originalHeight":748},"logoImage":{},"alignment":1,"layout":6},"subscriberCount":3639,"tagline":"Sharing Mobile App Development and Learning","isOptedIntoAurora":false,"newsletterV3":{"newsletterV3Id":"88a7c4c85c6","type":1,"name":"Update from Mobile App Development Publication","description":"A place where we learn and share our mobile app development experience on Medium","collectionId":"f9c208bdbb09","newsletterSlug":"update-from-mobile-app-development-publication","isSubscribed":false,"showPromo":false,"avatarImageId":"","creatorId":"5742b4fcf89e","showNewsletterPostsInCollectionHome":false,"exportableSubscribersCount":29,"subscribersCount":28,"promoHeadline":"","promoBody":"","replyToEmail":""},"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092799481,"type":"Collection"},"header":{"title":"Mobile App Development","description":"for Android and iOS","backgroundImage":{"id":"1*C2ZAeP1Mo3zhxYDLB04i5Q.png","originalWidth":2400,"originalHeight":748},"logoImage":{},"alignment":1,"layout":6},"streamItems":[{"createdAt":1734504782647,"randomId":"e3d1a684e9c5","section":{"items":[{"promo":{"promoId":"ebb927f68e94"},"itemType":"promo"}],"layout":2,"heading":{"fallbackTitle":"Mobile App Development","headingBasic":{"title":"Mobile App Development"},"headingType":"headingBasic"}},"itemType":"section","type":"StreamItem"},{"createdAt":1734504782647,"randomId":"8461db098ab8","section":{"items":[{"post":{"postId":"f208489e9a80"},"itemType":"post"},{"post":{"postId":"e1e1723f392"},"itemType":"post"},{"post":{"postId":"1aef83d67659"},"itemType":"post"},{"post":{"postId":"c82283d15564"},"itemType":"post"},{"post":{"postId":"9cb8f664cfcf"},"itemType":"post"}],"layout":2},"itemType":"section","type":"StreamItem"},{"createdAt":1734504782647,"randomId":"6e2b7c8911d0","section":{"items":[{"post":{"postId":"c4975bd00621"},"itemType":"post"},{"post":{"postId":"efb2e71a878c"},"itemType":"post"},{"post":{"postId":"225b855ba5b8"},"itemType":"post"},{"post":{"postId":"a7290257d987"},"itemType":"post"},{"post":{"postId":"3d8beb05c2e8"},"itemType":"post"},{"post":{"postId":"e679cd2bbca0"},"itemType":"post"},{"post":{"postId":"40e99fcd1d57"},"itemType":"post"},{"post":{"postId":"65e8258353fc"},"itemType":"post"},{"post":{"postId":"9b69943cf92d"},"itemType":"post"},{"post":{"postId":"4572afb99821"},"itemType":"post"},{"post":{"postId":"16c6dc8de464"},"itemType":"post"},{"post":{"postId":"bc2bbce2d278"},"itemType":"post"},{"post":{"postId":"9ee764f3dee6"},"itemType":"post"},{"post":{"postId":"76db6544b78d"},"itemType":"post"}],"layout":4,"heading":{"fallbackTitle":"Latest","headingBasic":{"title":"Latest"},"headingType":"headingBasic"}},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8f3d3bca0f863e02',t:'MTczNDUwNDc4My4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>