RSSAmplifier

Blog

Timac

Recent content on Timac

blog.timac.orgRSS feed ↗67 posts

Latest posts

Apple’s use of Swift and SwiftUI in iOS 18

As with previous iOS versions, let’s analyze the built-in apps of iOS 18 to answer a few questions: How many binaries does iOS 18 contain? Which programming languages were used to develop these apps? How many apps are written in Swift? What percentage of apps use SwiftUI versus UIKit?

Apple’s use of AppKit, Catalyst, Swift and SwiftUI in macOS Sonoma

Last month, I analyzed the programming languages and UI frameworks used to create iOS 17. This month, let’s analyze macOS from OS X El Capitan 10.11 to the latest macOS Sonoma 14 and answer a few questions: What is the total count of binaries within macOS Sonoma? Which programming languages are used to develop these apps? How many apps are written with Swift? How many apps are using Mac…

Apple’s use of Swift and SwiftUI in iOS 17

Now that iOS 17 is available, let’s analyze its built-in apps to answer a few questions: How many binaries are in iOS 17? Which programming languages are used to develop these apps? How many apps are written with Swift? What is the percentage of apps using SwiftUI versus UIKit?

Charts in Markdown using Apache ECharts

With this blog approaching 15 years of existence, it was time to add support for the long overdue Dark Mode. As part of this update, I also made significant changes to the charts that help visualize the data in the different posts. The content of the posts, including this one, are written using Markdown, and processed using Hugo , a popular open-source static site generator.

Apple’s use of Swift and SwiftUI in iOS 16

iOS 16 was just released so let’s analyze its built-in apps. Like in the past years, I will try to answer a couple of questions: How many binaries are in iOS 16? Which programming languages are used to develop these apps? How many apps are written with Swift? What is the percentage of apps using SwiftUI versus UIKit?

Apple’s use of AppKit, Mac Catalyst and SwiftUI in macOS

The WWDC 2019 had a major impact on the UI toolkit landscape: while the venerable AppKit APIs remained available, Apple removed the old Carbon APIs and introduced 2 brand new frameworks: Mac Catalyst and SwiftUI. Apple sporadically mentioned some apps built with these new UI toolkits. In this article, I try to bring a better overview of Apple’s use of AppKit, Mac Catalyst and SwiftUI in the…

Apple’s use of Swift and SwiftUI in iOS 15

iOS 15 was released a few months ago in September 2021. In this article, I analyze the built-in apps composing iOS 15. How many binaries are in iOS 15? Which programming languages are used to develop these apps? How many apps are written with Swift? Has Apple adopted SwiftUI for some built-in apps?

SwiftLint for Swift Packages

SwiftLint is a great tool to enforce Swift style and conventions. Thanks to the Xcode Build Phases, integrating SwiftLint in an Xcode project is simple: a Build Phase automatically triggers swiftlint when compiling your project. Sadly at the moment, you can’t easily integrate SwiftLint with Swift Packages: A Swift Package has no Build Phases and no way to automatically runs scripts. This…

Mac App Store: Embedding a Command Line tool using paths as arguments

A couple of months ago, I released a new app called Dependencies on the Mac App Store. You can download and try it for free at https://apps.apple.com/app/dependencies/id1538972026 . In this article, I explain how I built the command line support and released it in the Mac App Store. Implementing this feature turned out to be tricky, mostly due to the lack of documentation on this specific subject.…

Comparing iPhone OS 1.0 with iOS 14 using tree maps

If you followed the recent Apple events, you probably saw a picture of the A14 and M1 dies… that got me thinking about what you would see if you could pass iOS under X-Rays… In my previous article about the evolution of the programming languages from iPhone OS 1.0 to iOS 14 , I analyzed iOS based on the number of binaries and their programming languages. As I pointed out in this past post, the…

Evolution of the programming languages from iPhone OS 1.0 to iOS 14

In my previous article about Apple’s use of Swift and SwiftUI in iOS 14 , I counted the number of built-in apps in iOS using Swift and SwiftUI. Several readers asked if I could provide a percentage rather than an absolute number. In this new article, I will answer this question by measuring the total number of binaries in iOS. I will go one step further and also count the number of binaries using…

