#Programming

  1. Apple’s use of Swift in iOS 13

    Swift was introduced at Apple’s 2014 WWDC and it is interesting to measure Apple’s own use of Swift in iOS over the years. iOS 9 released in 2015 included a single application written with Swift: Calculator. Since then the number of applications using Swift in iOS has grown each year with iOS 10.1, iOS 11.1 and iOS 12.0. Now that iOS 13.1 is available, let’s measure how many applications are using Swift this year.
    [Read More]
  2. Your own VPN server for 3€/month with built-in iOS and macOS support

    Using a VPN is an obvious solution when you are connected to internet on an untrusted network. Instead of paying a subscription to a VPN service, I decided to create my own VPN server. It turns out that this is much simpler than I expected. In this article, I briefly explain what is a VPN and its advantages. I then explain how I built my own VPN server.
    [Read More]
  3. Analysis of the Nest app for iOS

    Lately, many people have wondered why some iOS apps were so huge. I asked myself this question and analyzed the Facebook application for iOS v. 66.0 in 2016 and v. 87.0 in 2017. In this article, I dissect the Nest app (5.30.5) for iOS released on 29.11.2018. There has been quite some speculations about this app in a thread started by John Gruber on Twitter: This post will answer some simple questions about this specific app: Which technologies are used? Why is the app so big? Would it be possible to reduce the app size?
    [Read More]
  4. Deobfuscated libMobileGestalt keys (iOS 12)

    libMobileGestalt is a private library in iOS that describes the capabilities of the device: system version, build version, device type, device features, status of the airplane mode, … Apple obfuscates this information which makes it hard to know the capabilities of the device. In January 2017, I presented a method for Deobfuscating libMobileGestalt keys. At that time there were 673 known obfuscated keys and I managed to recover 564 out of the 673 keys (83%). Since this previous article, Apple has released 2 major iOS versions, and new obfuscated keys have been added. In this post I quickly recap what is libMobileGestalt and provide the updated list of recovered keys.
    [Read More]
  5. Constraints on QuickLook plugins

    A QuickLook plugin on macOS 10.14 has several constraints to satisfy. If one of the limits is exceeded, the plugin will immediately be killed and no preview will be visible. Having such restrictions makes sense but they appear to be undocumented. This article addresses the lack of information about these constraints.
    [Read More]
  6. QuickLook plugin to visualize .car files (compiled Asset Catalogs)

    In a previous article, I reverse-engineered the .car file format used to store the compiled assets of an Asset Catalog. I also demonstrated how to create a tool to manually parse such files. While this tool can extract a lot of information, it is cumbersome to use if you want to quickly see all the assets contained in a car file.
    [Read More]
  7. Reverse engineering the .car file format (compiled Asset Catalogs)

    An Asset Catalog is an important piece of any iOS, tvOS, watchOS and macOS application. It lets you organize and manage the different assets used by an app, such as images, sprites, textures, ARKit resources, colors and data.
    [Read More]
  8. Apple’s use of Swift in iOS 12

    Two years ago I measured Apple’s use of Swift in iOS 10.1 and last year I counted how many applications were using Swift in iOS 11.1. This year I’m analyzing iOS 12, released by Apple this month.
    [Read More]
  9. VPNStatus, a replacement for macOS builtin VPN Status

    In this post I present VPNStatus, an application that replicates some functionalities of macOS built-in VPN status menu:
    [Read More]
  10. macOS VPN architecture from System Preferences down to nesessionmanager

    macOS 10.13 contains a built-in VPN client that natively supports L2TP over IPSec as well as IKEv2. In this post I describe some parts of the internal architecture of the macOS VPN client. This information will be used in a following article to build an application that replicates some functionalities of the VPN status in the menu bar. This application will also allow to auto connect to an IKEv2 VPN service, something that is currently not possible on macOS.
    [Read More]