<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Gangolf</title>
    <description>The latest articles on DEV Community by Michael Gangolf (@miga).</description>
    <link>https://dev.to/miga</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F317546%2F8057a47e-c281-40eb-a16d-2d02c3bbea1f.jpeg</url>
      <title>DEV Community: Michael Gangolf</title>
      <link>https://dev.to/miga</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/miga"/>
    <language>en</language>
    <item>
      <title>Titanium News #22</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Wed, 21 Jan 2026 14:19:05 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-22-4oif</link>
      <guid>https://dev.to/miga/titanium-news-22-4oif</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://fromzerotoapp.com/titanium-news/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;After a long busy time I finally present you another Titanium News post with a fresh Titanium SDK release and many new modules.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium SDK 13.1.0
&lt;/h1&gt;

&lt;p&gt;Many fixes and improvements have landed in 13.1.0 and we also got rid of many old legacy parts that weren't used anymore (like APS classes) and the node.js code was refactored to ESM!&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS
&lt;/h3&gt;

&lt;p&gt;Titanium now supports iOS26 and Xcode 26 with glass effects:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsgri6wni1fbzamjykgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsgri6wni1fbzamjykgy.png" alt="glass" width="315" height="284"&gt;&lt;/a&gt;&lt;br&gt;
source views for dialogs [&lt;a href="https://github.com/tidev/titanium-sdk/pull/14258" rel="noopener noreferrer"&gt;example&lt;/a&gt;]:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuam36n1dsxby0p5v7uq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcuam36n1dsxby0p5v7uq.png" alt="dialog" width="315" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;more button configurations (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14252" rel="noopener noreferrer"&gt;example&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk1vhr2bl6etmq9sfpg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk1vhr2bl6etmq9sfpg8.png" alt="buttons" width="224" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;edge scrolling effects (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14346" rel="noopener noreferrer"&gt;example&lt;/a&gt;):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmkxgt378jogdz1wswqv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffmkxgt378jogdz1wswqv.png" alt="edge" width="640" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;unified tab title colors:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgt8c3iqs9uqkek29qjq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzgt8c3iqs9uqkek29qjq.png" alt="tabtitle" width="800" height="176"&gt;&lt;/a&gt;&lt;br&gt;
including the option to opt-out of the new top tabbar (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14337" rel="noopener noreferrer"&gt;source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Another big improvement is the ability to use SPM modules as dependencies in iOS modules (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14327" rel="noopener noreferrer"&gt;source&lt;/a&gt;) and some updates to Mac Catalyst builds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android
&lt;/h3&gt;

&lt;p&gt;Support for 16kb page size in all first party modules and the SDK. &lt;br&gt;
A big change is that the minSdk was raised to 24 now. The NDK was updated to 28.1, gradle is at version 8.14.3 and kotlin at version 2.3.0.&lt;br&gt;
In a Webview you can now disable &lt;code&gt;multipleWindows&lt;/code&gt; (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14005" rel="noopener noreferrer"&gt;source&lt;/a&gt;) to prevent your content from opening content in a new tab. Another new feature is that you can use &lt;code&gt;addScriptMessageHandler&lt;/code&gt; on Android now too (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14328" rel="noopener noreferrer"&gt;example&lt;/a&gt;).&lt;br&gt;
You can call &lt;code&gt;Ti.App.Android.clearUserCache()&lt;/code&gt; to clear the user cache right inside of your app.&lt;/p&gt;

&lt;p&gt;Full release notes are available at &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_13.x/Titanium_SDK_13.1.0.GA_Release_Note.html" rel="noopener noreferrer"&gt;https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_13.x/Titanium_SDK_13.1.0.GA_Release_Note.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; 13.1.1 will be out soon with fixes for finding Android emulators in &lt;code&gt;ti info&lt;/code&gt; and a bug that could affect Tab titles on iOS. So make sure to use that version if it is available!&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/deckameron" rel="noopener noreferrer"&gt;deckameron&lt;/a&gt; release a bunch of new modules: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/deckameron/Ti.Android.Share" rel="noopener noreferrer"&gt;https://github.com/deckameron/Ti.Android.Share&lt;/a&gt; - A native Android module for Titanium SDK that provides &lt;strong&gt;seamless image and text sharing&lt;/strong&gt; using Android's FileProvider API.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/deckameron/Ti.Iphone.Device.Adapter" rel="noopener noreferrer"&gt;https://github.com/deckameron/Ti.Iphone.Device.Adapter&lt;/a&gt; - A simple, &lt;strong&gt;powerful responsive layout manager&lt;/strong&gt; for Titanium SDK iOS apps. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/deckameron/Ti.Apple.Intelligence" rel="noopener noreferrer"&gt;https://github.com/deckameron/Ti.Apple.Intelligence&lt;/a&gt; - Titanium SDK module for integration with &lt;strong&gt;Apple Foundation Models&lt;/strong&gt;. A local 3B generative AI on iOS 26+. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/deckameron/Ti.Network.Manager" rel="noopener noreferrer"&gt;https://github.com/deckameron/Ti.Network.Manager&lt;/a&gt; - Advanced &lt;strong&gt;HTTP networking module&lt;/strong&gt; for Titanium SDK with several powerful features designed for modern mobile applications. &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/deckameron/Ti.iOS.Metrics" rel="noopener noreferrer"&gt;https://github.com/deckameron/Ti.iOS.Metrics&lt;/a&gt; - A Titanium iOS module that &lt;strong&gt;provides accurate measurements of iOS UI elements&lt;/strong&gt; including status bar, navigation bar, tab bar, and safe area insets. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;make sure to check them out!&lt;/p&gt;

&lt;p&gt;I've release an Android module to implement &lt;strong&gt;WiFi-Aware&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://github.com/m1ga/ti.wifi-aware" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.wifi-aware&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hansemannn/" rel="noopener noreferrer"&gt;Hans&lt;/a&gt; released a &lt;strong&gt;Github Deployment action using TiFastlane&lt;/strong&gt;:&lt;br&gt;
&lt;a href="https://github.com/hansemannn/github-action-titanium-deployment/" rel="noopener noreferrer"&gt;https://github.com/hansemannn/github-action-titanium-deployment/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Astrovic/" rel="noopener noreferrer"&gt;Astrovic&lt;/a&gt; updated his &lt;strong&gt;Ti.Admob sample project&lt;/strong&gt;: &lt;a href="https://github.com/Astrovic/ti.admob-sample-app" rel="noopener noreferrer"&gt;https://github.com/Astrovic/ti.admob-sample-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/maccesar"&gt;@maccesar&lt;/a&gt; updated his &lt;strong&gt;PurgeTSS&lt;/strong&gt; and migrated it to ESM, added FontAwesome 7 support and much more: &lt;a href="https://github.com/macCesar/purgeTSS/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;https://github.com/macCesar/purgeTSS/blob/main/CHANGELOG.md&lt;/a&gt;&lt;br&gt;
A new cross-platform audio streaming module (audio focus handling, lock screen controls, smart reconnection,...) will also be released soon, so keep an eye on his github repo!&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>javascript</category>
      <category>mobile</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium News #21</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sat, 10 May 2025 10:23:13 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-21-12b3</link>
      <guid>https://dev.to/miga/titanium-news-21-12b3</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://fromzerotoapp.com/titanium-news/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.7.0
&lt;/h1&gt;

&lt;p&gt;This version adds several new features to both iOS and Android, including more API parity like &lt;code&gt;Tab.popToRootWindow&lt;/code&gt;, &lt;code&gt;Ti.App.keyboardVisible&lt;/code&gt; and &lt;code&gt;Label.letterSpacing&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In addition, some core Android libraries like Google Play Service have been updated and a rare crash when opening a Tab Group on Android 12+13 has been fixed.&lt;/p&gt;

&lt;p&gt;Use &lt;code&gt;titanium sdk install 12.7.0.GA&lt;/code&gt; to get the new version.&lt;/p&gt;

&lt;h2&gt;
  
  
  Highlights:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Rotate event
&lt;/h3&gt;

&lt;p&gt;Views have a rotate event now. You can use this in combination with the pinch event to do some scale &amp;amp; rotate with your fingers: &lt;a href="https://github.com/tidev/titanium-sdk/pull/13882" rel="noopener noreferrer"&gt;Example code&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  TabGroup show/hide support
&lt;/h3&gt;

&lt;p&gt;Show/hide tab-bar programmatically, especially on iOS 18+ elevated tab bar which obstructs custom nav bar on iPad apps with a TabGroup. You can now use &lt;code&gt;Ti.UI.TabGroup.showTabBar()&lt;/code&gt; or &lt;code&gt;Ti.UI.TabGroup.hideTabBar()&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Android letter-spacing
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9t9l1mxefoj489k6sc3.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9t9l1mxefoj489k6sc3.webp" alt="spacing" width="640" height="245"&gt;&lt;/a&gt;&lt;br&gt;
iOS can do letter-spacing using an attributedString already but there was no option for Android. This release will add a new property &lt;code&gt;letterSpacing&lt;/code&gt; on a Label so you can simply do &lt;code&gt;lbl.letterSpacing = 0.1&lt;/code&gt; do change the spacing. Check &lt;a href="https://github.com/tidev/titanium-sdk/pull/13984" rel="noopener noreferrer"&gt;this link&lt;/a&gt; for a full example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android: improved BottomNavigation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00xesxy758o9jg7yxnlj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00xesxy758o9jg7yxnlj.webp" alt="bottom" width="286" height="152"&gt;&lt;/a&gt;&lt;br&gt;
The BottomNavigation has a new &lt;code&gt;experimental&lt;/code&gt; property that allows you to test a new implementation of the native BottomNavigation. It will fix some issues for Material 3 themes and adds some new features like direct font icon support, enable/disable clicks or setting the indicator color. For more screenshots and example code &lt;a href="https://github.com/tidev/titanium-sdk/pull/14126" rel="noopener noreferrer"&gt;visit the PR&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parity: Android event for keyboard open/closed
&lt;/h3&gt;

&lt;p&gt;On Android you can use a new event &lt;code&gt;keyboardframechanged&lt;/code&gt; to check if the keyboard was opened or closed. In combination with &lt;code&gt;Ti.App.keyboardVisible&lt;/code&gt; you can also check if it is currently visible. Demo code is available in the &lt;a href="https://github.com/tidev/titanium-sdk/pull/13726" rel="noopener noreferrer"&gt;ticket&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Parity: Android Tab.popToRootWindow()
&lt;/h3&gt;

&lt;p&gt;Now you can close all child windows of a TabGroup on Android and return to the root TabGroup window by using &lt;code&gt;Tab.popToRootWindow()&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  textTransform for Label
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqpah363lfc6u61zsshn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqpah363lfc6u61zsshn.webp" alt="texttransform" width="320" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A Ti.UI.Label has a new &lt;code&gt;textTransform&lt;/code&gt; property that you can use like in CSS to make the content uppercase, lowercase or set it to none the get the initial text back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Support html in text areas
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsteik8541xujapnr37n.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsteik8541xujapnr37n.webp" alt="html" width="320" height="96"&gt;&lt;/a&gt;&lt;br&gt;
A TextArea can show HTML text now by setting &lt;code&gt;textarea.html = "..."&lt;/code&gt;. If you want to have a full HTML editor you can checkout &lt;a href="https://github.com/hansemannn/titanium-rich-text-editor" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-rich-text-editor&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Gradle and NDK update
&lt;/h3&gt;

&lt;p&gt;Gradle was updated to 8.10.2 and NDK to v27.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bugfixes
&lt;/h3&gt;

