<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Kamal on Medium]]></title>
        <description><![CDATA[Stories by Kamal on Medium]]></description>
        <link>https://medium.com/@kamalelango15?source=rss-df4a0cb4a5df------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*62wyAVXtGpBsVKyTzB94aA.jpeg</url>
            <title>Stories by Kamal on Medium</title>
            <link>https://medium.com/@kamalelango15?source=rss-df4a0cb4a5df------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 20 May 2026 19:34:33 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@kamalelango15/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Deep Dive into the iOS File System.]]></title>
            <link>https://medium.com/@kamalelango15/deep-dive-into-the-ios-file-system-4506a64fb21a?source=rss-df4a0cb4a5df------2</link>
            <guid isPermaLink="false">https://medium.com/p/4506a64fb21a</guid>
            <category><![CDATA[fintech]]></category>
            <category><![CDATA[ios-architecture]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[security]]></category>
            <dc:creator><![CDATA[Kamal]]></dc:creator>
            <pubDate>Wed, 19 Nov 2025 18:11:37 GMT</pubDate>
            <atom:updated>2025-11-19T18:11:37.153Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/641/1*yMi2t91DBz3GxkdfFT-7Mg.png" /></figure><p>𝐃𝐞𝐞𝐩 𝐃𝐢𝐯𝐞 𝐢𝐧𝐭𝐨 𝐭𝐡𝐞 𝐢𝐎𝐒 𝐅𝐢𝐥𝐞 𝐒𝐲𝐬𝐭𝐞𝐦</p><p>Every iOS app runs inside its own sandbox — a secure, isolated environment that protects user data and system integrity.</p><p>The sandbox consists of three main containers:</p><p>𝐁𝐮𝐧𝐝𝐥𝐞 𝐜𝐨𝐧𝐭𝐚𝐢𝐧𝐞𝐫 → Your app’s executable and resources (read-only)</p><p>𝐃𝐚𝐭𝐚 𝐜𝐨𝐧𝐭𝐚𝐢𝐧𝐞𝐫 → Writable space for app data</p><p>𝐢𝐂𝐥𝐨𝐮𝐝 𝐜𝐨𝐧𝐭𝐚𝐢𝐧𝐞𝐫 → Optional cloud-backed storage</p><p>Today, let’s focus on the 𝐃𝐚𝐭𝐚 𝐜𝐨𝐧𝐭𝐚𝐢𝐧𝐞𝐫 and its subdirectories:</p><p>Data container contains following the sub directory:</p><p>𝐃𝐨𝐜𝐮𝐦𝐞𝐧𝐭𝐬:</p><p>Use this directory to store user generate content.</p><p>Content in this directory used for file sharing.</p><p>Content in this directory backed up by iCloud.</p><p>Recommended files the user creates or expects to manage (e.g., exported PDFs, saved images).</p><pre>let docsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!<br>let fileURL = docsURL.appendingPathComponent(&quot;report.pdf&quot;)<br><br>// Save file without encryption<br>try &quot;User Report&quot;.write(to: fileURL, atomically: true, encoding: .utf8)</pre><p>𝐋𝐢𝐛𝐫𝐚𝐫𝐲/𝐀𝐩𝐩𝐥𝐢𝐜𝐚𝐭𝐢𝐨𝐧 𝐒𝐮𝐩𝐩𝐨𝐫𝐭:</p><p>Use for internal managed app data like database, config, secure file .</p><p>Recommended to use Internal app-managed data (databases, configs, secure files).</p><p>Content in this directory are backed up Yes (unless excluded).</p><pre>Use for internal managed app data like database, config, secure file .<br>        Recommended to use Internal app-managed data (databases, configs, secure files).<br>        Content in this directory are backed up Yes (unless excluded).</pre><p>𝐋𝐢𝐛𝐫𝐚𝐫𝐲/𝐂𝐚𝐜𝐡𝐞𝐬:</p><p>Use to store cached images, API responses, etc.</p><p>When the device runs low on storage, iOS will automatically delete files in these directories.</p><p>Content in this directory are backed up No.</p><pre>let cachesURL = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask).first!<br>let cacheFile = cachesURL.appendingPathComponent(&quot;imageCache.png&quot;)<br><br>try Data().write(to: cacheFile) // safe to lose, can be recreated</pre><p>𝐭𝐦𝐩 𝐃𝐢𝐫𝐞𝐜𝐭𝐨𝐫𝐲:</p><p>Used for temporary files (downloads in progress, intermediate processing).</p><p>Use for temporary file generation</p><p>When the device runs low on storage, iOS will automatically delete files in these directories.</p><p>Content will get deleted when app get closed.</p><pre>let tmpPath = NSTemporaryDirectory()<br>let tmpFile = URL(fileURLWithPath: tmpPath).appendingPathComponent(&quot;temp.txt&quot;)<br><br>try &quot;Temporary data&quot;.write(to: tmpFile, atomically: true, encoding: .utf8)</pre><p>𝐒𝐞𝐜𝐮𝐫𝐢𝐭𝐲 𝐏𝐫𝐚𝐜𝐭𝐢𝐜𝐞</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*g4fnibN-VgSgIlOYQowRIw.png" /></figure><p>For sensitive data, always use File Protection Classes (Data Protection API) to enforce filesystem-level encryption.</p><p>Applied at the filesystem level to encrypt data on disk:</p><ul><li><strong>NSFileProtectionComplete</strong> → Accessible only when device is unlocked.</li><li><strong>NSFileProtectionCompleteUnlessOpen</strong> → Accessible if opened while unlocked.</li><li><strong>NSFileProtectionCompleteUntilFirstUserAuthentication</strong> → Accessible after first unlock post-boot.</li><li><strong>NSFileProtectionNone</strong> → No protection (avoid for sensitive data).</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4506a64fb21a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Protecting Sensitive Data on iOS using Data Protection API]]></title>
            <link>https://medium.com/@kamalelango15/protecting-sensitive-data-on-ios-6c2b55b95c53?source=rss-df4a0cb4a5df------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c2b55b95c53</guid>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[keychain]]></category>
            <category><![CDATA[ios-security]]></category>
            <dc:creator><![CDATA[Kamal]]></dc:creator>
            <pubDate>Sat, 15 Nov 2025 11:21:56 GMT</pubDate>
            <atom:updated>2025-11-15T11:22:34.635Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>Protecting Sensitive Data on iOS: Keychain vs Data Protection API</strong></p><p>When it comes to safeguarding sensitive data on iOS devices, two powerful options stand out: <strong>Keychain Services</strong> and the <strong>Data Protection API</strong>.</p><p>While Keychain often gets the spotlight in developer forums, today let’s focus on the <strong>Data Protection API</strong> — a mechanism that encrypts user data directly on disk using <strong>AES‑256 encryption tied to the device passcode</strong>.</p><p><strong>Why Data Protection API?</strong></p><ul><li>Ideal for <strong>large files</strong> such as images, documents, or cached API responses</li><li>Provides <strong>transparent encryption/decryption</strong> at the file system level</li><li>Security is automatically strengthened when the user sets a passcode, Touch ID, or Face ID</li></ul><p><strong>Keychain vs Data Protection API</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*teOF7yd-SZrLkdZwbYNxBg.png" /></figure><p><strong>Takeaway</strong></p><ul><li><strong>Keychain</strong> → Perfect for credentials and small secrets</li><li><strong>Data Protection API</strong> → Essential for securing larger assets and cached data</li></ul><p>Both are complementary — not competing. A robust iOS app should leverage <strong>Keychain for sensitive keys</strong> and <strong>Data Protection API for user data at scale</strong>.</p><p>Developers in banking, healthcare, and enterprise apps should consider combining both for <strong>defense-in-depth security</strong>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c2b55b95c53" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Fetch Mobile Contact in MAUI for both iPhone and Android]]></title>
            <link>https://medium.com/@kamalelango15/fetch-mobile-contact-in-maui-for-both-iphone-and-android-eefc296985c0?source=rss-df4a0cb4a5df------2</link>
            <guid isPermaLink="false">https://medium.com/p/eefc296985c0</guid>
            <category><![CDATA[android]]></category>
            <category><![CDATA[cross-platform]]></category>
            <category><![CDATA[xamarin]]></category>
            <category><![CDATA[maui]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <dc:creator><![CDATA[Kamal]]></dc:creator>
            <pubDate>Sun, 15 Jun 2025 13:13:11 GMT</pubDate>
            <atom:updated>2025-12-19T18:25:23.159Z</atom:updated>
            <content:encoded><![CDATA[<p><strong>What is MAUI?</strong>.</p><p>It is a cross platforms tool to create a native user interface. Where we can share the UI among various platforms like iOS, Android, UWP apps(Windows phone &amp; windows desktop app) and Shared codebase across all platforms.</p><h4>Fetch mobile contact</h4><p>Many of us think while we go for cross platforms by using common code, we can access all platform (ios, android, window) mobile contact but in the real world is not possible. We have to implement Platform Specific feature <strong>in maui </strong>to access native platform-based API like get contact detail.</p><p>I have already created a <strong>Nugget Package</strong> to get contact detail from ios &amp; android phone. And Package has predefined List UI to show contact detail. Predefined UI support both iPhone &amp; iPad and Android Phone &amp; Tablet. Support both portrait and landscape. Let see how to implement.</p><p><strong>PhoneContact.MAUI.KK</strong> is a cross-platform NuGet package built with <strong>.NET MAUI</strong> that enables developers to <strong>fetch and display mobile contacts</strong> on both <strong>Android</strong> and <strong>iOS</strong> devices. It includes a <strong>predefined contact list UI</strong> that supports phones and tablets in both <strong>portrait and landscape</strong> modes.</p><h3>Features</h3><ul><li>Fetch contacts from Android and iOS devices</li><li>Prebuilt UI for displaying contact list</li><li>Multi-selection support</li><li>Portrait and landscape layout compatibility</li><li>Works on phones and tablets</li><li>Easy integration with MAUI projects</li></ul><h3>📦 NuGet Package</h3><ul><li><strong>Package Name</strong>: PhoneContact.MAUI.KK</li><li><strong>NuGet URL</strong>: PhoneContact.MAUI.KK on NuGet</li></ul><p><a href="https://www.nuget.org/packages/PhoneContact.MAUI.KK/">https://www.nuget.org/packages/PhoneContact.MAUI.KK/</a></p><p><strong>Step 1: </strong>Create a new MAUI project</p><p><strong>Step 2: </strong>Add the NuGet package inside the project</p><p>Package Name =&gt; <a href="https://www.nuget.org/packages/PhoneContact.MAUI.KK/">PhoneContact.MAUI.KK</a></p><p><strong>Step 3: </strong>Go to info.Plist file and Add the <strong>Privacy — Contacts Usage Description</strong></p><p><strong>Step 5: </strong>Go to AndroidMainfest.Xml Enable Read contact Permission.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W0haONlusxZ_luQGLefFuQ.png" /></figure><p><strong>Step 6:</strong> Add the bleow given code in the MAUIProgram.cs. Add the SetKKContactControl()</p><pre>using MauiPhoneContactLibrary.Helper;<br>using MauiPhoneContactLibrary.Interface;<br>using MauiPhoneContactLibrary.Model;<br>using MauiPhoneContactLibrary.View;<br>using MauiPhoneContactLibrary.ViewModel;<br>using System.Threading.Tasks;<br><br>namespace MauiPhoneContactLibraryTestPjt;;<br><br>public static class MauiProgram<br>{<br> public static MauiApp CreateMauiApp()<br> {<br>  var builder = MauiApp.CreateBuilder();<br>  builder<br>   .UseMauiApp&lt;App&gt;()<br>   //SetKKContactControl is extension method to register all services of MauiPhoneContactLibrary<br>   //you must call this method to use maui phone contact library<br>   .SetKKContactControl()<br>   .ConfigureFonts(fonts =&gt;<br>   {<br>    fonts.AddFont(&quot;OpenSans-Regular.ttf&quot;, &quot;OpenSansRegular&quot;);<br>    fonts.AddFont(&quot;OpenSans-Semibold.ttf&quot;, &quot;OpenSansSemibold&quot;);<br>   });<br>  //builder.Services.AddTransient&lt;IContact, ContactList&gt;();<br>  builder.Services.AddSingleton&lt;AppShell&gt;();<br><br>#if DEBUG<br>  builder.Logging.AddDebug();<br>#endif<br><br>  return builder.Build();<br> }<br>}</pre><p><strong>Step 7: Sample code to integrated the ungrouped contact collecitonview in content page.</strong></p><p>Below given example adding KKSingleContactView via code you directly use this xaml page as well</p><pre>using MauiPhoneContactLibrary.Helper;<br>using MauiPhoneContactLibrary.Interface;<br>using MauiPhoneContactLibrary.Model;<br>using MauiPhoneContactLibrary.View;<br>using MauiPhoneContactLibrary.ViewModel;<br>using System.Threading.Tasks;<br><br>public partial class TestContactPage : ContentPage<br>{<br>    //KKSingleContactViewModel is Ungrouped listview model<br>    KKSingleContactViewModel singleContactViewModel;<br><br>    //IKKContactPermissionRequest use this interface to request contact permission<br>    //if you can implement default permission request of the maui use.<br>    private IKKContactPermissionRequest _kKContactPermissionRequest;<br><br>    public TestContactPage(KKSingleContactViewModel viewModel, IKKContactPermissionRequest kKContactPermissionRequest)<br>    {<br>        InitializeComponent();<br>        //set BindingContext<br>        BindingContext = viewModel;<br>        //keep reference of viewmodel<br>        singleContactViewModel = viewModel;<br>        //keep reference of contact permission request interface<br>        _kKContactPermissionRequest = kKContactPermissionRequest;<br>        //create KKSingleContactView view with ungrouped listview<br>        var _contactView = new KKSingleContactView(viewModel);<br>        //subscribe to get selected contact event when single selectiom mode is enabled<br>        viewModel.getSingleSelectedContact += OnGetSelectedContactItem;<br>        //Use this method to get selected contacts from viewmodel whe multiple selection mode is enabled<br>        viewModel.GetSelectedContacts();<br>        //page we need to add contact view<br>        contacgrid.Children.Add(_contactView);<br>    }<br>    protected override async void OnAppearing()<br>    {<br>        base.OnAppearing();<br>        var permissionStatus = await KKMauiServiceProvider.GetService&lt;IKKContactPermissionRequest&gt;().GetContactAuthorizationStatus();<br>        if(permissionStatus)<br>        {<br>              await singleContactViewModel.LoadContactsAsync();<br>        }<br>    }<br>    protected override void OnDisappearing()<br>    {<br>        base.OnDisappearing();<br>        //unsubscribe event<br>        singleContactViewModel.getSingleSelectedContact -= OnGetSelectedContactItem;<br>        //reset viewmodel<br>        singleContactViewModel.RestViewModel();<br>        //clear reference<br>        singleContactViewModel = null;<br>        //clear bindingcontext<br>        BindingContext = null;<br>        //clear permission request reference<br>        _kKContactPermissionRequest = null;<br>    }<br>    public void OnGetSelectedContactItem(ContactItem contactItem)<br>    {<br>        // Handle the selected contact item for ungrouped listview<br>    }<br>}</pre><p><strong>Step 8: Sample code to integrated the Groupted contact collecitonview in content page.</strong></p><pre>public partial class TestContactPage : ContentPage<br>{<br>    //KKGroupContactViewModel is Grouped listview model<br>    KKGroupContactViewModel groupContactViewModel;<br><br>    //IKKContactPermissionRequest use this interface to request contact permission<br>    //if you can implement default permission request of the maui use.<br>    private IKKContactPermissionRequest _kKContactPermissionRequest;<br><br>    public TestContactPage(KKGroupContactViewModel viewModel, IKKContactPermissionRequest kKContactPermissionRequest)<br>    {<br>        InitializeComponent();<br>        //set BindingContext<br>        BindingContext = viewModel;<br>        //keep reference of viewmodel<br>        groupContactViewModel = viewModel;<br>        //keep reference of contact permission request interface<br>        _kKContactPermissionRequest = kKContactPermissionRequest;<br>        //create KKSingleContactView view with ungrouped listview<br>        var _contactView = new KKGroupContactView(viewModel);<br>        //subscribe to get selected contact event when single selectiom mode is enabled<br>        viewModel.getSingleSelectedContact += OnGetSelectedContactItem;<br>        //Use this method to get selected contacts from viewmodel whe multiple selection mode is enabled<br>        viewModel.GetSelectedContacts();<br>        //page we need to add contact view<br>        contacgrid.Children.Add(_contactView);<br>    }<br>    protected override async void OnAppearing()<br>    {<br>        base.OnAppearing();<br>        var permissionStatus = await _kKContactPermissionRequest.GetContactAuthorizationStatus();<br>        if (permissionStatus)<br>        {<br>            await groupContactViewModel.LoadGroupContactsAsync();<br>        }<br>    }<br>    protected override void OnDisappearing()<br>    {<br>        base.OnDisappearing();<br>        //unsubscribe event<br>        groupContactViewModel.getSingleSelectedContact -= OnGetSelectedContactItem;<br>        //reset viewmodel<br>        groupContactViewModel.RestViewModel();<br>        //clear reference<br>        groupContactViewModel = null;<br>        //clear bindingcontext<br>        BindingContext = null;<br>        //clear permission request reference<br>        _kKContactPermissionRequest = null;<br>    }<br>    public void OnGetSelectedContactItem(ContactItem contactItem)<br>    {<br>        // Handle the selected contact item for ungrouped listview<br>    }<br>}</pre><p><strong>Step 8: Customize the Collection by using the ContactConfig class. Check the below given property. Load this before opening the contact control</strong></p><pre>using System;<br><br>namespace MauiPhoneContactLibrary.Helper<br>{<br>    public static class kkContactControl<br>    {<br><br><br>        public static bool EnableSearchBar = true;<br>        /// &lt;summary&gt;<br>        /// Get Birthday detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool ShowBithday = false;<br>        /// &lt;summary&gt;<br>        /// Get Email detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool ShowEmail = false;<br>        /// &lt;summary&gt;<br>        /// Get Address detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool ShowAddress = false;<br>        /// &lt;summary&gt;<br>        /// Get Company detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool ShowCompany = false;<br>        /// &lt;summary&gt;<br>        /// Get Url detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool ShowUrl = false;<br>        /// &lt;summary&gt;<br>        /// Get Date like birhtday detail while select the contact.<br>        /// &lt;/summary&gt;<br>        public static bool GetDate = false;<br><br><br>    }<br>    public sealed class ContactConfig<br>    {<br>        // Explicit static constructor to tell C# compiler  <br>        // not to mark type as beforefieldinit  <br>        static ContactConfig()<br>        {<br>        }<br>        private ContactConfig()<br>        {<br>        }<br>        public static ContactConfig Instance { get; } = new ContactConfig();<br>        public bool EnableTextChangedDelegate = true;<br>        public bool EnableSearchButtonPressedDelegate = true;<br><br>        public int ContactPermission = 1107;<br><br>        public int PageSize = 20;<br><br>        //Expected Total Contact Count to fetch from Phone Contact<br>        public int ExpectedTotalPhoneContact = 1000;<br><br>        // SearchBar Configuration<br>        public string SearchBarPlaceholder = &quot;Search contacts...&quot;;<br>        public Color SearchBarBackgroundColor = Colors.White;<br>        public Color SearchBarTextColor = Colors.Black;<br>        public Color SearchBarPlaceholderColor = Colors.Gray;<br>        public Color SearchBarIconColor = Colors.Gray;<br>        public double SearchBarFontSize = 14;<br>        public string SearchBarFontFamily = &quot;Arial&quot;;<br>        public FontAttributes SearchBarFontAttributes = FontAttributes.Bold;<br><br>        // CollectionView Configuration<br>        public int CollectionViewItemSpacing = 5;<br>        public int RemainingItemsThreshold = 5;<br>        public bool ShowVerticalScrollBar = false;<br>        public SelectionMode CollectionSelectionMode = SelectionMode.Multiple;<br>        public Color SeparateColor = Colors.LightGray;<br><br>        // Group Header Configuration<br>        public double GroupHeaderFontSize = 16;<br>        public FontAttributes GroupHeaderFontAttributes = FontAttributes.Bold;<br>        public Thickness GroupHeaderPadding = new Thickness(10, 5);<br>        public Color GroupHeaderBackgroundColor = Colors.LightGray;<br>        public Color GroupHeaderTextColor = Colors.Black;<br><br>        // Contact Item Configuration<br>        public double ContactItemHeight = 80;<br>        public double ContactNameFontSize = 16;<br>        public FontAttributes ContactNameFontAttributes = FontAttributes.Bold;<br>        public double ContactNamePadding = 10;<br>        public Color ContactNameTextColor = Colors.Black;<br><br>        public double ContactPhoneFontSize = 14;<br>        public Color ContactPhoneTextColor = Colors.Black;<br>        public Thickness ContactPhonePadding = new Thickness(10, 10, 0, 10);<br><br>        // Selection Checkmark Configuration<br>        public double CheckmarkSize = 20;<br>        public string CheckmarkIcon = &quot;checkmark&quot;;<br>        public Thickness CheckmarkMargin = new Thickness(5, 5, 20, 0);<br>        public bool ShowCheckmarkAnimation = true;<br>        public Color ContactCellBackgroundColor = Colors.White;<br><br>        // Alphabet List Configuration<br>        public double AlphabetFontSize { get; set; } = 12;<br>        public Thickness AlphabetPadding { get; set; } = new Thickness(2, 4, 2, 4);<br>        public Color AlphabetBackgroundColor { get; set; } = Colors.White;<br>        public Color AlphabetTextColor { get; set; } = Colors.Black;<br>        public TextAlignment AlphabetHorizontalTextAlignment { get; set; } = TextAlignment.Center;<br>        public TextAlignment AlphabetVerticalTextAlignment { get; set; } = TextAlignment.Center;<br><br>    }<br><br>}</pre><p>you will get the final output:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DfC1QjChCZ4RcaR-mBZmrg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*zZQvmb_Dbi0QunAu6U9XQA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QYzYNuzqcflLl-hpY5xFuQ.png" /></figure><p><a href="https://github.com/kamalkumar1/XamarinPhoneContact">Get Full Source Code Click Here</a></p><p><a href="https://github.com/kamalkumar1/XamarinPhoneContact">GitHub - kamalkumar1/XamarinPhoneContact: used to get mobile contact</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=eefc296985c0" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>