Native View Controllers and React Native - It Just Works™

This week, we welcome Ben Kraus as a guest author on Inside PSPDFKit, explaining the process of integrating our PDF SDK into Canvas Teacher. Sometimes, React...

PSPDFKit 6.9 for iOS

Introducing PSPDFKit 6.9 for iOS! This version features a new text markup behavior, a refreshed Catalog example project, various improvements to signatures and some UI tweaks....

PSPDFKit 6.8 for iOS

Version 6.8 of PSPDFKit for iOS features a completely revamped Digital Signature implementation, watermark filtering, some iOS 11 fixes and various smaller improvements and fixes. You...

Even Swiftier Objective-C

Another fascinating WWDC is behind us. This year we again witnessed a whole host of newly presented features and refinements to the Swift language, now already...

Linting and Code Formatting at PSPDFKit

At PSPDFKit, we work on a huge codebase written in many different languages, including C++, Objective-C, Java, JavaScript, Swift, and Kotlin. As we’ve been evolving our...

50 Shaders of Android: Drawing on Canvas

Canvas and Shaders, if used wisely, can simplify your life and help you achieve wonderful UI effects and animations.

PSPDFKit 6.7 for iOS

Today we're excited to release PSPDFKit 6.7 for iOS! This version includes a new page grabber UI control, file coordination support, document progress indication and various...

Creating Better User Experiences with Animations and Lottie

Lottie is a fairly new library that enables rendering After Effects animations in real time in your apps, available for iOS (and macOS), Android and React...

How We Test and Generate Interactive CSS Documentation

With the release of PSPDFKit for Web 2017.3, among other improvements, we added more public CSS classes. The CSS classes of PSPDFKit for Web get obfuscated...

PSPDFKit 6.6 for iOS

Another month, another version of PSPDFKit for iOS! Version 6.6 features significantly improved Right-to-Left support, enhanced annotation drawing, better fine-grained control of line thickness for annotations,...

Writing Concise Code with Kotlin and RxJava

One of the reasons I love Kotlin is its expressiveness compared to Java. In Kotlin, you can implement much more logic with fewer characters, making Java...

How to Build Free-Hand Drawing Using React

At PSPDFKit, we make the most advanced PDF SDKs for mobile and desktop. We released PSPDFKit for Web in December and are working hard to bring...

PSPDFKit 6.5 for iOS

Introducing PSPDFKit 6.5 for iOS! This release includes first-class Apple Pencil support, 3D Touch features, a completely rewritten and improved forms parser, UI improvements as well...

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...