PSPDFKit – The leading framework for displaying and annotating PDFs on mobile.

How to Fix a Bug, Blindfolded.

This is a story about a crash, caused by a bug inside the Android hardware accelerated view drawing. And a story about a team of developers...

PSPDFKit 6.4 for iOS

Introducing PSPDFKit 6.4 for iOS. This release includes support for Right-to-Left languages such as Arabic, a custom image editor, the ability to use FTS 5, Swift...

The Struggle with Action Extensions

Extensions are becoming more and more important on iOS. At PSPDFKit we believe it is important to be a good citizen and to integrate with the...

The Case for Deprecating UITableView

UITableView is a cornerstone of classical iOS development and one of the oldest classes. It's used in pretty much all iOS apps and has been around...

Creating a Compelling Today Widget

With our latest PDF Viewer update, 1.5, we are not only adding Spotlight search, 3D Touch gestures, Wi-Fi Drive, a lot of bug fixes, and improvements,...

Crazy Fast Builds Using distcc

At PSPDFKit we continue to grow our product range, working hard to add new and improve existing features, all while handling the countless special cases that...

PSPDFKit 6.3 for iOS

Introducing PSPDFKit 6.3 for iOS. This release includes PSPDF Instant compatibility, new languages and various UI improvements. Read up on our changelog to get more information...

Chef on macOS

At PSPDFKit we're currently using 20 Mac minis to run our continuous integration. Manually setting up these machines is a very time consuming and error prone...

Hiding Your Action and Share Extensions In Your Own Apps

Developers received a much higher level of integration in iOS 8 thanks to app extensions. Among these, Share and Action extensions are quite popular, since they...

PSPDFKit 6.2 for iOS

Announcing PSPDFKit 6.2 for iOS. This release includes various new customization options, performance and rendering improvements, and many, many details. Take a look at our changelog...

A clean status bar with Android System UI and QuickDemo

More often than necessary, screenshots and videos of Android apps suffer from showing an untidy status bar with unwanted notification icons, a drained battery indicator, and...

PSPDFKit 6.1 for iOS

We are proud to announce the immediate availability of PSPDFKit 6.1 for iOS. This release focused heavily on fixing a lot of edge cases that were...

Restoring state in Android MVP architecture

State restoration is an important part of the Android framework, but, when implementing some MVP architecture, we can hit some problems. Specifically, making presenter aware of...

Running tests with Clang Address Sanitizer

Clang has powerful sanitizers that help you find bugs faster, fix them with more confidence, and find all these impossible-to-reproduce race conditions. These tools are extremely...

Android animations powered by RxJava

Animating objects in Android is seemingly easy, especially using ViewPropertyAnimator which provides out-of-the-box solutions and easy-to-construct view property animations. Add RxJava to the mix and you...

PSPDFKit 💖 React Native

React Native enables you to build native mobile apps using a consistent developer experience based on JavaScript and React. It’s built by Facebook and already used...

Debugging a specific instance with scripted breakpoints

When debugging an issue that is somewhere deep inside your code, you easily end up debugging a class that has lots of living instances. Sometimes, you...

PSPDFKit 6 for iOS

Today we're releasing PSPDFKit 6 for iOS. It's fully optimized for Xcode 8 and iOS 10, comes with improved API for Swift 3, faster rendering, various...

Writing good bug reports

At PSPDFKit, we provide an SDK to display and annotate PDFs, for other people to integrate into their apps. There is a large set of API...

Spicing up status messages

Competition in the App Store has grown to be extremely fierce, so unless you’re inventing a whole new market, you are unlikely to succeed with an...

Just a simple bookmark

Since the inception of longform text, readers found that they needed to somehow mark their progress and interesting passages as they read. Marking your position in...

Opening a PDF in Swift

It's easy to overlook some of our most basic developer actions, because we do them so frequently. However, with the continuous development and increase in the...

Preventing Popovers on Popovers

Pages on iOS 9 shows an activity view controller in a way we can’t reproduce, and UIKit’s behavior when presenting action sheets and activity view controllers from...

Efficient iOS Version Checking

Few apps have the luxury to support only the most recent version of iOS. It's often necessary to set a lower deployment target and branch in...

Investigating Thread Safety of UIImage

UIImage is one of the most important classes in UIKit. When compared to browsers, image handling on iOS is still quite tricky. Loading even a medium-sized...

End–to–End Testing: What, Why, and How?

Silently corrupting user data is commonly regarded as The Worst Thing You Can Do™ (TWTYCD). Following my personal mantra, “schlimmer geht’s immer” (loosely translates to “there’s...

Testing HTTP APIs in Elixir

Here at PSPDFKit, we love testing. With the growing diversity of products on our roadmap, there's no shortage in the variety of testing approaches we employ...

Swifty Objective-C

Objective-C originates from the early 1980s, and while the language has evolved a lot over the years, it's still no match for really modern languages like...

Selective Pull Request Testing

PSPDFKit used to be an iOS-only framework and testing pull requests was easy. The Jenkins plugin ghprb (short for “GitHub Pull Request Builder”) started the iOS...

Continuous iOS Code Coverage With Jenkins and Slather

We at PSPDFKit are big believers in automated testing. Unit tests, UI automation tests, snapshot tests, you name it, we do it all. Whenever you are...

Keyboard Handling on Android

Working with a soft keyboard on Android can be confusing. While implementing free-text annotation editing into the PSPDFKit for Android framework, we felt this way many...

Running UI Tests on iOS With Ludicrous Speed

You might think the UI for a PDF viewer/editor would be trivial, however it’s anything but. At PSPDFKit we have a ton of simple and complex...

Adding live search to Jazzy docs

At PSPDFKit, we use Jazzy to generate our great-looking iOS API docs. Jazzy is an Objective-C/Swift documentation generator built by the team at Realm. Jazzy uses...

Kotlin-ready online guides

Our Android guides for PSPDFKit received a large update – now with Kotlin usage examples.

A Pragmatic Approach to Cross-Platform

At PSPDFKit we offer native SDKs for iOS, Android and soon also for the browser. Yet, invisible to the user, all share a large part of...

Debugging Rotation Issues

Last week as we prepared to ship our new Document Editor, we discovered a blocker: sometimes the app froze after rotating the device. The user interface...

Surprises with Swift Extensions

tl;dr: Swift extensions on Objective-C classes still need to be prefixed. You can use @objc(prefix_name) to keep the name pretty in Swift and expose a prefixed...

The curious case of Android premultiplied alpha

Having been designed for comparatively slow mobile devices, both iOS and Android expose highly optimized development APIs. In some cases this can lead to confusing behaviour,...

Presentation Controllers and Adaptive Presentations

iOS 8 introduced the UIPresentationController class to manage and customize view controller presentations in a reusable manner. This came with adaptive presentations: adjusting the way a...

Using ccache for Fun and Profit

At PSPDFKit we work with a very large codebase: over 600k lines and growing. Of course we aim to write compact, efficient code — but the...