Apple’s use of Swift and SwiftUI in iOS 14

Swift was introduced a couple of years ago at Apple’s 2014 WWDC. Over the years I analyzed iOS to measure how many built-in applications were using Swift. iOS 9 released in 2015 included a single application written with Swift: Calculator. Since then this number has grown with each iOS release: iOS 10.1 , iOS 11.1 , iOS 12.0 and finally iOS 13.1 . iOS 14 is now available so let’s check…

Introducing Clatters for iOS

Assiduous readers of this blog might have noticed a significant drop in the number of articles last year. Couldn’t I find any interesting subject? Was I getting lazy? Hell no! Today I am pleased to release Clatters for iOS and iPadOS . Clatters is an app to easily monitor in one place your brand, product or any other keyword on your favorite social networks - Reddit, HackerNews and even…

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…

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.

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…

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…

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.

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.

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.

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.

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:

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…

Apple’s use of Swift in iOS 11.1 and macOS 10.13.1

A year ago I analyzed how many built-in apps in iOS 10.1 and macOS 10.12 were using Swift: Apple’s use of Swift in iOS 10.1 and macOS 10.12 . How many built-in apps are using Swift in iOS 11.1 and macOS 10.13.1? Let’s find it out!

Swift: Banning force unwrapping optionals

In this article, I discuss the dangers of force unwrapping and how to avoid forced unwraps.

Facebook.app for iOS [v. 88.0] cleans up duplicates

This post follows up the Analysis of the Facebook.app for iOS [v. 87.0] .

Analysis of the Facebook.app for iOS [v. 87.0]

In this article, I analyze the version 87.0 of the Facebook.app for iOS.

Deobfuscating libMobileGestalt keys

/usr/lib/libMobileGestalt.dylib is a private library which provides an API to retrieve the capabilities of the iOS device, as well as some runtime information: system version, build version, device type, current status of the airplane mode, …

mach_portal: Improve amfid patch to support fat binaries

Ian Beer did an incredible work with his iOS 10.1.1 exploit. The mach_portal proof of concept gives you a root shell on iOS 10.1.1. You can read more about it here: https://bugs.chromium.org/p/project-zero/issues/detail?id=965 While playing with it, I discovered that the amfid patch was only supporting thin arm64 binaries. I did not find a fix online so here is my solution.

Testing if an arbitrary pointer is a valid Objective-C object

Let’s say you pick a random pointer. Can we know if it points to a valid Objective-C object? Of course without crashing… Well there is no simple solution. In this post I give a solution for 64-bit architectures. The code provided has only been tested on macOS 10.12.1 and iOS 10.1.1 with the modern Objective-C runtime.

Apple’s use of Swift in iOS 10.1 and macOS 10.12

Swift has been announced at the WWDC 2014, more than 2 years ago. Most of the sample code projects from Apple are now written in Swift. But does Apple use Swift in iOS 10.1 and macOS 10.12.1?

Analysis of the Facebook.app for iOS

Did you ever wonder why the Facebook.app for iOS is such a big download? This post tries to give some answers. The version 66.0 (released on 7 October 2016) was analyzed on an iPad Air 2 (64-bit).

Accessing the Temperature Unit setting in iOS 10

In iOS 10 Apple added a new dedicated setting for Temperature Unit in the Settings.app under General > Language & Region > Temperature Unit . It lets you switch your preferred unit between Fahrenheit and Celsius:

Dump decrypted mach-o apps

In a previous post CryptedHelloWorld: App with encrypted mach-o sections , I created a simple macOS app CryptedHelloWorld with its (__TEXT, __text) section encrypted. The section is decrypted by a constructor function . This post explains how to dump the decrypted app. A common way is to attach the app with a debugger (GDB, LLDB) and manually dump the decrypted memory to disk.

Mail.app plugin compatibility for macOS Sierra (10.12)

