We briefly cover how PDF rendering works and some reasons why rendering a PDF can be slow.
We recently shipped a major new feature in SwiftUI while still supporting iOS 12 in our SDK. Here's what we learned.
A short post about the experience of using an M1 MacBook for working on our Server product.
A recollection of the events that led to PSPDFKit supporting ARM for our server-based products.
Digging into the internals of PSPDFKit to improve PDF performance.
How to fork and modify the PSPDFKit Flutter PDF SDK for your own application.
A post about dealing with large files in Elixir applications.
In this post, we'll look at a piece of API that many people rarely touch, if ever: Stream. It’s neither new nor shiny, but it's a powerful tool when you know how to use it.
How string literals are encoded by Clang and MSVC.
A short article about the principles of performance improvements at PSPDFKit.
With Xcode 12, Apple improved the XCFramework format, which unlocks great new capabilities.
We’re sharing some techniques for tracking down and fixing flaky Xcode tests on CI.
Learn why we moved from Jenkins to Buildkite, what the current most promising services are, and how we evaluated them.
PDFs can be large, and sending only the changes can dramatically reduce the amount of bandwidth used.
Learn how to use Chef to automatically provision macOS machines for CI: infrastructure as code
What JWTs are, how they work, and how we use them at PSPDFKit.
A quick look at reverse debugging/time travel debugging for C/C++.
This blog post covers how to integrate OCR functionality in iOS, perform OCR, and leverage functionality such as extraction, selection, highlight, and search.
Events on the web have changed a great deal since the days of the cursor and the mouse. We examine some differences that you should be aware of.
How the update to Android Gradle plugin 4.1 and Kotlin 1.4 can break custom linter rules, and how to fix it.
We explore the different ways to run macOS in the cloud, comparing virtualization via VMware, Anka, and Orka with running a fleet of bare metal machines on Amazon or MacStadium.
In this new series, we're sharing our approach to macOS continuous integration for smaller teams that can't dedicate an entire team to CI management or aren't willing to invest five-figure sums per year for their setup.
This post covers what executable documentation is and how you can use the LLVM Integration Tester to create it.
This blog post explains all the steps we take to stay up to date with PDFium at all times.
Ccache is a build cache to achieve faster compilation. With the 4.0 release, it now supports Modules, which makes it possible to accelerate projects that mix Objective-C and Swift.
We share the experience of migrating from the old Fastcomp backend to the new LLVM backend in Emscripten.
Better keyboard navigation and assistive technology support on the latest versions of our Web SDK.
An introduction to why and how we designed the brand-new unified CRUD API in PSPDFKit for Web.
An introduction to an experimental feature in LLDB, Reproducers, that helps reproduce bugs in the debugger itself.
We share our tips and tricks for debugging issues in WebAssembly and look to the future to see what's coming.
Using data to draw insightful conclusions.
What we learned from experimenting with binary frameworks as Swift packages in Xcode 12.
We explore various issues with the render fidelity of PDF.js.
Our journey of using Visual Studio Code to develop C++ in a remote container.
An overview of how to use Metal to apply filters to images to perform a simple color inversion on the input image.
An introduction to the C++20 modules feature: what they are, their potential advantages and disadvantages, and how they are used.
An overview of how OCR can enhance scanned documents to speed up common operations. We explain what OCR is, why it's useful, and how it works.
Apple has a rich history of supporting the PDF file format, but when and how did its relationship with the PDF format begin?
How git log information may not be enough when developers need to understand changes in a codebase that has evolved over several years.
Exploring the power and flexibility offered by creating lists using UICollectionView.
Learn how to properly update cells in a table view or collection view without crashing.
Images with transparency (PNG alpha support) offer new possibilities for annotating documents across all platforms.
This blog post takes a peek under the proverbial PDF hood to find out how we developed Instant Comments.
Apple introduced the objc_direct attribute in Xcode 12. Learn what it does and how you can use it to your advantage.
A short tutorial showing the use of WebAssembly in a web worker.
What we learned about XCFrameworks while migrating PSPDFKit to this new format.
In iOS 11, Smart Punctuation caused data loss. Learn how we fixed the issue and how we are now cleaning up the OS-level workaround.
How we noticed a Chrome regression and shipped a workaround in a timely fashion.
A case study on how we design features and APIs for PSPDFKit for Android.
This blog post compares different IDEs and text editors that can be used to write C++ in a big codebase.
Learn how to automate measurement runs with Instruments.
This blog post explains why software that performs well is important and how we measure code performance at PSPDFKit.
This blog post discusses tips and best practices on how to reduce flakiness in automated UI testing on Android.
Objective-C stores type encoding in the binary. These encodings can become surprisingly large.
Apple introduced new pointer events in iOS 13.4 to better support trackpad and mouse devices.
How we can reduce build times and clean up our header dependencies with effective header management.
This blog post outlines the frameworks and techniques PSPDFKit uses to test its large-scale C++ codebase.
C++ exceptions have their place, but using an alternative is recommended for general program flow control.
A short introduction to compiler-based lock checking in C++ with Clang using Thread Safety Analysis
Examining new developments in the PWA landscape that affect mobile and desktop browsers.
This blog post explains what the C++ Lifetime Profile is and how it intends to make the language safer and help avoid memory management problems.
How we improved our Git repository setup by moving our PDF Viewer for iOS repository into our PSPDFKit repository.
A look at the android.support.test.filters library and what it provides you with.