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?
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…
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?
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.
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?
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…
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 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…
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.…
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…
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…
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…
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…
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…
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.
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…
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…
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.
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.
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.
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.
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…
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!
/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, …
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.
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.
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?
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).
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:
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 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:
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…
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).
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.
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.
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…
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”.
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:
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:
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.
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 ?
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…