Skip to main content

Carlos - flexible and powerful cache layers in your application

Carlos is a small set of classes, functions and convenience operators to realize custom, flexible and powerful cache layers in your application.
By default, Carlos ships with an in-memory cache, a disk cache and a simple network fetcher(disk cache and network fetcher are inspired by HanekeSwift).
With Carlos you can:
  • create levels and fetchers depending on your needs, either through classes or with simple closures
  • combine levels
  • transform the key each level will get, or the values each level will output (this means you're free to implement every level independing on how it will be used later on). Some common value transformers are already provided with Carlos
  • Apply post-processing steps to a cache level, for example sanitizing the output or resizing images
  • react to memory pressure events in your app
  • automatically populate upper levels when one of the lower levels fetches a value for a key, so the next time the first level will already have it cached
  • enable or disable specific levels of your composed cache depending on boolean conditions
  • easily pool requests so you don't have to care whether 5 requests with the same key have to be executed by an expensive cache level before even only 1 of them is done. Carlos can take care of that for you
  • setup multiple lanes for complex scenarios where, depending on certain keys or conditions, different caches should be used
  • Cap the number of concurrent requests a cache should handle
  • have a type-safe complex cache that won't even compile if the code doesn't satisfy the type requirements
WeltN24


By the way, there is Brandon Case talking about Carlos at the Commercial Users of Functional Programming (CUFP) September 2016 in Nara, Japan!

Composable Caching in Swift
Slides

iOSCon 2017


There are even new Carlos-inspired project coming up:
Shallows

Shallows is a generic abstraction layer over lightweight data storage and persistence. It provides a Storage type, instances of which can be easily transformed and composed with each other. It gives you an ability to create highly sophisticated, effective and reliable caching/persistence solutions.

Shallows is deeply inspired by Carlos and this amazing talk by Brandon Kase.

Shallows is a really small, component-based project, so if you need even more controllable solution – build one yourself! Our source code is there to help.

GitHub




Comments

Most Favorite Posts

TechLead: React Native vs Flutter vs WebView - Hybrid Mobile App Development for 2018

Topics covered: Xamarin, Cordova, Flutter, Titanium, React Native, Flutter React Native Web Views Native Development: iOS and Android Types of apps: Fully native high interactivity expensive: iOS and Android high interactivity, personalization, performance worth for top 50 apps less and less apps are installed you need to shine to be discovered user picks only best app among similar featured apps Hybrid Technologies Xamarin, Cordova, Flutter, Titanium, React Native, Flutter Be aware of the maturity lock-in effect infrastructure and tooling required might get worst of both world should be incrementable updatable check where it makes sense WebViews only Native App shells: Amazon App, Apple App Store, WeChat Mainly for smaller companies Trending on Google Links: AirBnB is sunsetting its React Native development What’s Next for Mobile at Airbnb Server-Driven Rendering Even though we’re not using React Native, we still see the val...

Dark Theme (Dark Mode) in Android WebViews, WKWebViews and CSS

So your apps just implemented a shiny new dark theme and it’s looking 👌 There are lots of benefits to having a dark theme in your application, and having it consistent throughout your application allows for a great user experience. But what happens when the the user runs into a WebView in your app? Support: if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { ... } Set: WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON) Current setting: val forceDarkMode = WebSettingsCompat.getForceDark(webView.settings) Joe Birch Assuming your question is asking how to change the colors of the HTML content you are displaying in a WKWebView based on whether light or dark mode is in effect, there is nothing you do in your app's code. All changes need to be in the CSS being used by your HTML content. CSS dark mode via :root variables, explicit colors and @media query: :root {     color-scheme: light dark;      ...

PeekPop - Pre-iPhone 6S and 6S+

Peek and Pop Let your users preview all kinds of content and even act on it — without having to actually open it. Users can then press a little deeper to Pop into content in your app. Apple 3D Touch PeekPop Peek and Pop is a great new iOS feature introduced with iPhone 6S and 6S+ that allows you to easily preview content using 3D touch. Sadly, almost 80% of iOS users are on older devices. PeekPop is a Swift framework that brings backwards-compatibility to Peek and Pop. GitHub

App Performance Monitoring

AppDynamics Real-time performance monitoring—from code-level to customer experience Application Performance Monitoring Remove complexity and solve problems more quickly with proactive, end-to-end performance monitoring. End-User Monitoring Create better experiences where your customers are engaging with your business the most. Business Performance Monitoring See the real-time impact application performance and customer experience are having on your bottom line. AppDynamics bonkey: " I still call it CRASHDynamics " ...maybe they improved since then? New Relic Performance monitoring for today’s digital business Full Stack Visibility Monitor and optimize your entire technology stack—from your infrastructure and applications to browser and mobile apps. Built to Scale The only pure-play 100% multi-tenant cloud platform that's easy to deploy. And with no hardware to manage, you can see higher ROI and significantly lower TCO. Real-time Analytics for Ev...

iOS and Android native App Install Banner

Android Native App install banners are similar to Web app install banners, but instead of adding to the home screen, they will let the user install your native app without leaving your site. Developer Google iOS Promoting Apps with Smart App Banners: Safari has a new Smart App Banner feature in iOS 6 and later that provides a standardized method of promoting apps on the App Store from a website. Developer Apple

Custom Launch Images with Storyboards since iOS 8

Earlier this week, tweets from Nick Lockwood and James Thomson alerted me to an as yet undocumented new feature in the iOS 8 SDK: you can now use a storyboard scene in place of your app’s launch images. Creating a Launch Screen File The launch screen file is displayed as a splash screen while your app is launching. It’s a single, atomic .xib file that uses size classes to support different device resolutions. It contains basic UIKit views, such as UIImageView and UILabel objects, and uses Auto Layout constraints. Xcode adds a default launch screen file, called LaunchScreen.xib, to your project. Follow these guidelines when creating a launch screen file: Use only UIKit classes. Use a single root view that is a UIView or UIViewController object. Don’t make any connections to your code (don’t add actions or outlets). Don’t add UIWebView objects. Don’t use any custom classes. Don’t use runtime attributes. You can add a launch screen file to an older Xcode project. To c...

Understanding Automatic Reference Counting in Objective-C

Automatic Reference Counting (ARC) largely removes the burden of manual memory management, not to mention the chore of tracking down bugs caused by leaking or over-released objects! Despite its awesomeness, ARC does not let you ignore memory management altogether. This post covers the following key aspects of ARC to help you get up and running quickly. Reference Counted Memory: Quick Revision How Automatic Reference Counting Works Enabling ARC in Your Project New Rules Enforced by ARC ARC Qualifiers – Declared Properties ARC Qualifiers – Regular Variables Migrating Existing Projects to ARC Including Code that is not ARC Compliant Should I Use ARC? The Long Weekend Website