• make ipa

    Building an iOS Application without Xcode

    Ever wanted to build an iOS app, but you’re not a big fan of Xcode? Would you like to know what on earth is the black magic that makes your code into an iOS application? Well, you’ve come to the right place.

    Read more...

  • PSA: Stop Creating .a Files

    “Archive Files Considered Harmful”

    Archive (.a) files are commonly used as the file format of choice when creating statically linked libraries. However, archive files have many pitfalls by design and are usually not worth the trouble when compared to plain object (.o) files.

    Read more...

  • Lock-Free List

    Getting Familiar & Setting Up

    Every once in a while, you run into a seemingly simple problem, that turns about to be much more interesting, and you open up to a whole new world.

    Read more...

  • The Appdome Way of Using Make

    Multi-platform Building with Make

    Appdome’s build system is quite complex – it must build dozens of modules (each with its own quirks and compilation flags) on three platforms (Android and two iOS “flavors”), while avoiding code duplication and keeping development as easy as possible. In this article, we’ll recreate a similar (yet simpler) make-based build system that can create both 64-bit dynamic libraries that runs on both macOS and iOS using a single codebase, without having to run ./configure-like scripts or make clean to switch targets.

    Read more...

  • Towelroot

    An analysis of Towelroot and the futex vulnerability

    A few years back I did an article series about Towelroot and the futex-vulnerability. Since then the website migrated several times and the articles got butchered.

    Read more...

  • A nil that is not a NULL

    Creating a nil-like Object for Fun and Profit

    A cool feature of the Objective-C runtime is that nil “responds” to every selector, and always returns a value that is equivalent to 0 or nil itself. This feature, together with the dynamic nature of Objective-C, can be exploited to aid in research of Objective-C code, and bypassing API limitations.

    Read more...

  • No-Bugs No-Glory: Issue no. 1

    Logging Quirks on Android

    Suppose you wanted to implement encrypted disk-I/O in your application. The way to go about it would be intercept all the I/O system calls and reimplement them so that data written/read will be encrypted/decrypted. One method to intercept those functions would be to hook them. Meaning, set up the process in such a way that when write is called, instead some custom HOOK_write implementation is called. In addition, you might want to know what’s happening inside your functions, so you will naturally use some sort of logging mechanism. In Android’s case you will use the __android_log* API supplied by liblog.so. However, logs are something to be seen by the developers only, and they do add a bit of an overhead to the product, both in size (MiBs) and in performance, so you want to be able to easily switch them off. Surprisingly, a combination of these (rather innocuous) elements can cause some very odd behavior on Android under certain conditions.

    Read more...

  • Automating iOS Tasks from a Mac's Terminal

    Creating Command Line Versions of Xcode Functionalities

    One of the common tasks an iOS developer would want to perform is launching an application on a device from a connected Mac. Usually, this is done from Xcode, which can build, install and launch an application. However, this only covers the very basic scenario – launching an app you just built on a device. But what if you want to launch an application via command line, or a script? What if you’re not even using Xcode for your project? This functionality is very critical, for example, for automatic testing. It enables automatically testing hundreds of applications in nightly cycles that guarantee top quality reliability, and you can’t test an app before launching it first.

    Read more...

subscribe via RSS