&lt;p&gt;Next to the new features we have plenty of bug fixes you can find in the the &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.7.0.GA_Release_Note.html" rel="noopener noreferrer"&gt;release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More info: &lt;a href="https://tidev.io/blog/sdk_12_7_0_ga" rel="noopener noreferrer"&gt;Blog post&lt;/a&gt; and &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.7.0.GA_Release_Note.html" rel="noopener noreferrer"&gt;Release notes&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;a href="https://github.com/m1ga/ti.jsPDF" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.jsPDF&lt;/a&gt; you can find a full app example how to use jsPDF to create PDF files in your Titanium SDK app.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://purgetss.com/tikit" rel="noopener noreferrer"&gt;TiKit UI Components&lt;/a&gt; has been updated to v1.1.4, adding new features to simplify UI development in Titanium apps.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/m1ga/ti.documentscanner" rel="noopener noreferrer"&gt;ti.documentscanner&lt;/a&gt; - Titanium document scanner module for Android using ML Kit&lt;/li&gt;
&lt;li&gt;Some recompiled modules for ARM Mac: &lt;a href="https://github.com/dbankier/TiLogCatcher" rel="noopener noreferrer"&gt;TiLogCatcher&lt;/a&gt;, &lt;a href="https://github.com/m1ga/NappSlideMenu/releases/tag/2.0.0" rel="noopener noreferrer"&gt;NappSlideMenu&lt;/a&gt;, &lt;a href="https://github.com/designbymind/SquareCamera/tree/master/dist" rel="noopener noreferrer"&gt;SquareCamera&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/m1ga/ti.animation" rel="noopener noreferrer"&gt;ti.animation&lt;/a&gt; - Android libraries are updated to Lottie 6.6.6 and Rive 10.1.4&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/m1ga/ti.exoplayer/releases/tag/4.0.0" rel="noopener noreferrer"&gt;ti.exoplayer&lt;/a&gt; - updated to exoplayer 1.4.1 &lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>mobile</category>
      <category>titaniumsdk</category>
      <category>javascript</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium News #20</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sun, 05 Jan 2025 15:55:15 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-20-3n85</link>
      <guid>https://dev.to/miga/titanium-news-20-3n85</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;New year and it is finally time for another &lt;code&gt;Titanium News&lt;/code&gt; post! Lot's of work during the last blog post and Titanium SDK is now already at version 12.6.1.GA. So let's find out what's changed.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.4.0 - 12.6.1.GA
&lt;/h1&gt;

&lt;h3&gt;
  
  
  12.4.0
&lt;/h3&gt;

&lt;p&gt;In the last &lt;a href="https://dev.to/miga/titanium-news-19-3oig"&gt;Titanium News #19&lt;/a&gt; I've covered all 12.4.0.RC features that made it into the final version. &lt;/p&gt;

&lt;h3&gt;
  
  
  12.5.x
&lt;/h3&gt;

&lt;p&gt;Version &lt;strong&gt;12.5.0.GA&lt;/strong&gt; came out on Sept 16h 2024 and added support for iOS 18 and Xcode 16. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On Android we can now finally adjust the padding of a Textfield without the text disappearing:
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Firw3ei6w9gckfywkxhpq.png" alt="padding" width="629" height="305"&gt;
&lt;/li&gt;
&lt;li&gt;Android apps are now signed with signature scheme v3 and the default target SDK is Android API level 34 now&lt;/li&gt;
&lt;li&gt;if you open the photo gallery on Android you define &lt;code&gt;maxImages&lt;/code&gt; to select a max. number of images and you can use &lt;code&gt;pathOnly&lt;/code&gt; to just return the paths to the images and not the blobs&lt;/li&gt;
&lt;li&gt;Androids ListView layout was flattened (with some fixes in 12.5.1) to reduce the complexity&lt;/li&gt;
&lt;li&gt;&lt;p&gt;you can use &lt;code&gt;window.statusBarColor&lt;/code&gt; now on Android to change the statusBar color with code&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxoojpwf1bigzslhcwiq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxoojpwf1bigzslhcwiq.png" alt="statusbar" width="640" height="178"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;iOS adds &lt;code&gt;interactiveDismissModeEnabled&lt;/code&gt; to dynamically close a window by using a swipe gesture across the whole window&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ioslib was updated to support the new Xcode provisioning profile folder and fixes incremental builds&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.6.x
&lt;/h3&gt;

&lt;p&gt;With Ti 12.6.0 release notes you are now able to use module that use &lt;strong&gt;Gradle 8&lt;/strong&gt;. So feel free to update your modules now!&lt;/p&gt;