Mail.app in macOS 10.11 and earlier used to check the plugins compatibility using the SupportedPluginCompatibilityUUIDs key in the plugin’s Info.plist. For example a Mail plugin would only be compatible with macOS 10.11.6 if its Info.plist contained the following:

CryptedHelloWorld: App with encrypted mach-o sections

In a previous post ( constructor and destructor attributes ), I described the constructor attribute and mentioned software protection as a possible use case: A constructor attribute could be used to implement a software protection. You could encrypt your executable with a custom encryption and use a constructor function to decrypt the binary just before it is loaded. In this post I describe such a…

constructor and destructor attributes

GCC (and Clang) supports constructor and destructor attributes: __attribute__((constructor)) __attribute__((destructor))

Blowfish operations with key size longer than 448 bits in macOS 10.11.5 / iOS 9.3.2

Until macOS 10.11.4 and iOS 9.3.1 CommonCrypto/corecrypto supported Blowfish operations with key sizes longer than 448 bits. Starting with macOS 10.11.5 and iOS 9.3.2 this is no longer the case: the minimum and maximum key sizes are now enforced (respectively kCCKeySizeMinBlowfish 8 bytes and kCCKeySizeMaxBlowfish 56 bytes).

State Preservation and Restoration Debug Logs

The State Preservation and Restoration system is well documented here: Preserving Your App’s Visual Appearance Across Launches . But what is not well known is that there is a secret preference to enable debug logs.

Identifying the type of build (Build, Archive) at compile time in Xcode

Let’s say you want to have a different behavior in your app depending on whether you build it in Xcode or you perform an Archive. And you want this behavior to be done at compile time. Note that the use of different configurations is not what is wanted.

Programmatically lock the screen

This article proposes a technic to programmatically lock the screen.

Disable swipe to delete in Mail.app on OS X 10.11

OS X 10.11 ‘El Capitan’ added a new feature to Mail.app Swipe to manage your inbox : Swipe to manage your inbox. Now you can take care of your email with a swipe, just like on your iOS devices. Need to triage your inbox? Swipe right to mark an email as read or unread, or swipe left to delete. You’ll be focused on what’s important in no time. I find this new feature extremely annoying…

Checking if Reduced Motion is enabled on iOS 7

Apple introduced in iOS 7.0.3 a setting to reduce motion ( http://support.apple.com/kb/HT5595 ) : Settings -> General -> Accessibility -> Reduce Motion Sadly there is no public API to know if the user enabled “Reduce motion”.

QuickLook plugin to preview .strings files

OS X and iOS use .strings files for localized text strings as described in the String Resources Documentation :

Detecting the iOS device hardware architecture (32-bit/64-bit)

In a previous post I explained how to detect if an app runs in a 32-bit or 64-bit iOS Simulator . It was not explaining how to detect if an iOS app runs on a 32-bit or 64-bit iOS device. This post aims at giving a generic method that can detect all cases:

Detecting if an app runs in a 32-bit or 64-bit iOS Simulator

With Xcode 5, it is now possible to compile an application for armv7 and/or arm64. You can compile an application as 32-bit and/or as 64-bit and you can run this application in a 32-bit or 64-bit iOS Simulator:

Using AddressSanitizer with Xcode 4.6.1

Clang 3.3 now supports AddressSanitizer. Here is the description from the Clang 3.3 documentation :

Simple code injection using DYLD_INSERT_LIBRARIES

In the following article I will describe a simple method to inject code into executables on Mac OS X 10.8 using the DYLD_INSERT_LIBRARIES environment variable.

Marre d’être inscrit aux newsletters car sur les listes électorales consulaires ?

Vous aussi vous êtes inscrit sur les listes électorales consulaires et vous en avez marre d’être inscrit, sans votre accord, aux newsletters de tous les candidats et partis ?

StuffIt ContextualMenu for MacOSX 10.6

Smith Micro Software released StuffIt Deluxe® 2011 this week. If you don’t know StuffIt Deluxe®, it is described like this: The StuffIt Deluxe® package gives you all the features you need to backup, share, archive, encrypt and shrink your photos, music, and other documents without compromising quality. StuffIt’s advanced technology specializes in the compression of MP3, PDF and…