SwiftLint for Swift Packages
Oct 3, 2021, 5:00 AM
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...
Mac App Store: Embedding a Command Line tool using paths as arguments
May 16, 2021, 5:00 AM
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...
Comparing iPhone OS 1.0 with iOS 14 using tree maps
Nov 22, 2020, 4:00 AM
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...
Evolution of the programming languages from iPhone OS 1.0 to iOS 14
Oct 19, 2020, 5:00 AM
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...
Apple’s use of Swift and SwiftUI in iOS 14
Sep 27, 2020, 5:00 AM
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:...
Introducing Clatters for iOS
Feb 6, 2020, 4:00 AM
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...
Apple’s use of Swift in iOS 13
Sep 26, 2019, 5:00 AM
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...
Your own VPN server for 3€/month with built-in iOS and macOS support
Apr 28, 2019, 3:00 AM
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...
Analysis of the Nest app for iOS
Dec 11, 2018, 2:00 AM
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...
Deobfuscated libMobileGestalt keys (iOS 12)
Nov 26, 2018, 2:00 AM
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...
Constraints on QuickLook plugins
Nov 19, 2018, 12:00 AM
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...
QuickLook plugin to visualize .car files (compiled Asset Catalogs)
Nov 12, 2018, 2:00 AM
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...
Reverse engineering the .car file format (compiled Asset Catalogs)
Oct 18, 2018, 3:00 AM
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
Sep 24, 2018, 5:00 AM
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
Jul 19, 2018, 2:00 PM
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
Jul 17, 2018, 2:00 PM
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...
Apple’s use of Swift in iOS 11.1 and macOS 10.13.1
Nov 15, 2017, 2:00 AM
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
Jun 28, 2017, 4:15 PM
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
Apr 15, 2017, 2:37 AM
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]
Apr 10, 2017, 1:56 AM
In this article, I analyze the version 87.0 of the Facebook.app for iOS.
Deobfuscating libMobileGestalt keys
Jan 24, 2017, 2:36 PM
/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...
mach_portal: Improve amfid patch to support fat binaries
Dec 21, 2016, 2:27 PM
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...
Testing if an arbitrary pointer is a valid Objective-C object
Nov 24, 2016, 2:48 PM
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...
Apple’s use of Swift in iOS 10.1 and macOS 10.12
Nov 1, 2016, 3:07 PM
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
Oct 18, 2016, 3:27 PM
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
Sep 26, 2016, 2:28 PM
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
Aug 4, 2016, 4:22 PM
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...
Mail.app plugin compatibility for macOS Sierra (10.12)
Jul 27, 2016, 4:05 PM
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...
CryptedHelloWorld: App with encrypted mach-o sections
Jul 23, 2016, 7:09 AM
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...
constructor and destructor attributes
Jul 16, 2016, 2:55 PM
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
Jul 10, 2016, 7:10 AM
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...
State Preservation and Restoration Debug Logs
Jul 8, 2016, 4:08 PM
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.