&lt;p&gt;If you update your modules make sure to set &lt;code&gt;minsdk: 12.6.0.GA&lt;/code&gt; in the manifest files as newer modules are compiled with JAVA_17 now instead of JAVA_11. That way you'll make sure that older SDKs won't load your module and not throw a Java error when building your apps. To make sure your module works in older SDKs you can build your module with &lt;code&gt;ti build -p android -b --sdk 12.5.1.GA&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Other changes include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS dark mode icon support&lt;/li&gt;
&lt;li&gt;Android: added new methods in Ti.Calendar.Calendar module for bulk operations&lt;/li&gt;
&lt;li&gt;update to Hyplerloop to support Ti 12.6.0+&lt;/li&gt;
&lt;li&gt;&lt;p&gt;gradle build cache is enabled for Android builds&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjp6vt50mqrvmsq5pvte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmjp6vt50mqrvmsq5pvte.png" alt="gradleCache" width="520" height="71"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;the content of an Android WebView will fill up the whole height by default now&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1atzlhedy5shrywhiic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs1atzlhedy5shrywhiic.png" alt="webview_height" width="560" height="174"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;small rotation fixes for CameraX rotation (open the camera with &lt;code&gt;useCameraX: true&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;a fix when you start you Android app from the home screen or play store&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For all changes and code examples make sure to check the &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.6.0.GA_Release_Note.html" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; and the linked tickets.&lt;/p&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;One change is already merged into the master branch (12.7.0): an &lt;strong&gt;update to the Material library&lt;/strong&gt;. This means that you can build Android modules now that threw this error before:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Error: Can't determine type for tag '?attr/shapeAppearanceCornerSmall'&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;One of those modules was titanium-stripe. As a first test I've updated that module &lt;a href="https://github.com/hansemannn/titanium-stripe/pull/5" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-stripe/pull/5&lt;/a&gt; to use a newer version (Stripe 20.53.0 from October). They've raised some other libraries after that so it's not the latest library yet 🙂 &lt;br&gt;
So if you had a library that threw the macro error you can use a nightly build of Titanium SDK and build your modules with that. To do that you run ti build -p android -b --sdk 12.7.0 in your modules /android folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BottomNavigation improvements&lt;/strong&gt;&lt;br&gt;
Another PR I'm currently working on is to improve the &lt;strong&gt;BottomNavigation&lt;/strong&gt; on Android. There is currently a small height bug when you use it with Material 3. The new &lt;code&gt;experimental&lt;/code&gt; implementation is based on a XML layout and removes the height issue. It will also follow the Material guidelines and show only one active window and you can use a icon font for the tab icons right away. Some  images and videos are available in the &lt;a href="https://github.com/tidev/titanium-sdk/pull/14126" rel="noopener noreferrer"&gt;pull request&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Android icons&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Ti.App.Android.changeIcon({
  from: "default",
  to: "red"
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I also made a &lt;a href="https://github.com/tidev/titanium-sdk/pull/14162" rel="noopener noreferrer"&gt;test pull request&lt;/a&gt; with a demo how to change the Android app icon at runtime. iOS has &lt;a href="https://github.com/ccavazos/titanium-alternate-icons" rel="noopener noreferrer"&gt; for this.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many more smaller bugfixes and code improvements. So make sure to browse through the &lt;a href="https://github.com/tidev/titanium-sdk/pulls" rel="noopener noreferrer"&gt;https://github.com/tidev/titanium-sdk/pulls&lt;/a&gt; section.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ti.animation&lt;/strong&gt;: the Android version was updated to support external URLs as a file input &lt;a href="https://github.com/m1ga/ti.animation" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.animation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ti.facebook&lt;/strong&gt;: the included Facebook module was updated to use the latest Facebook SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ti.colorpicker&lt;/strong&gt;: more properties, example code and fixes for the Android version &lt;a href="https://github.com/hansemannn/ti.colorpicker" rel="noopener noreferrer"&gt;https://github.com/hansemannn/ti.colorpicker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;firebase-firestore&lt;/strong&gt;: bug fixes and improvements when creating a document &lt;a href="https://github.com/hansemannn/titanium-firebase-firestore/releases" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-firebase-firestore/releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;crashlytics&lt;/strong&gt;: the update-symbols script for iOS was updated &lt;a href="https://github.com/hansemannn/titanium-crashlytics" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-crashlytics&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ti.pusher&lt;/strong&gt;: a new version with updated Pusher libraries was released &lt;a href="https://github.com/hansemannn/titanium-pusher/releases" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-pusher/releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ti.okhttp&lt;/strong&gt;: adds file upload for POST requests &lt;a href="https://github.com/m1ga/ti.okhttp" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.okhttp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ti.car&lt;/strong&gt;: I've uploaded the binary for the Android Auto module: &lt;a href="https://github.com/m1ga/ti.car" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.car&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>mobile</category>
      <category>javascript</category>
      <category>titaniumsdk</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium News #19</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Thu, 11 Jul 2024 15:15:41 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-19-3oig</link>
      <guid>https://dev.to/miga/titanium-news-19-3oig</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;It's &lt;code&gt;Titanium News&lt;/code&gt; time again! This time we will look at 12.3.1.GA, 12.4.0.RC, module updates and how to use ChatGPT to create Titanium iOS modules.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.3.1.GA
&lt;/h1&gt;

&lt;p&gt;The latest GA release 12.3.1 was published in June and fixed some issues that people reported with 12.3.0. The main part was related to Apples new privacy requirements in case you are using filesystem APIs like &lt;code&gt;createdAt()&lt;/code&gt; or &lt;code&gt;modifiedAt()&lt;/code&gt;. Support for iOS multi-scene apps has been removed for now as it introduced some issues for normal apps. It will be revised in future releases.&lt;br&gt;
On the Android side you can now use &lt;code&gt;switchCamera&lt;/code&gt; again when your app is not using &lt;code&gt;useCameraX&lt;/code&gt; and &lt;code&gt;touchFeedbackColor&lt;/code&gt; is fixed for BottomNavigation tabs.&lt;br&gt;
One new features is also included: You can use platform dependend &lt;code&gt;&amp;lt;id&amp;gt;&lt;/code&gt; blocks in your tiapp.xml now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;id&lt;/span&gt; &lt;span class="na"&gt;platform=&lt;/span&gt;&lt;span class="s"&gt;"android"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;com.miga.test_android&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;id&amp;gt;&lt;/span&gt;com.miga.test&lt;span class="nt"&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We all have an app where you had to switch ids and now you can have it in one tiapp.xml file!&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.4.0.RC
&lt;/h1&gt;

&lt;p&gt;A first test version of Titanium 12.4.0 was released this week. Since Google updated their store requirement a bit early you have to target Android API level 34 for new apps now. You can always update the level by hand by adding this to your tiapp.xml:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;android&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;manifest&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;uses-sdk&lt;/span&gt; &lt;span class="na"&gt;android:targetSdkVersion=&lt;/span&gt;&lt;span class="s"&gt;"34"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/manifest&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/android&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but in case you are using &lt;code&gt;BroadcastReceiver&lt;/code&gt; in your app you have to update to 12.4.0.RC as it required a code change. So in case you see this error &lt;code&gt;One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts&lt;/code&gt; when your build your app for targetSdkVersion 34 you have to update the Titanium SDK.&lt;/p&gt;

&lt;p&gt;But 12.4.0 doesn't just include that change, it also has some nice new features and bug fixes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add swipe actions support for Ti.UI.TableView (&lt;a href="https://github.com/tidev/titanium-sdk/pull/14065" rel="noopener noreferrer"&gt;video&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Android: add moveToBackground method&lt;/li&gt;
&lt;li&gt;Android: option to hide scrollbars in a WebView&lt;/li&gt;
&lt;li&gt;Android: missing Event.remove() method was added&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: parity for OptionBar color properties&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsn9xuv5avfhifk8d0qj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpsn9xuv5avfhifk8d0qj.png" alt="optionbar" width="602" height="419"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: track colors in a Switch&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3onxi1vx4ak561syzfpw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3onxi1vx4ak561syzfpw.png" alt="switch" width="300" height="194"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: text alignment for date pickers&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk31br3wbgfg815ppxdb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk31br3wbgfg815ppxdb1.png" alt="datepicker" width="640" height="266"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: video playback speed&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android: &lt;code&gt;defaultLang&lt;/code&gt; option in tiapp.xml (in case you run an app that doesn't have EN as the first language)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;iOS: iOS 17 symbol effects (&lt;a href="https://github.com/tidev/titanium-sdk/pull/13982" rel="noopener noreferrer"&gt;video&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;iOS: backgroundColor for RefreshControl&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t7c9m8a9yg4c8q3v1p6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t7c9m8a9yg4c8q3v1p6.png" alt="Image description" width="221" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;iOS: overrideUserInterfaceStyle a Picker&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;The task list for the next big Titanium release will include iOS 18 support and Android API level 34 by default. There are still plenty of pull requests in the queue &lt;a href="https://github.com/tidev/titanium-sdk/pulls" rel="noopener noreferrer"&gt;https://github.com/tidev/titanium-sdk/pulls&lt;/a&gt; like "flatten ListView layout" for Android that improves the performance in complex template setups and bigger changes like the upgrade to gradle 8. &lt;br&gt;
If you find bugs or need a feature feel free to create an issue at &lt;a href="https://github.com/tidev/titanium-sdk/issues" rel="noopener noreferrer"&gt;https://github.com/tidev/titanium-sdk/issues&lt;/a&gt; so Titanium developers can look at it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;Module developers have been busy updating their modules and creating some new ones. Here is a quick list of some of those:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review dialog: the Android version has been updated to use the latest play store library. Make sure to get the latest version from &lt;a href="https://github.com/hansemannn/titanium-review-dialog/" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-review-dialog/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;in-app update: same for the Android in-app update module. Go to &lt;a href="https://github.com/m1ga/ti.inappupdate" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.inappupdate&lt;/a&gt; and grab the latest version with the latest play store libraries.&lt;/li&gt;
&lt;li&gt;Titanium QR Code generator &amp;amp; scanner: a new iOS version with a cancel button is available at &lt;a href="https://github.com/hansemannn/titanium-qrcode" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-qrcode&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Screen Recording detector: a new iOS module by &lt;a href="https://github.com/Max87ZA/" rel="noopener noreferrer"&gt;Max87ZA&lt;/a&gt; that detects when you do a screen recording on iOS. This was created with help of ChatGPT-o! Check it out at &lt;a href="https://github.com/Max87ZA/Ti.ScreenRecordingDetector" rel="noopener noreferrer"&gt;https://github.com/Max87ZA/Ti.ScreenRecordingDetector&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Social Share: another new iOS module for native text and image sharing by &lt;a href="https://github.com/emptybox/" rel="noopener noreferrer"&gt;emptybox&lt;/a&gt;. Download it from &lt;a href="https://github.com/emptybox/SocialShareEBM" rel="noopener noreferrer"&gt;https://github.com/emptybox/SocialShareEBM&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;in-app-purchasing: &lt;a href="https://github.com/hansemannn" rel="noopener noreferrer"&gt;Hans&lt;/a&gt; updated his in-app payment Android module &lt;a href="https://github.com/hansemannn/titanium-iap/" rel="noopener noreferrer"&gt;https://github.com/hansemannn/titanium-iap/&lt;/a&gt; to use the latest play billing API 7.0.0&lt;/li&gt;
&lt;li&gt;ti.animation: The Android Lottie library of &lt;a href="https://github.com/m1ga/ti.animation" rel="noopener noreferrer"&gt;https://github.com/m1ga/ti.animation&lt;/a&gt; was updated.&lt;/li&gt;
&lt;li&gt;PurgeTSS: &lt;a class="mentioned-user" href="https://dev.to/maccesar"&gt;@maccesar&lt;/a&gt; made a big update v6.3.3 for his PurgeTSS library. Make sure to look at &lt;a href="https://purgetss.com/" rel="noopener noreferrer"&gt;https://purgetss.com/&lt;/a&gt; for all the changes and update with &lt;code&gt;npm install -g purgetss@latest&lt;/code&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm sure I've missed some :) So feel free to leave a comment for new modules, updates or if you'll need some module updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Spotlight
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Using ChatGPT to create a custom iOS module.
&lt;/h2&gt;

&lt;p&gt;Multiple Titanium users are leveraging ChatGPT to support them in building apps and modules. As mentioned in the last Titanium News there is also a Titanium ChatGPT copilot at &lt;a href="https://chat.openai.com/g/g-ZNwI6zmBi-titanium-copilot" rel="noopener noreferrer"&gt;https://chat.openai.com/g/g-ZNwI6zmBi-titanium-copilot&lt;/a&gt;.&lt;br&gt;
The following are the prompts that were used to create the Social share module:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Creating a module for Titanium (Appcelerator) to share an image via text, email, Instagram, Facebook, or save to the local gallery requires several steps. Below is a detailed guide and sample code for creating an iOS module compatible with the latest version of Xcode and Swift.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To get basic instructions to setup a new module, the first code and compile instructions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;what do I name the new swift file I'm creating and where should it be placed?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Returned detailed instructions where you have to place the files in your directory and what to put in each file.&lt;br&gt;
Even switching to Objectiv-C with&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If I want to use obj-c what would the code look like?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;was answered right away with new code.&lt;br&gt;
Even errors like&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm having issues with this: - (void)share:(id)args; - I'm getting the following errors: expected ';' at end of declaration list. Expected member name or ';' after declaration specifiers. Type name requires a specifier or qualifier &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;at UIImage I'm getting this error: Definition of 'TiBlob' must be imported from module 'TitaniumKit.TiBlob' before it is required&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;were fixed with the results by ChatGPT.&lt;/p&gt;

&lt;p&gt;Sometimes it will return old &lt;code&gt;appc ti&lt;/code&gt; commands but it's easy to use &lt;code&gt;ti&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;Have a look at the full conversation at &lt;a href="https://www.fromzerotoapp.com/create-a-titanium-ios-module-with-chatgpt/" rel="noopener noreferrer"&gt;https://www.fromzerotoapp.com/create-a-titanium-ios-module-with-chatgpt/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you create some new module leave a comment and I'll feature it next time.&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>mobile</category>
      <category>javascript</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium SDK 12.3.1.GA released</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Wed, 12 Jun 2024 18:21:55 +0000</pubDate>
      <link>https://dev.to/miga/titanium-sdk-1231ga-released-49on</link>
      <guid>https://dev.to/miga/titanium-sdk-1231ga-released-49on</guid>
      <description>&lt;p&gt;&lt;strong&gt;Titanium SDK&lt;/strong&gt; helps you to build native cross-platform mobile application using JavaScript and the Titanium API, which abstracts the native APIs of the mobile platforms. Titanium empowers you to create immersive, full-featured applications, featuring over 80% code reuse across mobile apps.&lt;/p&gt;

&lt;p&gt;The new version 12.3.1.GA is now available and some of the features are:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fix(ios): fix privacy-related Filesystem APIs
handle first privacy manifest changes
Revert "feat(ios): support multi-scene applications
node-appc update - fix: handle spaces in deployType and platform
fix noresults event in ListView width custom query
node-titanium-sdk update - fix: arm mac emulator fix, use platform for id
Ti.UI.Tab selected event returns no data
touchFeedbackColor not working for a bottomNavigation tab
switchCamera method was missing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Blog post: &lt;a href="https://tidev.io/blog/sdk_12_3_1_ga"&gt;https://tidev.io/blog/sdk_12_3_1_ga&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Changelog: &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.3.1.GA_Release_Note.html"&gt;https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.3.1.GA_Release_Note.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>mobile</category>
      <category>javascript</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium News #18</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sun, 31 Mar 2024 10:47:47 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-18-3ok5</link>
      <guid>https://dev.to/miga/titanium-news-18-3ok5</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;After a long time it is finally time for another &lt;code&gt;Titanium News&lt;/code&gt; post!&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;Titanium 12.3.0, iOS privacy requirements, big gradle update coming soon, community project spotlight and many module updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.3.0.GA
&lt;/h1&gt;

&lt;p&gt;In February the latest version of Titanium SDK 12.3.0 was release. With the help of some community feedback during the testing phase the Titanium team was able fix the latest bugs before the final release. Testing RC versions is very useful so that everyone benefits from a stable release at the end!&lt;/p&gt;

&lt;h3&gt;
  
  
  What's new:
&lt;/h3&gt;

&lt;p&gt;The SDK now has official support for &lt;strong&gt;Node.js 18 and 20&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;iOS got support for &lt;strong&gt;multi-scene applications&lt;/strong&gt; like CarPlay or visionsOS. For CarPlay check &lt;a href="https://github.com/hansemannn/titanium-carplay"&gt;Hans repo&lt;/a&gt; and for an Android Auto module check &lt;a href="https://github.com/m1ga/ti.car"&gt;my repo&lt;/a&gt;.&lt;br&gt;
You can use iOS 17 spring animations (&lt;a href="https://titaniumsdk.com/api/titanium/ui/animation.html#properties_bounce"&gt;docs&lt;/a&gt;) and a Label can use &lt;code&gt;html&lt;/code&gt; (&lt;a href="https://titaniumsdk.com/api/titanium/ui/label.html#properties_html"&gt;docs&lt;/a&gt;) on iOS too. Thanks to &lt;a href="https://github.com/Brianggalvez"&gt;@Brianggalvez&lt;/a&gt; for the PR! &lt;br&gt;
Another parity feature: you can use &lt;code&gt;view.rotation&lt;/code&gt; to quickly rotate a view. Android supported that for a while now and finally you can use it on iOS.&lt;/p&gt;

&lt;p&gt;On the Android side a Floating Action Button icon will now respect the &lt;code&gt;tintColor&lt;/code&gt; and will change its color.&lt;br&gt;
The Android Label got some new properties: &lt;code&gt;lineCount&lt;/code&gt; (returns the lines of the label) and &lt;code&gt;visibleText&lt;/code&gt; (returns the visible text). This is very useful if you work with an &lt;code&gt;ellipsize: true&lt;/code&gt; Label. Check &lt;a href="https://github.com/tidev/titanium-sdk/pull/13583"&gt;the PR&lt;/a&gt; for some demo code. And as described in a previous new post: &lt;code&gt;breakStrategy&lt;/code&gt; and  &lt;code&gt;hyphenationFrequency&lt;/code&gt; (&lt;a href="https://github.com/tidev/titanium-sdk/pull/13706"&gt;demo code&lt;/a&gt;). &lt;br&gt;
The &lt;code&gt;titleAttributes.color&lt;/code&gt; property is now exposed on Android so it will use the same value as iOS to color the title text&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6whdyg2ucmbolmxoobq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa6whdyg2ucmbolmxoobq.png" alt="title color" width="480" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last but not least we have some module updates like hyperloop and ti.map.&lt;/p&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Titanium CLI
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/cb1kenobi"&gt;@cb1kenobi&lt;/a&gt; is still going strong on to bring the next version of Titanium CLI to a final release. You can run &lt;code&gt;npm i -g titanium@next&lt;/code&gt; to get the latest RC version and help testing it! Give it a go and report issues at &lt;a href="https://slack.tidev.io/"&gt;TiSlack&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  iOS Privacy Requirements
&lt;/h3&gt;

&lt;p&gt;If you published an iOS app recently you might got an email by Apple about the new Privacy Requirements. &lt;a href="https://github.com/hansemannn/"&gt;Hans&lt;/a&gt; put together some information how to handle that in your Titanium SDK app:&lt;br&gt;
&lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/Adhere_to_the_iOS17_Privacy_Requirements.html"&gt;https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/Adhere_to_the_iOS17_Privacy_Requirements.html&lt;/a&gt;&lt;br&gt;
and made a &lt;a href="https://github.com/tidev/titanium-sdk/pull/14007"&gt;PR&lt;/a&gt; for the next Ti version to guard some methods.&lt;/p&gt;

&lt;h3&gt;
  
  
  gradle 8 update
&lt;/h3&gt;

&lt;p&gt;Community member &lt;a class="mentioned-user" href="https://dev.to/abdullahfaqeir"&gt;@abdullahfaqeir&lt;/a&gt; made a &lt;a href="https://github.com/tidev/titanium-sdk/pull/14014"&gt;huge PR&lt;/a&gt; to upgrade the Titanium SDK to use gradle 8! This is a big step and it allows Titanium to finally use the latest Material library that blocked some modules of using their latest libraries. It still takes a bit to test all scenarios before this can be merged into the master branch but it already looks very promising. &lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;Here are some new and updated modules: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/AbdullahFaqeir/AccuRoot:"&gt;https://github.com/AbdullahFaqeir/AccuRoot:&lt;/a&gt; Titanium native module to check if device is rooted/jailbroken (iOS/Android)&lt;/li&gt;
&lt;li&gt;Updated iOS version of ti.admob: &lt;a href="https://github.com/tidev/ti.admob/releases/tag/ios-7.0.0"&gt;https://github.com/tidev/ti.admob/releases/tag/ios-7.0.0&lt;/a&gt; (Thanks to &lt;a href="https://github.com/Astrovic"&gt;@Astrovic&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;update to the CoreML iOS Module: &lt;a href="https://github.com/hansemannn/titanium-coreml/pull/3"&gt;https://github.com/hansemannn/titanium-coreml/pull/3&lt;/a&gt; - move to swift, support loading AI models at runtime&lt;/li&gt;
&lt;li&gt;Cutout circle API for ti.map: &lt;a href="https://github.com/tidev/ti.map/pull/677"&gt;https://github.com/tidev/ti.map/pull/677&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;new module for SuperWall support by &lt;a href="https://github.com/narbs/"&gt;@narbs&lt;/a&gt;: &lt;a href="https://github.com/narbs/ti.superwall"&gt;https://github.com/narbs/ti.superwall&lt;/a&gt; (iOS)&lt;/li&gt;
&lt;li&gt;Updated "review dialog" Android version: &lt;a href="https://github.com/hansemannn/titanium-review-dialog/releases/tag/android-2.2.0"&gt;https://github.com/hansemannn/titanium-review-dialog/releases/tag/android-2.2.0&lt;/a&gt; - updated libraries&lt;/li&gt;
&lt;li&gt;bugfix for the Android pusher module: &lt;a href="https://github.com/hansemannn/titanium-pusher/pull/1"&gt;https://github.com/hansemannn/titanium-pusher/pull/1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ti.mediacontrol has support for setting metadata (e.g. for car disaplys): &lt;a href="https://github.com/m1ga/ti.mediacontrol"&gt;https://github.com/m1ga/ti.mediacontrol&lt;/a&gt; (Android)&lt;/li&gt;
&lt;li&gt;ti.animation Android Lottie and Rive libraries update: &lt;a href="https://github.com/m1ga/ti.animation/releases/tag/android-4.6.0"&gt;https://github.com/m1ga/ti.animation/releases/tag/android-4.6.0&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ti.paint for Android has a &lt;code&gt;fill()&lt;/code&gt; method now: &lt;a href="https://github.com/tidev/ti.paint/pull/36"&gt;https://github.com/tidev/ti.paint/pull/36&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm sure I've missed some :) So feel free to leave a comment for new modules, updates or if you'll need some module updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tips &amp;amp; Tricks
&lt;/h1&gt;

&lt;p&gt;A new short tutorial at &lt;a href="https://www.fromzerotoapp.com/"&gt;fromzerotoapp.com&lt;/a&gt; how to calculate the folder size with all subfolders in your app: &lt;br&gt;
&lt;a href="https://www.fromzerotoapp.com/calculate-the-folder-size-with-all-sub-folders-and-files/"&gt;https://www.fromzerotoapp.com/calculate-the-folder-size-with-all-sub-folders-and-files/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Spotlight
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Titanium Copilot
&lt;/h3&gt;

&lt;p&gt;AI support for Titanium SDK users is available! &lt;a class="mentioned-user" href="https://dev.to/jasonkneen"&gt;@jasonkneen&lt;/a&gt; created a Titanium ChatGPT copilot at &lt;a href="https://chat.openai.com/g/g-ZNwI6zmBi-titanium-copilot"&gt;https://chat.openai.com/g/g-ZNwI6zmBi-titanium-copilot&lt;/a&gt; to help you with all Titanium related coding questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  PurgeTSS Copilot
&lt;/h3&gt;

&lt;p&gt;The author of the &lt;a href="https://purgetss.com/"&gt;PurgeTSS&lt;/a&gt; toolkit made a ChatGPT copilot version for PurgeTSS: &lt;a href="https://chat.openai.com/g/g-uLUdbBass-purgetss-copilot"&gt;PurgeTSS Copilot&lt;/a&gt; to support you with AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Alterante
&lt;/h3&gt;

&lt;p&gt;Alterante lets you self-host your own private file &amp;amp; chat server on your PC/Mac/Linux, then collaborate, chat, and access / share files privately and securely with authorized mobile devices (or browser session). It's build with Titanium and was recently updated to us the latest SDK version. Have a look at &lt;br&gt;
&lt;a href="https://apps.apple.com/us/app/alterante/id785613128"&gt;https://apps.apple.com/us/app/alterante/id785613128&lt;/a&gt; and &lt;a href="https://www.alterante.com/"&gt;https://www.alterante.com/&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>mobile</category>
      <category>javascript</category>
      <category>news</category>
    </item>
    <item>
      <title>My must have WordPress plugins for 2024</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Thu, 16 Nov 2023 14:09:25 +0000</pubDate>
      <link>https://dev.to/miga/my-must-have-wordpress-plugins-for-2024-33gn</link>
      <guid>https://dev.to/miga/my-must-have-wordpress-plugins-for-2024-33gn</guid>
      <description>&lt;p&gt;When doing a lot of WordPress work you'll find yourself installing the same plugins in every instance. Here is my list of must have plugins that I use in almost every instance. &lt;/p&gt;

&lt;p&gt;Feel free to add your go-to plugins in the comments.&lt;/p&gt;

&lt;h2&gt;
  
  
  First things first
&lt;/h2&gt;

&lt;p&gt;After I install a new WordPress I do a few steps first: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remove &lt;code&gt;Akismet&lt;/code&gt; and &lt;code&gt;Hello Dolly&lt;/code&gt; from the plugins page (should be empty afterwards)&lt;/li&gt;
&lt;li&gt;set a static page as the homepage (Settings - reading)&lt;/li&gt;
&lt;li&gt;disable comments and avatars (Settings - discussion: disable all "default post settings" and "show avatars", enable "Comment must be manually approved")&lt;/li&gt;
&lt;li&gt;set permalinks to "post name" (Settings - permalinks)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Plugins
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Caching
&lt;/h3&gt;

&lt;p&gt;For most servers I use &lt;a href="https://wordpress.org/plugins/wp-super-cache/"&gt;WP Super Cache&lt;/a&gt;. Install and enable it. After that go into the Advanced settings and enable some of the other &lt;code&gt;Recommended&lt;/code&gt; settings under &lt;code&gt;Miscellaneous&lt;/code&gt;. Always click the "Delete Cache" button and test your page afterwards. &lt;br&gt;
If you run a LiteSpeed server you should use &lt;a href="https://wordpress.org/plugins/litespeed-cache/"&gt;LiteSpeed Cache&lt;/a&gt; as an alternative.&lt;/p&gt;

&lt;h3&gt;
  
  
  Minify/optimization
&lt;/h3&gt;

&lt;p&gt;Once caching is working I'd like to add some minify plugin that will merge &amp;amp; minify files. My choice is &lt;a href="https://wordpress.org/plugins/autoptimize/"&gt;Autoptimize&lt;/a&gt; for those tasks. This requires some testing at the end how far you can optimize your files. Especially if you use custom JS. Some settings that you can enable right away are: Optimize JS, CSS and HTML. Be careful with the subsettings. I recommend checking it at the end to see if you page still works fine.&lt;/p&gt;

&lt;p&gt;Nice extra feature: Autoptimize has two nice features in the  Extra settings: remove Google fonts and remove emojis. Enable those to reduce some slack. &lt;/p&gt;

&lt;h3&gt;
  
  
  SEO
&lt;/h3&gt;

&lt;p&gt;Of course I played with Yoast first but I've quickly switched to &lt;a href="https://wordpress.org/plugins/autodescription/"&gt;The SEO Framework&lt;/a&gt;. It's very lightweight and the developer has deep WP knowledge and added some performance features to the core so he really knows what to do!&lt;br&gt;
If you don't need any special Yoast or Rank Math features that your SEO team is forcing you to use: stick with SEO Framework.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cookies
&lt;/h3&gt;

&lt;p&gt;GDRP/DSGVO is still a big topic and there are plenty of plugins out there. I found &lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt; a very good and easy to setup plugin. I have a dedicated tutorial at &lt;a href="https://dev.to/miga/real-cookie-banner-tutorial-wordpress-cookie-banner-5hdg"&gt;Real cookie banner tutorial - WordPress cookie banner&lt;/a&gt; if you want to get some more details.&lt;/p&gt;

&lt;p&gt;It has a free version that you can use for most of your pages but you'll have to do some of the work yourself. If you buy the &lt;a href="https://devowl.io/lAWmsqLD/"&gt;paid version&lt;/a&gt; you'll get some presets that will make your setup easier/quicker. But again: free version is enough for most pages!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Side note: Use code &lt;code&gt;MIGAWEB&lt;/code&gt; to get 20% off in case you want to buy it&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  SVG
&lt;/h3&gt;

&lt;p&gt;Still needed if you want to upload SVG files: &lt;a href="https://wordpress.org/plugins/svg-support/"&gt;SVG Support&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Statistics
&lt;/h3&gt;

&lt;p&gt;A simple plugin to get some stats is &lt;a href="https://de.wordpress.org/plugins/wp-statistics/"&gt;WP Statistics&lt;/a&gt; that will run on your server and doesn't use external connections. &lt;/p&gt;

&lt;h3&gt;
  
  
  Backup/Migration
&lt;/h3&gt;

&lt;p&gt;As I develop my pages locally first and then transfer them to the client server I use &lt;a href="https://wpvivid.com/ref/739/"&gt;WP Vivid - Backup &amp;amp; Migrate&lt;/a&gt; to do that. &lt;br&gt;
After the site is running I use that to make backups too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Elementor
&lt;/h3&gt;

&lt;p&gt;Yes, I'm an &lt;a href="https://be.elementor.com/visit/?bta=207645&amp;amp;nci=5383"&gt;Elementor&lt;/a&gt; user! The advantage for me is that it is very easy for the end user/client to add content without me. That said: I create custom widgets and themes (if needed) the optimize HTML output for bigger widgets. So all the "but it's slow and produce ugly code" is almost gone :) I still would prefer a smaller DOM output for some widgets but for most pages it is fine and I still can get a 100% page speed score. &lt;/p&gt;

&lt;p&gt;To extend the free version of &lt;a href="https://be.elementor.com/visit/?bta=207645&amp;amp;nci=5383"&gt;Elementor&lt;/a&gt; you should install the &lt;a href="https://wordpress.org/plugins/header-footer-elementor/"&gt;Elementor Header &amp;amp; Footer Builder&lt;/a&gt; to create you own header/footer templates. And I've made an own plugin to create templates for custom post types: &lt;a href="https://wordpress.org/plugins/custom-post-type-templates-for-elementor/"&gt;Custom post type templates for Elementor&lt;/a&gt;. This allows you to style e.g. news posts without buy the Pro version.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you want to &lt;a href="https://be.elementor.com/visit/?bta=207645&amp;amp;nci=5383"&gt;buy the pro version&lt;/a&gt; make sure to do that before December 4th 2023! The will adjust/increase the pricing as shown in &lt;a href="https://elementor.com/blog/updates-to-the-elementor-pro-essential-plan/"&gt;Upcoming Modifications to the Elementor Pro-Essential Subscription Plan&lt;/a&gt;. That way you'll keep all the benefits of the old price model. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;
  
  
  Useful Elementor settings:
&lt;/h5&gt;

&lt;p&gt;Go to your Elementor - settings section and disable "Google fonts" and "Generator tag" in the "Advanced" tab&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom fonts
&lt;/h3&gt;

&lt;p&gt;Many pages require you to use a custom font. To have it installed locally I use &lt;a href="https://wordpress.org/plugins/custom-fonts/"&gt;Custom fonts&lt;/a&gt;. Upload the font and you can also use it in Elementor without requests to Google fonts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contact forms
&lt;/h3&gt;

&lt;p&gt;I'm a &lt;a href="https://wordpress.org/plugins/contact-form-7/"&gt;Contact form 7&lt;/a&gt; user. I like the bare-bone form editor, gets the job done quickly.&lt;/p&gt;

&lt;h4&gt;
  
  
  Anti-Spam
&lt;/h4&gt;

&lt;p&gt;One very nice anti-spam plugin I recently found is &lt;a href="https://wordpress.org/plugins/honeypot/"&gt;WP Armour – Honeypot Anti Spam&lt;/a&gt;. Just install it and enable it - works right away with Contact Form 7 and reduces spam by a large number!&lt;/p&gt;




&lt;p&gt;Those are my general plugins that are in almost all my WordPress pages! &lt;/p&gt;

&lt;p&gt;For a theme I most of the time go with a custom, self-made theme or create a child theme of &lt;a href="https://wordpress.org/themes/astra/"&gt;Astra&lt;/a&gt; with their own &lt;a href="https://wpastra.com/child-theme-generator/"&gt;Child theme generator&lt;/a&gt;. The advantage of a child theme is that you can add custom PHP code and still be able to update your theme.&lt;/p&gt;

&lt;p&gt;Some nice-to-have plugins that I don't need all the time are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Popups: &lt;a href="https://wordpress.org/plugins/popup-maker/"&gt;Popup Maker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Custom Post Types/Custom fields: &lt;a href="https://wordpress.org/plugins/advanced-custom-fields/"&gt;ACF&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Redirect plugin: &lt;a href="https://wordpress.org/plugins/redirection/"&gt;Redirection&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Newsletter: &lt;a href="https://de.wordpress.org/plugins/newsletter/"&gt;Newsletter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm getting my domains from &lt;a href="https://www.do.de/?ap=HsFAeWnH5Zby"&gt;Domain offensive&lt;/a&gt; and my servers from &lt;a href="http://aklam.io/r4TAWE"&gt;IONOS&lt;/a&gt; or &lt;a href="https://www.awin1.com/awclick.php?gid=339941&amp;amp;mid=11851&amp;amp;awinaffid=1345901&amp;amp;linkid=2984904&amp;amp;clickref=dev"&gt;Check Domain&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As mentioned before: these are &lt;em&gt;my&lt;/em&gt; favorite plugins that I use on all instances. Especially Elementor is one big plugin not everyone is using or has alternatives for it like Bricks Builder, Breakdance, Divi,.... That's up to you what you want to use there. I still find Gutenberg not very user-friendly when editing pages. Would love to switch to that at some point!&lt;/p&gt;

&lt;p&gt;Happy to hear what you are using in your current and next projects!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>elementor</category>
      <category>plugins</category>
    </item>
    <item>
      <title>Titanium News #17</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Tue, 10 Oct 2023 18:25:50 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-17-3cm8</link>
      <guid>https://dev.to/miga/titanium-news-17-3cm8</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;It's been a long time since the last news update. Been busy with other projects 😄 Many Titanium related of course.&lt;/p&gt;

&lt;p&gt;Titanium 12.2.1.GA, whats new in main branch and many modules updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.2.1.GA
&lt;/h1&gt;

&lt;p&gt;Happy to announce that Titanium 12.2.x is available! The latest 12.2.1 bugfix release fixed some issues that where found after 12.2.0. Titanium 12.2.1 is packed with fixes and updates again. You can check all in the &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.2.0.GA_Release_Note.html"&gt;12.2.0.GA release notes&lt;/a&gt; and the &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.2.1.GA_Release_Note.html"&gt;12.2.1.GA release notes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some highlights are:&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduced TableView updates on Android - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13526"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The amount of row updates was reduced a lot when you set the &lt;code&gt;data&lt;/code&gt; property of a TableView. In a simple test with just 20 lines the internal update function was called only 23 times instead of 43 times. &lt;/p&gt;

&lt;h3&gt;
  
  
  New ListView scrolling event property &lt;code&gt;forceUpdates&lt;/code&gt; - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13830"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://user-images.githubusercontent.com/4334997/237404559-061d6435-d3bf-4b66-9cf7-d009728c508c.mp4"&gt;Video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;forceUpdates&lt;/code&gt; is a new property that you can use in combination with &lt;code&gt;continuousUpdate&lt;/code&gt;. If you enable both you'll get scroll updates for almost every pixel (as fast as it can) and you receive the scrolled &lt;code&gt;top&lt;/code&gt; position of your ListView. With this you can hide/show elements based on the scroll position. Full example can be found in the PR.&lt;/p&gt;

&lt;h3&gt;
  
  
  Different TabGroup tabModes on Android - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13877"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u5puZmfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dj7jdqtbg57elewntqjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u5puZmfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dj7jdqtbg57elewntqjx.png" alt="tabmodes" width="411" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When opening a TabGroup you can set it to be either fixed (&lt;code&gt;Ti.UI.Android.TAB_MODE_FIXED&lt;/code&gt;) or scrollable (&lt;code&gt;Ti.UI.Android.TAB_MODE_SCROLLABLE&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  Android: new property &lt;code&gt;badgeTextColor&lt;/code&gt; &lt;a href="https://github.com/tidev/titanium-sdk/pull/13874"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4XR78nF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o87rnptqp50bkm6e98c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4XR78nF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o87rnptqp50bkm6e98c3.png" alt="badge" width="480" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;badgeTextColor&lt;/code&gt; can be used in combination with &lt;code&gt;badgeBackgroundColor&lt;/code&gt; to style the BottomNavigation badge on Android.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android: Secure Ti.Network.Socket &lt;a href="https://github.com/tidev/titanium-sdk/pull/13774"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you use a TCP socket in Titanium you can enable &lt;code&gt;secure:true&lt;/code&gt; on Android now to use a SSLSocket connection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android: make rotationX, rotationY animatable - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13824"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Android has two properties &lt;code&gt;rotationX&lt;/code&gt; and &lt;code&gt;rotationY&lt;/code&gt; that allow you to quickly set the rotation of an element. Those properties can now be used in the &lt;code&gt;animate&lt;/code&gt; method. A full example + video is available in the PR.&lt;/p&gt;

&lt;h3&gt;
  
  
  Android: CameraX - &lt;a href="https://github.com/tidev/titanium-sdk/pull/12395"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RtCzYrBI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/611ab55bz1gkw684270x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RtCzYrBI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/611ab55bz1gkw684270x.jpg" alt="camerax" width="432" height="480"&gt;&lt;/a&gt;&lt;br&gt;
One of the bigger changes is that CameraX is included now! If you want to use it you can enable it with &lt;code&gt;useCameraX:true&lt;/code&gt; inside the &lt;code&gt;showCamera&lt;/code&gt; properties. It only works in combination with an overlay (otherwise the normal camera was used) but it has many new properties like &lt;code&gt;aspectRatio&lt;/code&gt;, &lt;code&gt;scalingMode&lt;/code&gt;, &lt;code&gt;verticalAlign&lt;/code&gt;, &lt;code&gt;targetImageWidth/Height&lt;/code&gt;. &lt;br&gt;
Check the PR for more examples and images. Feel free to opt-in to CameraX and start using it. &lt;/p&gt;
&lt;h3&gt;
  
  
  modernize Apple Script to open Xcode - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13898"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;After quite some time the Apple script to open Xcode was modernized including support of the macOS system settings app, clean up and better wording in the dialog.&lt;/p&gt;
&lt;h3&gt;
  
  
  iOS: support for DRM-encrypted video assets - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13844"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;fairPlayConfiguration&lt;/code&gt; inside the VideoPlayer in order to play DRM-encrypted videos.&lt;/p&gt;
&lt;h3&gt;
  
  
  iOS: &lt;code&gt;keyboardDismissMode&lt;/code&gt; for TableViews - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13860"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;After adding &lt;code&gt;keyboardDismissMode&lt;/code&gt; in ListViews it is now available for TableViews, too.&lt;/p&gt;
&lt;h3&gt;
  
  
  macOS: Build fixes for macOS (Catalyst) builds - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13903"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Build fixes for macOS builds.&lt;/p&gt;
&lt;h3&gt;
  
  
  iOS: fix orientation of the thumbnail image created from a video - &lt;a href="https://github.com/tidev/titanium-sdk/pull/13859"&gt;PR&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;If you create thumbnails from videos they will be in the correct orientation now.&lt;/p&gt;

&lt;p&gt;And there are only a few of the pull request that were merged into 12.2.0. Big 👏 to the community and all contributors 🚀&lt;/p&gt;
&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;The next release with new features will be 12.3.0. Some possible pull request that could make it in to that version are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13891"&gt;iOS 17+ spring animations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13896"&gt;iOS: expose Ti.UI.Window.largeTitleAttributes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dev.tolabel%20breakStrategy%20&amp;amp;%20hyphenationFrequency"&gt;Android: hyphenation modes for labels&lt;/a&gt; - &lt;b&gt;already merged&lt;/b&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13882"&gt;rotate event for views&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13848"&gt;Andorid: EncryptedSharedPreferences&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and more. Currently we have &lt;a href="https://github.com/tidev/titanium-sdk/pulls"&gt;63 open PR&lt;/a&gt; but feel free to add more or test them.&lt;/p&gt;
&lt;h3&gt;
  
  
  Titanium CLI v7 (alpha)
&lt;/h3&gt;

&lt;p&gt;Behind the scenes one of the core developers &lt;a href="https://github.com/cb1kenobi"&gt;@cb1kenobi&lt;/a&gt; is working on a new, modernized Titanium CLI. You can follow his progress in the &lt;a href="https://github.com/tidev/titanium-cli/pull/618"&gt;alpha PR&lt;/a&gt; post. &lt;/p&gt;
&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Firebase modules: almost all firebase modules have been updated. A quick way to see the latest version was merged into the main repo: &lt;a href="https://github.com/hansemannn/titanium-firebase#features"&gt;https://github.com/hansemannn/titanium-firebase#features&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/m1ga/ti.mmkv"&gt;ti.mmkv&lt;/a&gt; - MMKV is an efficient, small, easy-to-use mobile key-value storage. The module is available for Android now&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/m1ga/ti.ffmpeg"&gt;ti.ffmpeg&lt;/a&gt; - Thanks for &lt;a href="https://github.com/narbs"&gt;@narbs&lt;/a&gt; the ti.ffmpeg module is now available for iOS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-thumbnail-generator"&gt;titanium-thumbnail-generator&lt;/a&gt; - Generate high performance thumbnails for common file types natively using the Titanium SDK.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.map"&gt;ti.map&lt;/a&gt; - new &lt;a href="https://github.com/tidev/ti.map/pull/638"&gt;search completion API for iOS&lt;/a&gt; and you can get the &lt;a href="https://github.com/tidev/ti.map/pull/572"&gt;bounding box of a polygon&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.facebook"&gt;ti.facebook&lt;/a&gt; - updated Facebook libraries&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.imagefactory/"&gt;ti.imagefactory&lt;/a&gt; - not merged yet but there is a version that has async compression and resizing methods: &lt;a href="https://github.com/tidev/ti.imagefactory/pull/336"&gt;https://github.com/tidev/ti.imagefactory/pull/336&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Tips &amp;amp; Tricks
&lt;/h1&gt;
&lt;h3&gt;
  
  
  Access database/collections of your Android app
&lt;/h3&gt;

&lt;p&gt;If you use Collections inside your app (or a local database) you can use the following command to grab the Alloy database and dump it to a local file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;adb -d shell "run-as com.yourId cat /data/data/com.yourId/databases/_alloy_" &amp;gt; test.db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can use e.g. SQLiteBrowser to view it and access it as a normal database. If you make changes in your app can run the command again and press F5 to update the data in SQLiteBrowser. This makes it much quicker to verify the data inside your database and check the collections.&lt;/p&gt;

&lt;h3&gt;
  
  
  Optimize GeoJSON data
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1oqVChFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5m5tnwp981e53o1xk1tj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1oqVChFz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5m5tnwp981e53o1xk1tj.png" alt="geojson" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some apps require you to use a GeoJSON file to display polygons on your map. Those files can be very big if they are really detailed. &lt;br&gt;
Luckily there are some tools like &lt;a href="https://turfjs.org/docs/#simplify"&gt;https://turfjs.org/docs/#simplify&lt;/a&gt; and &lt;a href="https://mapshaper.org/"&gt;https://mapshaper.org/&lt;/a&gt; to optimize your files and reduce the content. If you don't need every small border point you can go down from a 1.7MB file to 128KB and still have good enough shape to show it in your app. Smaller files are parsed faster so you can test how low you can go without losing details.&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>mobile</category>
      <category>javascript</category>
      <category>news</category>
    </item>
    <item>
      <title>Titanium News #16</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sun, 04 Jun 2023 20:51:45 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-16-46hf</link>
      <guid>https://dev.to/miga/titanium-news-16-46hf</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;Titanium 12.1.2.GA, whats new in main branch and lots of modules.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12.1.2.GA
&lt;/h1&gt;

&lt;p&gt;Between the last Titanium News and now there was 12.1.1.GA and 12.1.2.GA was released a couple of days ago.&lt;/p&gt;

&lt;p&gt;You can check out the release notes at &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.1.1.GA_Release_Note.html"&gt;12.1.1.GA&lt;/a&gt; and &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.1.2.GA_Release_Note.html"&gt;12.1.2.GA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Some bugfixes for Xcode 14.3, especially when using apps with spaces or special characters in the app name (you can also use &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_How-tos/Cross-Platform_Mobile_Development_In_Titanium/Internationalization.html#app-name-localization"&gt;i18n app names&lt;/a&gt;) and the Android TableView will stay at it's scroll position when you reassign data.&lt;/p&gt;

&lt;p&gt;Hyperloop 7.0.5 is bundled with the SDK, too. &lt;br&gt;
In case you run into EACCES issues: run &lt;code&gt;chmod +x "~/Library/Application Support/Titanium/modules/iphone/hyperloop/7.0.5/hooks/node_modules/hyperloop-metabase/bin/metabase"&lt;/code&gt; &lt;/p&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;In the last couple of weeks we had two "merge session" with &lt;a href="https://github.com/cb1kenobi"&gt;@cb1kenobi&lt;/a&gt; and myself to review and merge some pull requests. Here are some of the new features that were merged into the master branch already:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13550"&gt;remove X-Requested-With header from HTTP requests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13774"&gt;secure Ti.Network.Socket for Android&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tidev/titanium-sdk/pull/13813"&gt;update android dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/titanium-sdk/pull/13824"&gt;rotationX and rotationY are now animatable on Andorid&lt;/a&gt; so you can create card flip animations easily (video in the PR)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/titanium-sdk/pull/12395"&gt;CameraX&lt;/a&gt; is finally included! It's off by default but if you want to test it you can use &lt;code&gt;useCameraX:true&lt;/code&gt; to switch it on. It offers many new features so make sure to check the PR for code and images. More info during the RC phase.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;Many modules received updates! So in case you use one of them make sure to update your apps.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-vision"&gt;iOS Vision / VisionKit in Titanium&lt;/a&gt; 2.1.0: update module environment to latest, add new API &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.admob"&gt;ti.admob&lt;/a&gt; (original) released iOS 6.1.0 and Android 5.1.0 with big help by &lt;a href="https://github.com/Astrovic"&gt;@Astrovic&lt;/a&gt;. All included modules are updated and &lt;a href="https://github.com/Astrovic/ti.admob/releases"&gt;his fork&lt;/a&gt; already updates iOS to 6.2.0 with support for "App Open Ad".&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Astrovic/TiDropboxAPIv2"&gt;Dropbox API&lt;/a&gt; 6.0.0 was released with OAuth2 code flow support and more methods&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://purgetss.com/"&gt;PurgeTSS&lt;/a&gt; 6.2.26 updates Tailwind, FontAwesome, Material Icons and Symbols.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-firebase-database"&gt;Firebase Database&lt;/a&gt; Android v1.0.0 is available! And already a PR to use &lt;a href="https://github.com/hansemannn/titanium-firebase-database/pull/9"&gt;Firestore Database&lt;/a&gt; on Android too.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/TiSocial.Framework/pull/1"&gt;TiSocial&lt;/a&gt; adds file support&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/ti.map/tree/add-poi-click"&gt;ti.map fork&lt;/a&gt; is a version that can use a normal native view instead of a fragment on Android. That will fix some issues when you use it in a ListView Header/Footer&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.map/releases/tag/v5.5.2-android"&gt;ti.map&lt;/a&gt; got a small update on Android that will remove the &lt;code&gt;toColor&lt;/code&gt; deprecation warnings&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/ti.storekit/releases/tag/v5.0.0"&gt;ti.storekit&lt;/a&gt; 5.0.0 was released with macOS and M1 support&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tidev/titanium-web-dialog/releases/tag/v2.3.0-android"&gt;ti.webdialog&lt;/a&gt; 2.3.0 for Android removes the &lt;code&gt;toColor&lt;/code&gt; warning too&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and finally not a module but &lt;a href="https://github.com/tidev/kitchensink-v2"&gt;Kitchensink v2&lt;/a&gt; received an update too. Some housekeeping and a new event example.&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>news</category>
      <category>javascript</category>
      <category>mobile</category>
    </item>
    <item>
      <title>Titanium News #15</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Mon, 03 Apr 2023 18:04:21 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-15-3am0</link>
      <guid>https://dev.to/miga/titanium-news-15-3am0</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;It's been a while since I've posted the last Titanium News. Was very busy with work, fixing bugs and adding features to Titanium SDK :-) So let's talk about Titanium SDK!&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12
&lt;/h1&gt;

&lt;p&gt;We have a new release candidate: 12.1.0.RC. Check the &lt;a href="https://www.tidev.io/blog/sdk_12_1_0_rc"&gt;tidev blog&lt;/a&gt; for a quick overview and how you can help testing the SDK.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's new
&lt;/h2&gt;

&lt;p&gt;First we have &lt;strong&gt;Node 19 support&lt;/strong&gt; now. It will still show you a warning to downgrade to Node 16 but I've tested building apps, modules and the SDK with Node 19 and had no issues. If you still have some apps with older SDKs make sure to stay at Node 16; Node 19 will only work with Ti 12.1.0+. If you start with Titanium SDK now you can install the latest Node version and you're fine!&lt;/p&gt;

&lt;p&gt;There have been a couple of &lt;strong&gt;improvements for macOS support&lt;/strong&gt;. It will enable the "optimize for Mac" flag and you can use &lt;code&gt;tooltip&lt;/code&gt; for views and buttons that are visible when you hover elements with your mouse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uCPdtSE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dh0trao719ncc1dx9tor.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uCPdtSE2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dh0trao719ncc1dx9tor.png" alt="optimize" width="880" height="139"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZmDI_ZUB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptaul1enc4wq03w5mizs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZmDI_ZUB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ptaul1enc4wq03w5mizs.png" alt="tooltip" width="538" height="286"&gt;&lt;/a&gt; &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ICHgrb5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hv5jxhzjj1os2hxatato.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ICHgrb5Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hv5jxhzjj1os2hxatato.png" alt="tooltip" width="460" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;BottomNavigation TabGroup tabbar can be shown/hidden&lt;/strong&gt; in iOS and Android now, even with animation. Check &lt;code&gt;tabBarVisible&lt;/code&gt; and the old Android&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tabGroup.disableTabNavigation({
  enabled: false,
  animated: true  // new
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kGEA7PQC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8g3i4b1u995zq5h9hx8d.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kGEA7PQC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8g3i4b1u995zq5h9hx8d.gif" alt="showhide" width="154" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A new property &lt;code&gt;Ti.UI.availableSystemFontFamilies&lt;/code&gt; was added to the SDK that will &lt;strong&gt;return available system fonts&lt;/strong&gt; as a string array.&lt;/p&gt;

&lt;p&gt;You can add &lt;strong&gt;images into the ListItem editAction&lt;/strong&gt; now.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--72Qd1Bvv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xrywsvczb3he9xzaz7u1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--72Qd1Bvv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xrywsvczb3he9xzaz7u1.png" alt="listview" width="880" height="166"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you use multiple notification channels in your Android app you can use &lt;code&gt;Ti.Android.NotificationManager.notificationChannels&lt;/code&gt; to return a &lt;strong&gt;list of notification channels&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Finally you are able to &lt;strong&gt;stop animations on Android&lt;/strong&gt; elements! &lt;code&gt;view.stopAnimation();&lt;/code&gt; will stop a Ti.UI.createAnimation().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Android 13+ granular media permissions&lt;/strong&gt; have been added to &lt;code&gt;requestPhotoGalleryPermissions&lt;/code&gt; and &lt;code&gt;hasPhotoGalleryPermissions&lt;/code&gt;. You can use them with these tiapp.xml permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;uses-permission&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.permission.READ_MEDIA_VIDEO"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;uses-permission&lt;/span&gt; &lt;span class="na"&gt;android:name=&lt;/span&gt;&lt;span class="s"&gt;"android.permission.READ_MEDIA_IMAGES"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The iOS &lt;code&gt;WebView.createPDF()&lt;/code&gt; method was ported to Android. This allows you to &lt;strong&gt;create PDF files from WebViews&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Androids floating action button&lt;/strong&gt; (FAB) was included into the SDK. You can use it with &lt;code&gt;Ti.UI.Android.createFloatingActionButton()&lt;/code&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9wFDDKFR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0m9mwuxfln6oe50ghjqa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9wFDDKFR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0m9mwuxfln6oe50ghjqa.jpg" alt="fab" width="292" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another new feature was added to the Android VideoPlayer. A property &lt;code&gt;autoHide&lt;/code&gt; will keep the videoplayer hidden until the video is loaded. Using this property will hide the "black background" when the video is not ready yet and it will show the background behind it. Check &lt;a href="https://github.com/tidev/titanium_mobile/pull/13725#issuecomment-1398608640"&gt;this comment&lt;/a&gt; for a video.&lt;/p&gt;

&lt;p&gt;In the last Titanium News post I was talking about the &lt;code&gt;CollapseToolbar&lt;/code&gt; layout. It is already included in Titanium 12.1.0.RC!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tE7_o4kN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sbnx82skdzz965b39ekq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tE7_o4kN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sbnx82skdzz965b39ekq.jpg" alt="collapse" width="540" height="375"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/tidev/titanium_mobile/pull/13711#issuecomment-1376394926"&gt;Click here for a video demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With the cross-platform &lt;code&gt;Ti.UI.statusBarHeight&lt;/code&gt; property you can read the height of the statusbar if you run a fullscreen application.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZVhNzB01--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfy2np3tvsk0eila8y7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZVhNzB01--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pfy2np3tvsk0eila8y7h.png" alt="fullscreen" width="347" height="173"&gt;&lt;/a&gt;&lt;br&gt;
On Android you can also get the cutout parts for the camera.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xrClxeNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fc0s5vllau04dgij3qc9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xrClxeNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fc0s5vllau04dgij3qc9.png" alt="cutout" width="480" height="306"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/tidev/titanium_mobile/pull/13733#issue-1560841981"&gt;Click here for code and a video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those who don't like to change colors with Android themes can now use &lt;code&gt;tintColor&lt;/code&gt; to &lt;strong&gt;change the back arrow color in your toolbar&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dlfaAT4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5s9yg9av0cf8hg8t74e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dlfaAT4n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x5s9yg9av0cf8hg8t74e.png" alt="tint" width="640" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those are just the new features! There are many bugfixes and other adjustments to the docs and other parts of Titanium SDK. A full list is inside the &lt;a href="https://titaniumsdk.com/guide/Titanium_SDK/Titanium_SDK_Release_Notes/Titanium_SDK_Release_Notes_12.x/Titanium_SDK_12.1.0.RC_Release_Note.html"&gt;release notes&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Test it
&lt;/h3&gt;

&lt;p&gt;Download the SDK and give it a test run. If everything runs fine and no major issues are found we will have a final release very soon.&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium Meetup
&lt;/h1&gt;

&lt;p&gt;We already had two virtual meetups already and it is great to see the Titanium community join and talk about apps, modules, requests/wishes and more! The third meetup is planed for the 6th of April and will feature a LiveView presentation. Check &lt;code&gt;#announcements&lt;/code&gt; at &lt;a href="https://slack.tidev.io/"&gt;TiSlack&lt;/a&gt; for more details on how you can join.&lt;/p&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;Java 19 support is on the roadmap and many PRs are waiting to be included. Help to test them &lt;a href="https://github.com/tidev/titanium_mobile/pulls"&gt;https://github.com/tidev/titanium_mobile/pulls&lt;/a&gt; so we have some feedback and can merge them quicker.&lt;/p&gt;

&lt;h1&gt;
  
  
  Community
&lt;/h1&gt;

&lt;p&gt;If you are a reddit user make sure to follow &lt;a href="https://www.reddit.com/r/TitaniumSDK/"&gt;https://www.reddit.com/r/TitaniumSDK/&lt;/a&gt; and &lt;a href="https://twitter.com/TiSDKUser"&gt;https://twitter.com/TiSDKUser&lt;/a&gt; for byte-sized Titanium SDK coding tips on Twitter!&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;This time I don't have a list of modules. There have been some updates all over the board (e.g. the Firebase modules) but more next time!&lt;/p&gt;

&lt;h1&gt;
  
  
  Tutorials
&lt;/h1&gt;

&lt;p&gt;Two new tutorials are added on &lt;code&gt;from zero to app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://fromzerotoapp.com/build-an-android-app-that-connects-to-a-mqtt-device/"&gt;Build an Android app that connects to a MQTT device&lt;/a&gt; and &lt;a href="https://fromzerotoapp.com/building-a-photo-overlay-app/"&gt;Building a photo overlay app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are new to Titanium SDK make sure to checkout the tutorials at &lt;a href="https://fromzerotoapp.com/"&gt;From zero to app&lt;/a&gt; and get started with Titanium to create mobile apps for iOS and Android.&lt;/p&gt;

&lt;h1&gt;
  
  
  That's it
&lt;/h1&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
      <category>titaniumsdk</category>
      <category>javascript</category>
      <category>mobile</category>
      <category>news</category>
    </item>
    <item>
      <title>Real cookie banner tutorial - WordPress cookie banner</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sat, 28 Jan 2023 15:55:13 +0000</pubDate>
      <link>https://dev.to/miga/real-cookie-banner-tutorial-wordpress-cookie-banner-5hdg</link>
      <guid>https://dev.to/miga/real-cookie-banner-tutorial-wordpress-cookie-banner-5hdg</guid>
      <description>&lt;p&gt;Today width GDRP/DSGVO it is very important that your web page doesn't do any external request like showing a YouTube video or adding analytic scripts without the consents of the user!&lt;/p&gt;

&lt;p&gt;In this small tutorial I show you how to use the WordPress Plugin &lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt; to add a simple cookie banner and block external content.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The plug-in is free for normal usage but if you buy it make sure to use the code &lt;code&gt;MIGAWEB&lt;/code&gt; for 20% in the first year! Go to &lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt; and use the code &lt;code&gt;MIGAWEB&lt;/code&gt; in the checkout page. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Topics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install&lt;/li&gt;
&lt;li&gt;Enable the plugin&lt;/li&gt;
&lt;li&gt;Block external content&lt;/li&gt;
&lt;li&gt;Final words&lt;/li&gt;
&lt;li&gt;&lt;a href="https://devowl.io/lAWmsqLD/"&gt;Get the plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;The first step is to install the plugin in your WordPress page. Go to "Plugins - Add new" and search for "&lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt;". Install this plugin and activate it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--boq11uX4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/08sbxfk8judcv0jbv1po.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--boq11uX4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/08sbxfk8judcv0jbv1po.png" alt="install" width="591" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you activate it you have a new menu entry called "Cookies" in you WordPress menu and it will show you the "First start" page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ej7YVEmm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kza9dkkpduhg1r0z914v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ej7YVEmm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kza9dkkpduhg1r0z914v.png" alt="first_start" width="880" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on "Start configuration" and in the next popup we simply use the "Continue without any support..." link below the button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J2RIEa-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6li5chhe5k464u6n0lu3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J2RIEa-0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6li5chhe5k464u6n0lu3.png" alt="activate" width="824" height="794"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to keep updates for the plugin you'll click the blue button with the first item selected.&lt;/p&gt;

&lt;p&gt;After that you will see the main menu of the plugin:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cTgaqn0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xyf524l5gl9t661yryok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cTgaqn0T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xyf524l5gl9t661yryok.png" alt="main_menu" width="880" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable the plugin
&lt;/h2&gt;

&lt;p&gt;If you go and open the front-end of your page you won't see any cookie banner yet. We need to active it first. &lt;br&gt;
In your back-end go to "Cookie" and select the "Settings" tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0apQoJWE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycgdm4ythay4ibh8dasu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0apQoJWE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycgdm4ythay4ibh8dasu.png" alt="settings1" width="880" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you have to switch on the "Cookie Banner/Dialog" and press "save settings" at the bottom.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--khKU3XYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5g7vdalxa520067z9t4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--khKU3XYf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f5g7vdalxa520067z9t4.png" alt="settings2" width="880" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now when you go to your front-end it will show you the cookie banner:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3TZ6WnHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5u3xl2xzmwq0dpwnmle.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3TZ6WnHF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n5u3xl2xzmwq0dpwnmle.png" alt="banner" width="642" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Block external content
&lt;/h2&gt;

&lt;p&gt;At this point we can add some functionality to cookie banner. For this tutorial we add a YouTube blocker that won't make an external connection unless the user accepts the cookie banner or clicks on the button that is presented instead of the video.&lt;/p&gt;

&lt;p&gt;Create a page with a simple YouTube video:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uoH7n9p7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ucr7t7vwif7hm88hxol1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uoH7n9p7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ucr7t7vwif7hm88hxol1.png" alt="yt" width="880" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It will show the player and if you look at the DevTools - Network tab you will see many external connections to YouTube.&lt;/p&gt;

&lt;p&gt;To block those you go to the "Cookies - Content Blocker" tab and press the "Add content blocker" button:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T1LKlezC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7vt15gs3o7kaq14y7twg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T1LKlezC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7vt15gs3o7kaq14y7twg.png" alt="content_blocker" width="880" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt; will present you a whole list of templates you can chose from:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AME1lB-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/go0hdv10tvak3vagciv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AME1lB-G--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/go0hdv10tvak3vagciv8.png" alt="templates" width="880" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One advantage of the &lt;a href="https://devowl.io/lAWmsqLD/"&gt;pro version&lt;/a&gt; is that you can select all of them which saves you a lot of time creating each of the from scratch!&lt;br&gt;
The YouTube content blocker is available in the free version! So search for "youtube" and click on the icon:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dhewAopI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7vdk3gcok6d7i2z2758.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dhewAopI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n7vdk3gcok6d7i2z2758.png" alt="yt" width="540" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that it will show you the blocker configuration:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fk_oUHVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqomr0rrenmk8meo1agb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fk_oUHVh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqomr0rrenmk8meo1agb.png" alt="yt2" width="880" height="595"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UI configuration&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tamzc9qj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jw2ga1cbikta8hbr7sna.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tamzc9qj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jw2ga1cbikta8hbr7sna.png" alt="yt3" width="880" height="669"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the "Description field" you can add a text that will be visible in the box when the video is blocked. Use this text to inform the user why he/she wants to click and allow the content.&lt;/p&gt;

&lt;p&gt;On setting we will need to add is the "Connected services" section in this screen. Scroll to:&lt;/p&gt;

&lt;p&gt;![yt4]&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twg3elaym5on9nw4j09r.png"&gt;https://dev-to-uploads.s3.amazonaws.com/uploads/articles/twg3elaym5on9nw4j09r.png&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;and again: click the preset "YouTube - Create now".&lt;br&gt;
This will show you another configuration popup with prefilled data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MBzH6DxO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qodgpuld2xm0o339lvbg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MBzH6DxO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qodgpuld2xm0o339lvbg.png" alt="function" width="880" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those items will be visible later in the "individual settings" of the cookie banner and here you can set the "group" under which the cookie will be visible (e.g. functional cookies, marketing cookies, analytic cookies,...). Keep everything as it is and save it.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;That's it!&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uoH6mv-f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7uqg4geapw3aocisayak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uoH6mv-f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7uqg4geapw3aocisayak.png" alt="done" width="880" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now when you visit your test page you can see that the video is blocked behind the cookie banner&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nrur02Fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/snebllwum8mqgr11pvgb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nrur02Fd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/snebllwum8mqgr11pvgb.png" alt="blocked" width="880" height="543"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you dismiss that you can see the blocker box instead of the player:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZRqCyQUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d3wtras1xozcilhtacl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZRqCyQUK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4d3wtras1xozcilhtacl.png" alt="blocker" width="880" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and no external request is made before you active that!&lt;/p&gt;

&lt;p&gt;If you look at the "individual settings" in the cookie banner you will find the "Functional - YouTube" entry:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bHLCDEEv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ug7844mz7az41bqdpvh0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bHLCDEEv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ug7844mz7az41bqdpvh0.png" alt="individual settings" width="880" height="817"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final words
&lt;/h2&gt;

&lt;p&gt;As you can see it is very quick and easy to block external content. You can do the same for other external elements you add into your page like Calendy, Facebook posts, Google maps or more. To use those templates you have to buy the pro version. Go to &lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt; and use the code &lt;code&gt;MIGAWEB&lt;/code&gt; in the checkout page for a 20% discount in the first year. &lt;br&gt;
If you want to use the free version you can still block those items but you have to click "create from scratch" button&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I6yWdX5y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brxd30bpn3t3bx670mmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I6yWdX5y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/brxd30bpn3t3bx670mmc.png" alt="scratch" width="431" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and fill out the form yourself.&lt;/p&gt;

&lt;p&gt;Make sure to follow for more tutorials on &lt;a href="https://devowl.io/lAWmsqLD/"&gt;Real Cookie Banner&lt;/a&gt;, WordPress, Elementor or app development with Titanium SDK.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>tutorial</category>
      <category>webdev</category>
      <category>gdpr</category>
    </item>
    <item>
      <title>Titanium News #14</title>
      <dc:creator>Michael Gangolf</dc:creator>
      <pubDate>Sun, 22 Jan 2023 15:31:54 +0000</pubDate>
      <link>https://dev.to/miga/titanium-news-14-bdp</link>
      <guid>https://dev.to/miga/titanium-news-14-bdp</guid>
      <description>&lt;p&gt;&lt;small&gt;Older posts can be found &lt;a href="https://dev.to/miga"&gt;here&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Intro
&lt;/h1&gt;

&lt;p&gt;State of JS results are in, Titanium 12 was released, new features are coming every day, a ton of new plugins and a very interesting new UI project in the making!&lt;/p&gt;

&lt;h1&gt;
  
  
  Titanium 12
&lt;/h1&gt;

&lt;p&gt;In the last Titanium News the release candidate of Titanium 12 was available. After a short testing phase and fixing the last bugs the final version &lt;code&gt;Titanium 12.0.0.GA&lt;/code&gt; was released. Check my &lt;a href="https://dev.to/miga/mobile-app-framework-titanium-sdk-12-available-4kik"&gt;Mobile app framework Titanium SDK 12 available&lt;/a&gt; article for more information, screenshots and features. It is the second major release after Titanium SDK became open source and we are still adding new features, fixing bugs and keeping everything up-to-date! &lt;/p&gt;

&lt;h1&gt;
  
  
  State of JS
&lt;/h1&gt;

&lt;p&gt;This years &lt;code&gt;State of JS&lt;/code&gt; results are in and I'm happy to see Titanium being mentioned in the "other tools" section of the "Mobile &amp;amp; Dekstop" section:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4jxbi7gx6shvwqvd9ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr4jxbi7gx6shvwqvd9ep.png" alt="stateofjs" width="800" height="354"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://2022.stateofjs.com/en-US/libraries/mobile-desktop/#mobile_desktop_others" rel="noopener noreferrer"&gt;source&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can check all of the results on the &lt;a href="https://2022.stateofjs.com/en-US/libraries/mobile-desktop/#mobile_desktop_others" rel="noopener noreferrer"&gt;stateofjs page&lt;/a&gt;. While it's not in the main list it is still a big win to be visible again! Next year we'll produce a higher number 😄&lt;/p&gt;

&lt;h1&gt;
  
  
  Preview
&lt;/h1&gt;

&lt;p&gt;Me and some other people were very busy adding some new pull request to the Titanium SDK repo! &lt;/p&gt;

&lt;h4&gt;
  
  
  Collapsing toolbar layout
&lt;/h4&gt;

&lt;p&gt;A new layout for Android was added in &lt;a href="https://github.com/tidev/titanium_mobile/pull/13711" rel="noopener noreferrer"&gt;PR&lt;/a&gt; that adds a collapsing toolbar with a parallax image effect. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsjsgsrsn9kpukc06921.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffsjsgsrsn9kpukc06921.png" alt="demo" width="540" height="375"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/tidev/titanium_mobile/pull/13711#issuecomment-1376394926" rel="noopener noreferrer"&gt;Click here for a video demo&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  New attributedString attribute
&lt;/h4&gt;

&lt;p&gt;If you ever wanted to add a tag cloud in a ListView you'll had to find some workarounds (or use a TableView). With this new attributedString attribute &lt;a href="https://github.com/tidev/titanium_mobile/pull/13709" rel="noopener noreferrer"&gt;roundedBackgroundColor&lt;/a&gt; you can do that now in a ListView:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewxjwfzlwbpl0o9njya1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewxjwfzlwbpl0o9njya1.png" alt="as" width="400" height="188"&gt;&lt;/a&gt;&lt;br&gt;
Simply add a text and assign the attributedString to some parts of it to add a rounded backgroundColor element.&lt;/p&gt;

&lt;h4&gt;
  
  
  Label break/hyphenation properties.
&lt;/h4&gt;

&lt;p&gt;Sometimes a long text inside a label can produce strange results when it breaks automatically on Android. I've exposed the native Android &lt;a href="https://github.com/tidev/titanium_mobile/pull/13706" rel="noopener noreferrer"&gt;breakStrategy and hyphenationFrequency&lt;/a&gt; constants to Titanium so you can change them as needed.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw1qt6dt64m87ckukv63.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flw1qt6dt64m87ckukv63.png" alt="break" width="124" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Fixed elements in filtered TableViews/ListViews
&lt;/h4&gt;

&lt;p&gt;When you filter a TableView or ListView and want to show some rows all the time (e.g. some help row or info box) you had to add custom search values with all possibilities. Now you can use &lt;a href="https://github.com/tidev/titanium_mobile/pull/13684" rel="noopener noreferrer"&gt;filterAlwaysInclude&lt;/a&gt; to pin those rows. &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h65wqk6x52cb26mk3f2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7h65wqk6x52cb26mk3f2.png" alt="filter" width="611" height="615"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  VideoPlayer features
&lt;/h4&gt;

&lt;p&gt;Two new features are added to the Android Video player: an &lt;a href="https://github.com/tidev/titanium_mobile/pull/13725" rel="noopener noreferrer"&gt;autoHide&lt;/a&gt; property and a &lt;a href="https://github.com/tidev/titanium_mobile/pull/13727" rel="noopener noreferrer"&gt;buffer&lt;/a&gt; event. The first one will hide the video until it is loaded so you won't see a black background. The second part will give you feedback how much of the video is buffered. &lt;/p&gt;

&lt;h4&gt;
  
  
  Android keyboardChanged event
&lt;/h4&gt;

&lt;p&gt;For Android 11+ you can use the new &lt;a href="https://github.com/tidev/titanium_mobile/pull/13726" rel="noopener noreferrer"&gt;keyboardChanged event&lt;/a&gt; to see if the keyboard is visible or not.&lt;/p&gt;

&lt;h4&gt;
  
  
  Images in ListItem editActions (iOS)
&lt;/h4&gt;

&lt;p&gt;A new user contribution added the option to add &lt;a href="https://github.com/tidev/titanium_mobile/pull/13719" rel="noopener noreferrer"&gt;images as editActions&lt;/a&gt; in iOS ListItems&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5fiqk2frmjfetzecac7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5fiqk2frmjfetzecac7.png" alt="listitem" width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Other PRs
&lt;/h4&gt;

&lt;p&gt;There are some other PRs that e.g. add Node 19 support, add a rotation value to Androids Ti.Blob or fixes documentation or smaller bugs. Always have a look at the &lt;a href="https://github.com/tidev/titanium_mobile/pull" rel="noopener noreferrer"&gt;PR section&lt;/a&gt; to see all items.&lt;/p&gt;

&lt;h1&gt;
  
  
  Modules
&lt;/h1&gt;

&lt;p&gt;Many new modules released in the past weeks ❤️&lt;br&gt;
&lt;a href="https://github.com/hansemannn/" rel="noopener noreferrer"&gt;hansemannn&lt;/a&gt; did a bunch of new modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-giphy" rel="noopener noreferrer"&gt;Giphy in Titanium&lt;/a&gt;: Use the native Giphy iOS- and Android SDK's to select GIFs and display them in your app.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-mixpanel" rel="noopener noreferrer"&gt;Titanium Mixpanel&lt;/a&gt;: Use the native Mixpanel Analytics SDK for iOS &amp;amp; Android in Titanium!&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/hansemannn/titanium-sentry" rel="noopener noreferrer"&gt;Sentry for Titanium SDK&lt;/a&gt;: Use the native Sentry SDKs (iOS &amp;amp; Android) in the Titanium SDK.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And also updated &lt;a href="https://github.com/tidev/ti.worker/" rel="noopener noreferrer"&gt;Ti.Worker&lt;/a&gt; to a new version.&lt;/p&gt;

&lt;p&gt;A new Android version &lt;a href="https://github.com/m1ga/ti.animation" rel="noopener noreferrer"&gt;Ti.Animation&lt;/a&gt; - the Lottie animation framework for Titanium - was release with support for &lt;a href="https://rive.app/" rel="noopener noreferrer"&gt;Rive animations&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/maccesar"&gt;@maccesar&lt;/a&gt; updated his &lt;a href="http://purgetss.com/" rel="noopener noreferrer"&gt;PurgeTss&lt;/a&gt; library. It adds more than 19.000 Tailwind-like utility classes to your project and many more features. Be sure to check it out.&lt;/p&gt;

&lt;h1&gt;
  
  
  UI builder
&lt;/h1&gt;

&lt;p&gt;Speaking of &lt;a class="mentioned-user" href="https://dev.to/maccesar"&gt;@maccesar&lt;/a&gt;: he started an UI builder for Titanium that helps you building UI prototypes right on your mobile device:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzliz74milhh55uf6d8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuzliz74milhh55uf6d8b.png" alt="builder" width="800" height="623"&gt;&lt;/a&gt;&lt;br&gt;
It's an early screenshot but it looks fantastic already and I'm very keen to see how far he can build it. Be sure to &lt;a href="https://twitter.com/purgetss/status/1616473529288990725" rel="noopener noreferrer"&gt;check his tweet&lt;/a&gt; with a video of the project and give him a follow!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorials
&lt;/h2&gt;

&lt;p&gt;If you are new to Titanium SDK make sure to checkout the tutorials at &lt;a href="https://fromzerotoapp.com/" rel="noopener noreferrer"&gt;From zero to app&lt;/a&gt; and get started with Titanium to create mobile apps for iOS and Android.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's it
&lt;/h2&gt;

&lt;p&gt;If you have feedback or some interesting Titanium SDK apps, modules or widgets you would like to share: get in contact with me or leave a comment and I'll add it to the next &lt;code&gt;Titanium news&lt;/code&gt;. &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
