Development

DEVELOPMENT Digital Signatures Development

Understanding cryptography standards in the context of PDF digital signatures

Explore the essential standards for implementing secure digital signatures in PDF documents.

DEVELOPMENT AI ChatGPT Insights

Programming in the AI era

DEVELOPMENT AI Insights

How will Generative AI replace SDK engineers?

Explore how generative AI is transforming SDK development, from code generation to API design. Learn about its current capabilities, its future potential, and the ethical considerations involved.

DEVELOPMENT AI Tips

The future of document interactions: Voice-driven exchange with OpenAI’s Realtime API

Discover how OpenAI’s Realtime API with voice mode could transform document interactions. Simply navigate and access information with voice commands, setting the stage for the future of document workflows.

DEVELOPMENT iOS Swift Insights Development

Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar

This article explains our process of creating a new API for customizing the main toolbar using SwiftUI.

DEVELOPMENT Doc Viewer PDF DOCX WebODF PDF.js Development

Top 5 document viewers for developers

Explore the best free and open source document viewers for developers, supporting DOCX and PDF files, with a comparison of features, advantages, and how to get started with tools like Nutrient, WebODF, PDF.js, and ViewerJS.

DEVELOPMENT JavaScript PDF Generation Tips PDF.js PDF-lib PDFKit jsPDF pdfmake Puppeteer Development

Top JavaScript PDF libraries for PDF generation and manipulation

The post compares leading JavaScript PDF libraries, such as PDF.js, PDF-lib, PDFKit, and Nutrient, highlighting their key features, use cases, and differences to help developers choose the best option for their projects.

DEVELOPMENT Agile Python Jira Markdown Productivity Development

Automating Agile Stand-Up Ceremonies with Python Scripts

A blog post detailing how to automate Agile stand-up ceremonies with Python scripts.

DEVELOPMENT iOS Insights Xcode Development

Dark and Tinted Alternative App Icons

Updating how we implemented alternative app icons to support iOS 18’s new dark and tinted app icons.

DEVELOPMENT C++ Development

Structure Padding in C++

A look at padding in C++ structs and classes and how data is laid out in memory can help you write more efficient code and optimize the performance of your programs.

DEVELOPMENT Python PDF Generation Tips Development

Top 10 ways to generate PDFs in Python

Explore 10 powerful methods for generating PDFs in Python, from open source libraries to premium solutions, to meet all your document creation needs.

DEVELOPMENT Insights Development

The Impact of Rapid Technological Advancements on Sustainable Software Product Development

Discover how tech giants like Apple and Microsoft shape software development, the challenges developers face, and strategies for balancing innovation with sustainability.

DEVELOPMENT WebAssembly JavaScript Web Document Processing Development

Leveraging WebAssembly in JavaScript for High-Performance Document Processing

Learn how to use WebAssembly with PSPDFKit to boost the performance of document processing tasks like PDF manipulation directly in your JavaScript applications.

DEVELOPMENT Android Jetpack Compose Development

How to Implement Drag-to-Reorder List Functionality with Jetpack Compose

This post will look at how to add custom functionality in Jetpack Compose to allow dragging items in a list. This is achieved using a custom modifier that is generic and can be reused easily.

DEVELOPMENT HTML JavaScript Node Tips Development

Top 10 ways of converting HTML to PDF

Explore 10 effective methods for converting HTML to PDF, including open source options, as well as a premium choice.

DEVELOPMENT iOS Xcode Insights Development

Investigating a Dynamic Linking Crash with Xcode 16

Debugging and fixing a crash we noticed after updating to Xcode 16.

DEVELOPMENT iOS Android Room Kotlin Multiplatform Tips Development

Seamless Room database integration for Kotlin Multiplatform projects

This blog post explores the process of integrating the Room database library into Kotlin Multiplatform projects with ease and efficiency.

DEVELOPMENT iOS Insights Xcode Development

NSCopying in a Swift World

An exploration into how a modern Swift programming mindset clashes with Objective-C’s NSCopying protocol.

DEVELOPMENT iOS Swift Insights Development

Generating API documentation for multiple targets with DocC

Follow our process of utilizing DocC to create combined API documentation for multiple frameworks.

DEVELOPMENT iOS Swift Tips Development

Privacy Manifests and Required Reason APIs on iOS

What privacy manifests and required reason APIs are, and the approach taken by PSPDFKit for adding support for these requirements.

DEVELOPMENT visionOS iOS Development

Apple’s Vision of Our Digital Future

Bridging reality and imagination in the digital age through spatial computing and innovative software.

DEVELOPMENT iOS Insights Debugging Tips Development

Debugging in iOS: Resolving UITextView Flickering Issues

A debugging story that includes some tips and tricks

DEVELOPMENT iOS Swift Tips Development

Using Asset Catalogs for Images

We discuss the various features of asset catalogs relating to images.

DEVELOPMENT Web Annotations Development

Supported Annotation Flags in the PDF Spec and PSPDFKit

Learn the basics of annotation flags and discover which annotation flags are supported in the PDF specification and PSPDFKit.

DEVELOPMENT .NET Development

Extracting Key-Value Pairs Using GdPicture.NET SDK

A comprehensive introduction to extracting key-value pairs with GdPicture.NET SDK.

DEVELOPMENT Kotlin Android Development

Kotlin Non-Nullable Pitfall

Under what circumstances a non-nullable value might be null.

DEVELOPMENT iOS Swift Insights Development

Adopting UITextInteraction

Learn how to add UITextInteraction to a custom text input element on iOS, iPadOS, and macOS.

DEVELOPMENT WinUI 3 Windows Application SDK WebView2 Interop How To Development

How to Access Native Code from WebView2 with WinAppSDK/WinUI 3

A step-by-step guide on how to access native code in JavaScript within a WinUI 3 application.

DEVELOPMENT SwiftUI iOS Swift Development Debugging

A Tryst with SwiftUI, Or: How I Learned to Stop Worrying and Enjoy Building UIs

A blog post about one of our engineers and his experience using SwiftUI.

DEVELOPMENT iOS Insights Development

Vision Is an Exciting Addition to Apple’s Lineup

Considering how Apple’s newly announced Vision platform could fit in with its existing platforms.

DEVELOPMENT .NET MAUI Development

Choosing Your .NET MAUI Document Strategy

Exploring options for leveraging PSPDFKit in your .NET MAUI applications.

DEVELOPMENT iOS Development

Customizable UI Components on iOS Using UIKit

Providing UI components in UIKit that allow user customization while also providing a default style that works in most cases.

DEVELOPMENT iOS Insights Xcode Development

Conditional Compilation for Apple’s Yearly Updates

How to smoothly transition an iOS and Mac Catalyst app for Apple’s yearly updates between June and October.

DEVELOPMENT JavaScript Deno How To Development

Why I Chose Deno to Automate My Summary of the Day

A brief description of my usage of Deno to automate my summary messages.

DEVELOPMENT iOS Swift Objective-C Tips Development

Developing Mixed-Source Swift Packages

Tips for publishing Swift packages that include both Swift and Objective-C source files.

DEVELOPMENT Web TypeScript Development

Understanding Generics in TypeScript: Part 1

Learn the basics of generics in TypeScript.

DEVELOPMENT JavaScript Elixir Development

Elixir Idioms for JavaScript Developers

A comparison of the features of JavaScript and Elixir.

DEVELOPMENT PDF Text Internationalization Layout Development

The Challenges of PDF Text Layout

The process and difficulties involved in laying out text in PDF documents.

DEVELOPMENT Culture Insights Development

My Engineering Transition from Mobile to Backend

A peek into the process of an engineer switching teams at PSPDFKit.

DEVELOPMENT iOS How To PDF Viewer Development

Swift's approach to SPI

A closer look at how to design a System Programming Interface (SPI) in Swift.

DEVELOPMENT React Native Expo How To Development

How to Use PSPDFKit for React Native with Expo

How to use PSPDFKit for React Native with Expo.

DEVELOPMENT iOS Swift Tips Development

Optimizing Annotation Drawing Performance

How we optimized ink annotations and improved performance of several SDK components.

DEVELOPMENT Android Flutter How To Development

Run a Flutter App on an Emulator inside Docker

How to run a Flutter application on a dockerized Android emulator.

DEVELOPMENT Web C++ Development

My Experience with Web Development from a Systems Programming Perspective

The personal view of web development from a person with experience in systems programming.

DEVELOPMENT Web Testing Development

Migrating from Puppeteer to Playwright

How we migrated from Puppeteer to Playwright in our test suite.

DEVELOPMENT iOS Swift Objective-C Insights Development

Uncovering SourceKit Limitations While Updating Our API Documentation

A post that goes into detail on how moving to Swift-first API documentation uncovered issues in SourceKit.

DEVELOPMENT Culture Productivity Development

A Perfect Gift

Learn how to modify a mechanical keyboard

DEVELOPMENT Android Kotlin Development

Pairs and Triples in Kotlin (And Why You Shouldn't Use Them)

An under the hood overview of pairs and triples in Kotlin.

DEVELOPMENT Flutter How To Development

Setting Up Your Flutter Environment, the Right Way — Part 1

A simpler, more convenient way to set up your development environment with support for multiple versions of Flutter.

DEVELOPMENT Android Web Development Culture

Road to Polyglot Development

A blog post outlining my transition to polyglot development for the web.

DEVELOPMENT Android Support NDK Development

How to Handle NDK Crashes

Handling NDK crashes when using PSPDFKit for Android.

DEVELOPMENT Web .NET JavaScript Development

Calling .NET Code from Your JavaScript Project

Ever wanted to run .NET code on the web without running a backend? Now it's possible!

DEVELOPMENT Kotlin Android How To Development

Kotlin Context Receivers — A Preview

A short summary about the upcoming Kotlin feature, context receivers.

DEVELOPMENT Elixir Deployment Development

Using the JSON Configuration Format with a Schema Definition in an Elixir Release

This blog explains an alternative approach for providing a configuration in JSON for Elixir releases.

DEVELOPMENT Machine Learning Development

Edit Documents in Plain English Using PSPDFKit API and Machine Learning Language Models

How to use machine learning language models like GPT-3 or Jurassic-1 and natural language to use PSPDFKit API.

DEVELOPMENT iOS Swift Tips Development

Adding a Document Viewer to a Mac Catalyst App

We discuss how a PDF document viewer can be added to a Mac Catalyst app using the PSPDFKit SDK.

DEVELOPMENT Testing Productivity Insights Development

How We Make Our CI Fast

Principles we apply to improve our CI efficiency.

DEVELOPMENT iOS Insights Xcode Development

Download Failures with Swift Package Manager Binary Targets

A tale of how reading an error message more carefully allowed us to work around an issue with our tooling.

DEVELOPMENT CSS Insights Development

Margin Collapsing in CSS

An overview of a particular margin collapsing scenario I discovered while working on headers and footers support for PDF Generation.

DEVELOPMENT iOS Swift UI/UX Insights Development

Replicating the iOS Text Magnifying Glass

A dive into details of how we replicated the system magnifying glass on iOS.

DEVELOPMENT C++ Office Tips Development

Testing Subjective Office Conversion Results

How to test an Office to PDF conversion result that one would deem great and others would deem poor.

DEVELOPMENT API Elixir Insights Development

Rate Limiting Server Requests in Elixir

A blog post explaining how we built rate limiting for test requests in PSPDFKit API.

DEVELOPMENT iOS Swift SwiftUI Insights Development

Our Attempt at Rewriting PSPDFKit Catalog in SwiftUI

We tried rewriting a part of our PSPDFKit Catalog example project in SwiftUI. Here's what we learned.

DEVELOPMENT Machine Learning NLP PDF Tips Development

Summarize a PDF document using machine learning and natural language processing

In this blog post, I'll show the quickest possible way to summarize a PDF document using machine learning and a natural language processing model called BART.

DEVELOPMENT Web Elixir Testing Insights Development

How We Use Property Testing

Some real-life examples of how we use property testing in PSPDFKit Server testing.

DEVELOPMENT Android iOS Cordova Flutter Ionic React Native Xamarin Development

Cross-Platform Mobile Frameworks — An iOS Engineer's Perspective

What I learned while working on cross-platform mobile frameworks.

DEVELOPMENT Insights Development

Best Practices When Doing Code Reviews — Part 2

The second part of a series of posts about doing good code reviews, with tips from the code writer's side.

DEVELOPMENT Android Tips Development

How to Load OBJ Files with MTL in Android

Loading .obj files with .mtl using Three.js in Android.

DEVELOPMENT Web Products Support Development

Scaling Sync Performance: A Customer Story

A short story about scaling performance based on a support ticket.

DEVELOPMENT API PDF Generation Tips Development

Top 6 best PDF generator APIs in 2024: A complete guide to choosing the best API

Discover the best PDF generator APIs in 2024. Compare features, pricing, and use cases to find the best PDF generator API for your document creation needs.

DEVELOPMENT API Insights Development

A Peek at Our CD Pipeline

A short peek at the CD pipeline powering our PSPDFKit API product.

DEVELOPMENT C++ PDF Development

PDF vs. DOCX: How Textual Contents Can Be So Different

A dive into the PDF and DOCX formats to understand the advantages of each.

DEVELOPMENT iOS SwiftUI Tips Development

Presenting Popovers on iPhone with SwiftUI

How to present the UI as popovers on iPhone when using SwiftUI.

DEVELOPMENT Insights Development

Best Practices When Doing Code Reviews — Part 1

An article with tips about how to do effective code reviews that have an impact on the quality of a codebase.

DEVELOPMENT Android Kotlin Jetpack Compose Insights Development

How We Expose Jetpack Compose APIs

A few lessons we learned about API design for modern Android.

DEVELOPMENT Web JavaScript Tips Development

How to download multiple files with JavaScript

A step-by-step tutorial explaining how to download multiple files from a server with a single request.

DEVELOPMENT Web Server Elixir Tips Development

Using SSL for PostgreSQL Connections on Elixir

How to successfully establish and verify SSL connections against a PostgreSQL server from an Elixir application.

DEVELOPMENT Android Kotlin Tips Development

Autosizing Fonts for Android EditTexts

Transfer Android's TextView autosizing capability to EditTexts

DEVELOPMENT iOS Insights Development

Understanding Fast-Math

What does the -ffast-math optimization really do, and when is it safe to use it?

DEVELOPMENT Testing Productivity Insights Development

A Case for Fast CI

How slow build times lower your team’s productivity, and how to change this.

DEVELOPMENT Web TypeScript Insights Development

Migrating Our Web Codebase from Flow to TypeScript

How we migrated our web codebase from Flow to TypeScript.

DEVELOPMENT iOS Swift Tips Development

Fitting Text into a Bounding Frame on iOS

How to use a binary search algorithm to precisely fit multiline text into a bounding frame on iOS.

DEVELOPMENT Productivity Tips git Development

How to handle stacked PRs on GitHub

This blog post describes how to deal with dependent pull requests on GitHub, as well as the git concepts you need to master to understand them.

DEVELOPMENT iOS Insights Xcode Development

What Is a Deprecated API on iOS?

A look at Apple's API evolution strategy and the effect of the deployment target and base SDK Xcode project settings.

DEVELOPMENT Android Kotlin Jetpack Compose UI/UX Development

Introducing Jetpack Compose Support

The Android PDF SDK you know and love now supports Jetpack Compose!

DEVELOPMENT Web JavaScript Tips Development

Practical Uses of Object URLs

Showcasing different applications of JavaScript object URLs in the browser.

DEVELOPMENT Web JavaScript Insights Development

HTTP Caching 101

...Or, how the cache works on your browser.

DEVELOPMENT Android Productivity git Development

Refactoring Git Branches with Interactive Rebase and Autosquash in Android Studio

A primer on using Git's interactive rebase feature, and how to use it within Android Studio to housekeep commits.

DEVELOPMENT PDF C++ Development

How to Save Custom Data in Image Files

Image files hold more than just images, and in this post, you'll learn how to save custom data in them.

DEVELOPMENT PDF UI/UX Insights Development

What Is Text Shaping and Why Do We Do It?

Some text in some languages requires text shaping to render correctly. This will explain a little about what exactly that is.

DEVELOPMENT Productivity Testing Insights Development

Managing CI Pipelines with Terraform

Learn about Terraform and how we use it to manage our Buildkite pipelines.

DEVELOPMENT iOS Swift Testing Tips Development

Swift Render Tests in Practice — Part III

How to automate regenerating and updating reference images for render tests.

DEVELOPMENT iOS Swift Testing Tips Development

Swift Render Tests in Practice - Part II

How to improve test failures with attachments and grouping related test output.

DEVELOPMENT iOS Swift Testing Tips Development

Swift Render Tests in Practice - Part I

How to pragmatically approach render testing for custom drawing code.

DEVELOPMENT iOS Objective-C Debugging Insights Development

Reverse Engineering UIKit to Fix Our Top Crash

This blog post describes the process of reverse engineering UIKit to identify and fix our top crash in PSPDFKit for iOS.

DEVELOPMENT iOS Testing Xcode Development

Automating Test Retries

We walk through our experience of dealing with flaky tests by automatically retrying them.

DEVELOPMENT iOS Swift Tips Debugging Development

Debugging Image Loading and Cropping Performance on iOS

We talk about using the Image I/O and Core Graphics APIs to improve the image loading and cropping performance in the PSPDFKit iOS SDK.

DEVELOPMENT Signing PDF Debugging Support Development

How We Debugged a Customer Problem with a Signed PDF

This blog post details how the PDF expertise of the PSPDFKit team helped unblock a customer with a tricky PDF problem.

DEVELOPMENT Server JavaScript Testing Development

Load Testing PSPDFKit Server

How we figured out what it takes to run PSPDFKit Server.

DEVELOPMENT Flutter Productivity git Insights Development

How We Maintain Our Public Flutter Project Using a Private Monorepo

We describe the process taken to speed up the maintenance, development, and release cycle of our public Flutter project.

DEVELOPMENT Android Kotlin Development

Avoiding Primitive Type Saturation in Kotlin

Enough of fun getString(string: String): String – let's make greater use of Kotlin's powerful type system.

DEVELOPMENT C++ Insights Development

CMake Presets in Practice

What CMake presets are and why PSPDFKit hopes to use them more.

DEVELOPMENT iOS Productivity How To Development

Automating Mac Catalyst Distribution with fastlane

We recently automated PDF Viewer for Mac distribution via fastlane. Here’s how you can do the same for your Mac Catalyst app.

DEVELOPMENT PDF Insights Development

Optimizing PDFs for Printers

How to make sure your users get a good experience when your PDF is printed.

DEVELOPMENT Android Web Testing UI/UX Insights Development

Why Should You Care about Manual Testing?

How to approach manual testing pragmatically for quality products you can be proud of.

DEVELOPMENT PDF Tips Performance Insights Development

How a B-Tree Helped Reduce Memory Usage in Our Framework

This blog post describes the approach we took to save around 15 percent of memory in our framework by first identifying bottlenecks, and then changing one of our dictionary implementations to use a specialized data structure known as a B-tree.

DEVELOPMENT Web Insights Development

A brief tour of multipart requests

Learn how multipart requests enable the transfer of multiple types of data, including files, over the internet in a single HTTP request.

DEVELOPMENT PDF Components Insights Development

Why PDF Uses Floats and Word Uses EMUs

This post explores and gives examples of the units of length in Word documents.

DEVELOPMENT PDF Development

What Contributes to Slow PDF Rendering?

We briefly cover how PDF rendering works and some reasons why rendering a PDF can be slow.

DEVELOPMENT SwiftUI iOS Development

SwiftUI In Production

We recently shipped a major new feature in SwiftUI while still supporting iOS 12 in our SDK. Here's what we learned.

DEVELOPMENT Web Docker Insights Development

Server Development on Apple Silicon

A short post about the experience of using an M1 MacBook for working on our Server product.

DEVELOPMENT Web Docker Server Insights Development

Our Journey to ARM

A recollection of the events that led to PSPDFKit supporting ARM for our server-based products.

DEVELOPMENT Web Tips Debugging Insights Development

How to Identify Browser Bugs

Strategies to adopt for identifying browser bugs, and what to do after spotting one.

DEVELOPMENT PDF C++ PDFium Development

Tackling PDF Performance Issues

Digging into the internals of PSPDFKit to improve PDF performance.

DEVELOPMENT Web Server Elixir Tips Development

The Perils of Large Files in Elixir

A post about dealing with large files in Elixir applications.

DEVELOPMENT iOS Swift Tips Development

Streams of Cocoa: Why It's Still Worth Knowing NSStream

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.

DEVELOPMENT C++ Tips Insights Development

String Literals, Character Encodings, and Multiplatform C++

How string literals are encoded by Clang and MSVC.

DEVELOPMENT Web JavaScript Performance Development

Frontend Performance Enhancements at PSPDFKit

A short article about the principles of performance improvements at PSPDFKit.

DEVELOPMENT iOS macOS Insights Development

Advances in XCFrameworks

With Xcode 12, Apple improved the XCFramework format, which unlocks great new capabilities.

DEVELOPMENT iOS Swift Objective-C Xcode Testing Development

Deflaking CI Tests with xcresults

We’re sharing some techniques for tracking down and fixing flaky Xcode tests on CI.

DEVELOPMENT iOS Swift Tips SwiftUI UI/UX Accessibility Development

Keyboard Navigation in SwiftUI

SwiftUI wasn’t built with keyboard support in mind, and it shows. Learn how you can rewrite keyboardShortcut to work with iOS 13 and access the underlying navigation controller to pop views on ⌘-Left Arrow.

DEVELOPMENT iOS Swift SwiftUI Tips Development

Using the SwiftUI ColorPicker on iOS and macOS

While macOS has offered a system-provided color picker since OS X 10.0 Cheetah, iOS developers had to wait a bit longer. Let's take a closer look at the new ColorPicker (SwiftUI) and UIColorPickerViewController (UIKit) controls.

DEVELOPMENT iOS Testing Development

Continuous Integration: From Jenkins to Buildkite

Learn why we moved from Jenkins to Buildkite, what the current most promising services are, and how we evaluated them.

DEVELOPMENT iOS Testing Development

Automating macOS Provisioning with Chef

Learn how to use Chef to automatically provision macOS machines for CI: infrastructure as code

DEVELOPMENT Processor Web Server Development

A Primer on JSON Web Tokens

What JWTs are, how they work, and how we use them at PSPDFKit.

DEVELOPMENT C++ Tips Debugging Development

Time Travel Debugging for C/C++

A quick look at reverse debugging/time travel debugging for C/C++.

DEVELOPMENT Web JavaScript Insights Development

Keeping Up with JavaScript Pointer Events

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.

DEVELOPMENT Android Kotlin Insights Development

How Updating to Kotlin 1.4 Broke Our Linter Rules

How the update to Android Gradle plugin 4.1 and Kotlin 1.4 can break custom linter rules, and how to fix it.

DEVELOPMENT iOS Testing Development

Managing macOS Hardware: Virtualization or Bare Metal?

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.

DEVELOPMENT iOS Testing Development

Continuous Integration for Small iOS/macOS Teams

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.

DEVELOPMENT Python Testing Development

Executable API Documentation with the LLVM Integration Tester and FileCheck

This post covers what executable documentation is and how you can use the LLVM Integration Tester to create it.

DEVELOPMENT git PDFium Insights Open Source Development

Updating Complex Forked Projects

This blog post explains all the steps we take to stay up to date with PDFium at all times.

DEVELOPMENT iOS Swift Tips Development

Caching file downloads with URLCache in Swift

Apple has a sophisticated caching system in iOS, which is enabled by default. However, documentation around URLCache is quite sparse. Today, we'll look at the behavior of caching when dealing with large files.

DEVELOPMENT Tips Productivity Development

Faster Compilation with Ccache 4.0

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.

DEVELOPMENT iOS Swift Tips SwiftUI UI/UX Development

Presenting popovers from SwiftUI

Is there a way to present UIKit popovers from toolbar buttons managed by SwiftUI?

DEVELOPMENT Web WebAssembly Tips Performance Development

Migrating to the New Emscripten LLVM Backend

We share the experience of migrating from the old Fastcomp backend to the new LLVM backend in Emscripten.

DEVELOPMENT Web Accessibility Development

How We're Improving Accessibility on PSPDFKit for Web

Better keyboard navigation and assistive technology support on the latest versions of our Web SDK.

DEVELOPMENT Web JavaScript Performance Insights Development

The Generalized CRUD API of PSPDFKit for Web

An introduction to why and how we designed the brand-new unified CRUD API in PSPDFKit for Web.

DEVELOPMENT Swift Tips Debugging Development

An Introduction to LLDB Reproducers

An introduction to an experimental feature in LLDB, Reproducers, that helps reproduce bugs in the debugger itself.

DEVELOPMENT Web JavaScript WebAssembly Debugging Insights Development

The State of Debugging in WebAssembly

We share our tips and tricks for debugging issues in WebAssembly and look to the future to see what's coming.

DEVELOPMENT Server Insights Development

Monitoring PSPDFKit Server with Metrics

Using data to draw insightful conclusions.

DEVELOPMENT iOS Swift Insights Development

Binary Frameworks as Swift Packages

What we learned from experimenting with binary frameworks as Swift packages in Xcode 12.

DEVELOPMENT PDF.js PDF Insights Development

Evaluating the Render Fidelity of PDF.js

We explore various issues with the render fidelity of PDF.js.

DEVELOPMENT Docker C++ Development

Visual Studio Code, C++, and a Docker Container

Our journey of using Visual Studio Code to develop C++ in a remote container.

DEVELOPMENT iOS Swift Performance Development

Using Metal to Apply Image Filters

An overview of how to use Metal to apply filters to images to perform a simple color inversion on the input image.

DEVELOPMENT C++ Insights Development

C++20 in 2020: Modules

An introduction to the C++20 modules feature: what they are, their potential advantages and disadvantages, and how they are used.

DEVELOPMENT iOS macOS PDF Insights Development

Why Is the PDF Format So Well Supported on Apple Platforms?

Apple has a rich history of supporting the PDF file format, but when and how did its relationship with the PDF format begin?

DEVELOPMENT Tips Productivity git Development

A Better Way to Git Log to Understand Changes in a Big Codebase

How git log information may not be enough when developers need to understand changes in a codebase that has evolved over several years.

DEVELOPMENT iOS Swift UI/UX Insights Development

The Case for Lists in UICollectionView

Exploring the power and flexibility offered by creating lists using UICollectionView.

DEVELOPMENT iOS Swift Debugging Insights Development

The Hidden Trap in Selective Table View and Collection View Reloads

Learn how to properly update cells in a table view or collection view without crashing.

DEVELOPMENT Web PDF Development

How We Created a Real-Time Collaboration Tool Inside a PDF

This blog post takes a peek under the proverbial PDF hood to find out how we developed Instant Comments.

DEVELOPMENT iOS macOS Objective-C Performance Insights Development

Direct Calls with Objective-C

Apple introduced the objc_direct attribute in Xcode 12. Learn what it does and how you can use it to your advantage.

DEVELOPMENT Web JavaScript C++ WebAssembly How To Performance Development

How to use WebAssembly modules in a web worker

A short tutorial showing the use of WebAssembly in a web worker.

DEVELOPMENT iOS macOS Insights Xcode Development

Supporting XCFrameworks

What we learned about XCFrameworks while migrating PSPDFKit to this new format.

DEVELOPMENT iOS Swift Objective-C Insights Development

NULL-Characters in Strings and Tales of Apple Radar

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.

DEVELOPMENT Web JavaScript TypeScript Tips Development

Generate TypeScript Declarations from a Flow Codebase

A short guide on how to generate TypeScript declarations from a Flow codebase.

DEVELOPMENT iOS Swift Tips UI/UX Development

Level Up Your Trackpad Support Using UIInteraction

How to make your iOS app work well with scrolling, secondary clicking and dragging on a trackpad or mouse.

DEVELOPMENT Web Debugging Insights Development

Text Selection Regression in Chrome 83

How we noticed a Chrome regression and shipped a workaround in a timely fashion.

DEVELOPMENT Android Kotlin Tips Productivity Development

Think First, Code Later

A case study on how we design features and APIs for PSPDFKit for Android.

DEVELOPMENT C++ Tips Productivity Development

Best C++ IDEs of 2024

Discover the best C++ IDEs and text editors of 2024. Learn the pros and cons of each tool, from Visual Studio to Vim, and find the right fit for your development needs.

DEVELOPMENT iOS macOS Tips Performance Xcode Development

Automated Profiling Runs in Instruments

Learn how to automate measurement runs with Instruments.

DEVELOPMENT C++ Tips Performance Development

How to Effectively Measure the Performance of Your Code

This blog post explains why software that performs well is important and how we measure code performance at PSPDFKit.

DEVELOPMENT Android Kotlin Tips Productivity Testing Development

How to Reduce Flakiness in Automated UI Testing on Android

This blog post discusses tips and best practices on how to reduce flakiness in automated UI testing on Android.

DEVELOPMENT iOS Objective-C Tips Development

Preventing Surprisingly Large Objective-C Type Encodings

Objective-C stores type encoding in the binary. These encodings can become surprisingly large.

DEVELOPMENT iOS Swift Tips UI/UX Insights Development

Supporting Pointer Interactions

Apple introduced new pointer events in iOS 13.4 to better support trackpad and mouse devices.

DEVELOPMENT C++ Tips Productivity Development

Effective Header Management in C++

How we can reduce build times and clean up our header dependencies with effective header management.

DEVELOPMENT Android Kotlin Tips UI/UX Development

Change Android Themes Instantly Using the Circular Reveal Animation

This blog post investigates how to achieve nice animations when changing themes.

DEVELOPMENT PDF Tips Insights Development

Optimizing PDF File Size

When editing PDFs, they often grow in size, but that doesn't have to be the case. Here's how we optionally optimize for size.

DEVELOPMENT C++ Tips Testing Development

Our Approach to Testing a Large-Scale C++ Codebase

This blog post outlines the frameworks and techniques PSPDFKit uses to test its large-scale C++ codebase.

DEVELOPMENT C++ Tips Performance Development

Investigating the performance overhead of C++ exceptions

C++ exceptions have their place, but using an alternative is recommended for general program flow control.

DEVELOPMENT C++ Tips Performance Development

Compiler-Based Lock Checking in C++

A short introduction to compiler-based lock checking in C++ with Clang using Thread Safety Analysis

DEVELOPMENT Web PWA Insights Development

The State of Progressive Web Apps in 2020

Examining new developments in the PWA landscape that affect mobile and desktop browsers.

DEVELOPMENT C++ Security Insights Development

The C++ Lifetime Profile: How It Plans to Make C++ Code Safer

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.

DEVELOPMENT Tips Productivity git Development

Moving a Git Repository into Its Submodule

How we improved our Git repository setup by moving our PDF Viewer for iOS repository into our PSPDFKit repository.

DEVELOPMENT iOS Swift Objective-C Tips UI/UX Development

Adopting UIAppearance in Custom Views

Learn how to support styling your own custom views using UIAppearance.

DEVELOPMENT Android Java Testing Gradle Development

Filtering Tests in Android

A look at the android.support.test.filters library and what it provides you with.

DEVELOPMENT C++ Insights Development

The Functional Side of std::optional with C++20

std::optional is already really useful, and it's about to get better with C++20.

DEVELOPMENT iOS Tips UI/UX Development

Open Links in Safari, Not Safari View Controller

Why we changed our default for opening web links from SFSafariViewController to the Safari app.

DEVELOPMENT Android Insights Development

Our Journey from Genymotion to the Android Emulator

How we migrated our Genymotion-based CI to an AVD.

DEVELOPMENT Web WebAssembly Development

WebAssembly and Emscripten Chat with Alon Zakai

A chat with Alon Zakai, co-creator of WebAssembly and creator of Emscripten.

DEVELOPMENT Swift C++ Insights Development

Introduction to C++ for Swift Developers

An introduction to the C++ language for Swift developers, with an overview of reasons to use C++ and a look at differences and similarities between the languages.

DEVELOPMENT iOS Swift Objective-C UI/UX Development

Adopting Dark Mode on iOS and Ensuring Backward Compatibility

A comprehensive overview of adopting Dark Mode in an iOS app, along with a few tips to make the process of development easier.

DEVELOPMENT Android Kotlin Tips Accessibility Insights Development

How We Improved Keyboard Navigation Accessibility in Our Android SDK

A look at the steps we took to start improving the accessibility of our Android SDK.

DEVELOPMENT C++ Python Tips Development

Making C++ Talk to Other Languages with SWIG

Using SWIG to generate interfaces to talk to a C++ backend.

DEVELOPMENT Web Docker Containers Tips Development

A beginner's guide to Docker: Import/export vs. load/save commands

A blog post that explains the difference between the Docker import/export and load/save commands.

DEVELOPMENT Android Tips Development

The Android Drag-and-Drop Framework in Practice

Using the Android drag-and-drop framework — from theory to implementation.

DEVELOPMENT Android Java Gradle Insights Development

Understanding the Gradle Build System

In this article, we'll explore the Gradle build system, how it works, and why it is the new standard for building Android projects.

DEVELOPMENT Android iOS macOS Windows C++ Insights Development

Challenges of Using Emojis with C++

In this article, we discuss the challenges of implementing your own custom emoji support in a cross-platform way.

DEVELOPMENT Android Kotlin Java Insights Development

What Is an Intent?

An overview of intents, their uses, and pitfalls to consider.

DEVELOPMENT Android Tips Development

Dealing with Large Memory Requirements on Android

This article provides tips for optimizing memory usage of your apps.

DEVELOPMENT Android Debugging Development

NDK Debugging

A set of tips for debugging native NDK code in Android apps.

DEVELOPMENT Android Kotlin Tips Development

How Do I Fix NetworkOnMainThreadException?

A post detailing what NetworkOnMainThreadException is and how to prevent it.

DEVELOPMENT Android iOS Web PDF Development

The Role of PSPDFKit as a PDF Processor

How we fit into the PDF landscape.

DEVELOPMENT Android Java Tips Development

Performance Evaluation of Linked Lists

Today we'll delve into the performance evaluation of linked lists, a controversial topic among many experienced developers, and try to understand why they trigger a warning in the Error Prone report.

DEVELOPMENT Web React JavaScript Insights Development

React Redux's New Features

An overview of React Redux's seven new features in action.

DEVELOPMENT Windows Tips Development

How to Await an Async Event Handler Delegate in UWP

Asynchronous programming is hard, and the WinRT interface poses further issues. Learn how to implement a deferral to wait on a user action before completing additional work.

DEVELOPMENT Web JavaScript Tips Development

Smoother Interactions on the Web: getCoalescedEvents()

How to use the getCoalescedEvents() method of the PointerEvent API to improve the precision of drawing apps or of any web application.

DEVELOPMENT iOS Swift Tips Development

Making a Resource Thread-Safe with Locks

We discuss how to ensure thread safety and synchronization via locking.

DEVELOPMENT C++ Tips Debugging Development

When C++ Doesn't Move

C++ move semantics make your code more efficient, but sometimes a move is not performed. In this blog post, we explore why.

DEVELOPMENT Android Tips Development

The Soft Keyboard on Android

Tips for working with the soft keyboard on Android.

DEVELOPMENT iOS Swift Tips Development

Swizzling in Swift

A quick crash course on how to swizzle correctly, and how to do it in Swift 5.1

DEVELOPMENT iOS Swift PDF Tips Development

Working with PDF Metadata in Swift

How and what metadata can be stored in a PDF, and how to programmatically work with this information.

DEVELOPMENT Android Kotlin Tips Development

Retaining Objects Using a Fragment

An overview of how to use a fragment to retain objects during a configuration change.

DEVELOPMENT Android Java Tips Insights Development

Problems with Nullability Annotations

A look at some issues with Android's nullability annotations and how to fix them.

DEVELOPMENT Culture Productivity Insights Development

WWDC for First-Timers, 2019 Edition

Here's how to get the most out of Apple's Worldwide Developer Conference.

DEVELOPMENT macOS Tips Insights Development

How Xcode Indexing Works and How You Can Fix IDE Problems with Your Projects

This post provides an overview of how the code assistance feature in Xcode works and how you can debug code assistance problems in your projects.

DEVELOPMENT Android Tips Development

Understanding Android Dimensions

A post about existing Android dimensions, their purpose, and common conversion rules.

DEVELOPMENT Android Gradle Development

Gradle Task Configuration Avoidance in Android Builds

An overview of Gradle's task configuration avoidance APIs and how they are used by the Android build system.

DEVELOPMENT Windows UWP C# C++ Tips Development

How to Use Native C++ in UWP

How to include native C++ in your UWP app and call into it from C#.

DEVELOPMENT Android Tips Development

How to Use Android App Bundles

This blog post explains what Android App Bundles are and how to upload them to Google Play.

DEVELOPMENT PDF Insights Development

Understanding the difference between bookmarks and the outline in a PDF

Bookmarks vs. outline elements: Not everything is what it seems.

DEVELOPMENT Tips Development

The Many Benefits of Using a Monorepo

A monorepo? Isn't that just a weird Facebook and Google thing? Why is PSPDFKit using a monorepo?

DEVELOPMENT Android Kotlin Insights Development

Kotlin Coroutines

A look at Kotlin coroutines and how they compare to other solutions for concurrency.

DEVELOPMENT iOS Insights Development

The Bittersweet iOS Document Browser

A quick look at both the benefits and downsides of using the iOS system document browser in your applications.

DEVELOPMENT Web Debugging Development

Debug Emscripten with the Tracing API

How to debug memory usage in an Emscripten app.

DEVELOPMENT Web Docker PDF Development

Preparing My Tax Return with Apache PDFBox, Docker, and Make

How I combined Apache PDFBox, Docker, and Make to streamline my tax return workflow.

DEVELOPMENT Android Java Development

Java 8 in Android Apps

This article explains how to enable Java 8 features in an Android app and gives an overview of the available Java 8 features.

DEVELOPMENT Android Java Tips Development

Handling Nullability in Your Code

A brief excursion into the Java type system, nullability, and remedies for the billion-dollar mistake.

DEVELOPMENT iOS Objective-C Insights Development

Embracing the Limits of UIActivityViewController

We talk about our experience in implementing the new sharing flow.

DEVELOPMENT Android Kotlin Tips Jetpack Compose Development

Using ViewModels to Retain State on Android

How to use Android's ViewModel class to retain complex objects across configuration changes.

DEVELOPMENT iOS Swift Insights Development

PSPDFKit and Swift

Will PSPDFKit for iOS move to Swift? In this post, we weigh the pros and cons.

DEVELOPMENT iOS Swift Tips Debugging Development

Adding Logging to Crash Reports

Understanding crash reports is often difficult without extra context. Learn how we attach application logs to crash reports via Google's Firebase Crashlytics in the free PDF Viewer for iOS app.

DEVELOPMENT Android Tips Development

What are configuration changes in Android?

An overview of configuration changes on Android, including best practices for modern development.

DEVELOPMENT Productivity Tips Development

How Spaced Repetition Helps You Learn New Things

We present spaced repetition as a learning technique that can help you be more efficient at work.

DEVELOPMENT Android iOS Windows PDF Tips Insights Development

Incremental and Full Save in PDFs

This article goes into what's involved when incrementally or fully saving a PDF, and why it matters.

DEVELOPMENT Android Kotlin JavaScript React Native Development

Sharing Business Logic Using React Native

Not only can React Native be used to provide the UI for your application, but it is also a convenient way to share business logic.

DEVELOPMENT Android Debugging Development

Android Debug Bridge Tricks and Tips

An introduction to Android Debug Bridge (adb) and an overview of some tricks.

DEVELOPMENT Android Kotlin Tips Instant Development

How to Test REST API Clients in Android Apps

This article shows how we built simple and flexible integration tests for PSPDFKit Instant that are using a custom abstraction layer on top of an OkHttp mocked web server.

DEVELOPMENT Tips Development

What Is Ninja Refactoring, and When Should You Consider Doing It?

Tips and best practices for code refactoring.

DEVELOPMENT Android Java Tips Development

Saving the Activity State

An overview of how to make sure your activity state is saved.

DEVELOPMENT iOS macOS Swift Objective-C Tips Development

Writing and Maintaining Good Code Documentation

Tips, tricks, and techniques for documenting your code the correct way.

DEVELOPMENT iOS Windows UWP C# Insights Development

UWP for iOS Developers

A brief introduction to Universal Windows development for iOS developers.

DEVELOPMENT Android Kotlin Tips Development

Using the Bottom Navigation View in Android

An introduction to implementing bottom navigation in your app with a simple example that incorporates synced page switching as well.

DEVELOPMENT C++ Tips Insights Development

Visual Studio Code for C++

How to use Visual Studio Code for C++ development.

DEVELOPMENT Android Tips Debugging Development

Inspecting APK Files

This article discusses the basics of Android reverse engineering using the Apktool, smali, and Java decompilers.

DEVELOPMENT iOS Swift Objective-C Insights Development

Self-Sizing Table View Cells in Practice

A look at self-sizing table view cells for apps supporting iOS 10, 11, and 12, covering three implementation approaches and some pitfalls I encountered supporting these across our UI in PSPDFKit.

DEVELOPMENT Web Ruby PDF Development

Generating PDFs with Ruby: 2018 Edition

This post surveys the Ruby landscape in 2018 to evaluate the current state-of-the-art of generating PDFs with Ruby.

DEVELOPMENT Android Development

External storage permissions on Android

An exploration of how permissions work, starting from a high level and working down to the lower lever managed by FUSE, the native Android module that interacts with the file system.

DEVELOPMENT Android Tips Development

How to Increase the Logcat Buffer Size

Don't lose your logs. Increase your logcat buffer!

DEVELOPMENT PDF Development

Understanding Images in PDF

We take a look at how images are stored in a PDF and discuss some important things to know about them.

DEVELOPMENT Elixir How To PDF Development

How to generate PDFs with Elixir

In this blog post, we'll look at an example of how to generate PDFs with Elixir.

DEVELOPMENT iOS Swift C++ Open Source Tips Development

Tips and Tricks for Contributing to the Swift Language

This post describes the process for contributing code to the Swift programming language, including how to propose changes to the language, write a pull request, address feedback, and make your code part of the next version of the language.

DEVELOPMENT iOS Swift Objective-C Performance Development

Using Signposts for Performance Tuning on iOS

A look at the different ways that we measure and try to improve performance at PSPDFKit.

DEVELOPMENT iOS Tips Development

Creating an Efficient App Store Screenshot Workflow

A look at how we generate our screenshots for the iOS App Store.

DEVELOPMENT Productivity Development

Time Management

A discussion of how managing time by incorporating productivity techniques, making lists, planning your days, and finding ways to utilize downtime can help with your workflow.

DEVELOPMENT iOS Insights Development

iOS HEIC Performance

We evaluate the encoding and decoding performance of HEIC.

DEVELOPMENT Android Testing Development

Rendering Tests Using Robolectric

Rendering tests using Robolectric with a custom bitmap shadow.

DEVELOPMENT PDF Development

PDF syntax 101: Understanding PDF Object Types

An overview of the internal structure of a PDF.

DEVELOPMENT iOS Objective-C Insights Development

Challenges of Adopting Drag and Drop

A recap of how we integrated drag-and-drop support into our Document Editor in iOS.

DEVELOPMENT Android Kotlin Insights Development

What are Kotlin contracts and how are they useful?

An overview of the experimental Kotlin Contracts API.

DEVELOPMENT PDF Insights Development

What’s Hiding in Your PDF?

PDFs hold information you may not know about. Discover different forms of metadata and where to look for them.

DEVELOPMENT Android Tips Development

Using paths to draw shapes with borders

How to use a flexible path API to draw complex shapes with borders.

DEVELOPMENT Tips Development

Running multiple instances of a service with Docker Compose

Learn how to efficiently run multiple instances of a service using Docker Compose. This guide covers configuration examples, load balancing with NGINX, and best practices for local development.

DEVELOPMENT Productivity Development

Using clang-tidy and integrating it in Jenkins

The benefits of using clang-tidy and how to get started setting it up in Jenkins.

DEVELOPMENT iOS Tips Development

Refactoring Large Codebases: Tips and Tricks

If you're going to fall down a rabbit hole anyway, you might as well enjoy it!

DEVELOPMENT iOS Tips Development

Improving Dynamic Type Support

How to improve Dynamic Type support in your app and bring it to the next level.

DEVELOPMENT Web React Accessibility Development

Building Accessible Modals with React

In this blog post, we will look at some simple solutions that we use at PSPDFKit to make our modals more inclusive and accessible.

DEVELOPMENT iOS Debugging Tips Development

How to Extend LLDB to Provide a Better Debugging Experience

Explore the extensibility capabilities of LLDB, a debugger for Swift, C, C++, and Objective-C code.

DEVELOPMENT Web PWA Performance Open Source Development

PWA — Progressive Web Applications

PSPDFKit for Web and Progressive Web Applications: an open source example and guide.

DEVELOPMENT iOS macOS Insights Development

Marzipan: Porting iOS Apps to the Mac

With macOS Mojave, Apple is adding support to bring apps written in UIKit to macOS without the requirement of having to rewrite the UI in AppKit. This is not yet officially supported — this post will explore what we can expect in 2019 and how you can use Marzipan today.

DEVELOPMENT iOS Insights Development

The Challenges of Changelogs

How we handle changelogs at PSPDFKit and the tools we built to help us with this.

DEVELOPMENT Tips Development

Naming Is Hard — Difficulties of Naming Variables

Is naming a variable so hard? According to Martin Fowler, it is. In this blog post, I'll try to shed some light on what naming entails and why it's a challenge.

DEVELOPMENT Tips Development

Naming Classes — Why It Matters, and How to Do It Well

Tips for choosing good class names.

DEVELOPMENT Elixir Tips Development

How to Parse XML Documents in Elixir

A tutorial on how to parse XML documents in Elixir.

DEVELOPMENT PDF Signing Security Development

Protecting PDF Documents

Password-based security for PDF documents.

DEVELOPMENT UWP Windows Tips Development

Debugging WebView in UWP Apps with Edge DevTools

We show how a developer can use Edge DevTools to debug a WebView in a UWP app.

DEVELOPMENT Android RxJava Kotlin Tips Development

RxJava for Multi-Level Data Retrieval

RxJava can be useful for many things, and in this post, we’ll have a look at how to use it to add offline support to your app.

DEVELOPMENT Productivity Development

Switching to a Standing Desk

We discuss some of the benefits of switching to a standing desk.

DEVELOPMENT Elixir Tips Development

Database Transactions with Ecto

How to use database transactions and Ecto.Multi in Elixir

DEVELOPMENT Web Tips Development

Immutable.js and Lazy Evaluation

A short introduction to Immutable.js and how lazy operations improve performance and readability of your code.

DEVELOPMENT Tips Development

Modern CMake Tips

There are better ways to write CMake scripts.

DEVELOPMENT Ruby Testing Development

Adding Spellchecking to Your Tests

How we added simple spelling and grammar checks to our website build process to catch some common mistakes.

DEVELOPMENT Flutter Android iOS Insights Development

How I Got Started with Flutter

A short review of Flutter from a mobile developer’s standpoint.

DEVELOPMENT Elixir Tips Development

How to Build a Back-Pressure Queuing System in Elixir with sbroker

Tutorial on how to set up a back-pressure queuing system in Elixir with sbroker.

DEVELOPMENT Web JavaScript Tips Development

An Introduction to Stimulus.js

In this article, we'll look at the Stimulus JavaScript framework and how it can help bring some order to a website's frontend codebase.

DEVELOPMENT Android Kotlin Tips Development

Moving Your Gradle Build Scripts to Kotlin

Another take on writing your project's Gradle build files in pure Kotlin code.

DEVELOPMENT Web WebAssembly Performance Development

A real-world WebAssembly benchmark

A WebAssembly benchmark for browser vendors to test a real-world production application.

DEVELOPMENT iOS Swift Insights Development

Smart Grid Sizing

How PSPDFKit is smart about choosing thumbnail sizes.

DEVELOPMENT Android Tips Development

Tips for Designing an Android Library

We take a look at some of the things you should keep in mind when designing an Android library.

DEVELOPMENT Open Source Development

Reviewbot

Reviewbot posts GitHub pull requests that are ready to be reviewed into Slack. How does it know when a pull request is ready? We have a special label in our repositories, named `READY TO REVIEW`.

DEVELOPMENT PDF Annotations Development

Line Annotations in PDF

Line annotations are one of the most frequently used annotation types, and they are ideal for things like drawing attention to important areas of your document, diagramming the process flow, and decoration.

DEVELOPMENT Android Insights Development

Rendering PDF Previews

An overview of how to render PDF previews.

DEVELOPMENT iOS Insights Development

Advances in Auto Layout

An overview of how Auto Layout has changed in recent years and how to best use it.

DEVELOPMENT Android Java Kotlin Tips Development

Async Stacktraces in Android Studio

How to create asynchronous stacktraces in Android Studio and IntelliJ.

DEVELOPMENT iOS Insights Development

Understanding Smart Punctuation on iOS: Impact on string handling in apps

Explore how iOS's Smart Punctuation feature transforms straight quotes into curly quotes and modifies hyphens into dashes. Learn its implications for developers in string handling, UI tests, and input management within UIKit controls.

DEVELOPMENT PDF Insights Development

What Are Appearance Streams?

An explanation of what appearance streams actually are, along with their gotchas.

DEVELOPMENT Android RxJava Kotlin Insights Development

RxJava Is Async yet Blocking

An explanation of why RxJava is both asynchronous and blocking.

DEVELOPMENT Tips Development

How to Manage Multiple System Configurations Using Docker Compose

This blog post is a short introduction to Docker Compose and will explain how we use it to manage different system configurations that are built off the same base configuration.

DEVELOPMENT Android Debugging Productivity Development

The Subtle Art of Real-Time Debugging With Android Studio

Debugging in real time with Android Studio.

DEVELOPMENT Android Tips Development

Hints for Beginners Navigating Around New Code

We share some tips on how to navigate a new codebase.

DEVELOPMENT iOS Android C++ Objective-C Development

Failable Methods with Djinni

In this article, we have look at using result types to model failable computations in the Djinni IDL.

DEVELOPMENT Tips Development

Using webpack with Middleman

We explain how to integrate Middleman and webpack to boost your frontend productivity.

DEVELOPMENT iOS Tips Development

Leveraging SQLite Full-Text Search on iOS

We look at SQLite’s FTS extension and how you can use it to add high performance search to your app.

DEVELOPMENT PDF Tips Forms Development

Forms in PDF

Forms provide a simple yet flexible way to gather data from users.

DEVELOPMENT iOS Insights Development

UICollectionView All the Things!

`UICollectionView` is now at the heart of every document. This blog post talks about why and how we rewrote our view hierarchy.

DEVELOPMENT Android Kotlin Insights Development

Using Kotlin to Make the PSPDFKit API Even Better

Kotlin provides the ability to extend any class with new functionality, and we can use this to expand the PSPDFKit API.

DEVELOPMENT Android Performance UI/UX Development

Rendering PDFs on Android

How to handle rendering large amounts of bitmaps and maintain a slick UX while doing it.

DEVELOPMENT Web WebAssembly Development

Optimizing WebAssembly Startup Time

Four simple yet effective solutions we currently employ in PSPDFKit for Web to reduce WebAssembly startup time.

DEVELOPMENT Elixir Tips Development

How to Run Your Phoenix Application with Docker

We’re taking a look at how to run Elixir applications within a Docker container, and how that can simplify the setup of development and deployment environments.

DEVELOPMENT Android Productivity Tips Development

Android Studio Shortcuts: How to Boost Your Productivity

The best shortcuts for Android Studio. The most famous and the most underrated.

DEVELOPMENT iOS Swift Insights Development

Binary Frameworks in Swift

ABI? Module stability? What does binary stability mean, and how will it affect you?

DEVELOPMENT Android Kotlin Insights Development

Simple Kotlin Tips for Beginners

Useful tricks for beginners to start writing better code with Kotlin.

DEVELOPMENT PDF Insights Annotations Development

Understanding PDF Annotations: Their Types and Uses

Discover everything you need to know about PDF annotations, their types, and how they function in PDFs. Learn how Nutrient makes managing these annotations simple with its robust annotation model.

DEVELOPMENT PDF Development

How to Extract Text from a PDF

Discover effective methods for extracting text from a PDF and learn how PSPDFKit simplifies this process.

DEVELOPMENT iOS UI/UX Insights Development

Adopting Drag and Drop on iOS

Utilizing the new Drag and Drop feature in iOS 11, and how we integrated it to enhance the user experience.

DEVELOPMENT Android RxJava Open Source Development

Make Android Animations Reactive with VanGogh

Android view animations powered by RxJava 2.

DEVELOPMENT iOS Insights Development

Challenges of Supporting iPhone X

Tips and tricks for adding support for the iPhone X in PSPDFKit.

DEVELOPMENT iOS Swift Instant Tips Development

How to use iOS Data Protection (updated for iOS 17)

How apps can use iOS Data Protection to secure their files.

DEVELOPMENT iOS React Native Swift JavaScript Development

Native View Controllers and React Native - It Just Works™

DEVELOPMENT Web JavaScript WebAssembly Development

WebAssembly: A New Hope

What is WebAssembly, and what does it mean for the web?

DEVELOPMENT Android Kotlin Java Security Development

Secure Media Playback on Android

Picking smart defaults with security in mind when playing videos on Android.

DEVELOPMENT iOS Debugging Xcode Development

User Breakpoints in Xcode

User breakpoints are a not very well known feature in Xcode but they are very powerful and can improve your debugging experience and show issues more prominent.

DEVELOPMENT iOS Swift Objective-C Development

Even Swiftier Objective-C

DEVELOPMENT C++ Objective-C Java JavaScript Tips Development

Linting and Code Formatting at PSPDFKit

How we do code formatting in C++/Objective-C/Java/JavaScript

DEVELOPMENT Android Java UI/UX Development

50 Shaders of Android: Drawing on Canvas

Low-level drawing and animation on Android using Canvas and powerful Shader classes.

DEVELOPMENT iOS Android Tips UI/UX Development

Creating Better User Experiences with Animations and Lottie

Improving an app’s User Experience made easy by adding animations powered by Lottie.

DEVELOPMENT Web Elixir Testing Development

How We Test and Generate Interactive CSS Documentation

Automating CSS testing and documentation with Hound and Webdriver

DEVELOPMENT iOS Objective-C Xcode Development

Internationalization - Right to Left Support for Mobile Apps

What Right to Left Support Actually Means and How We Implemented It

DEVELOPMENT Android Kotlin RxJava Tips Development

Writing Concise Code with Kotlin and RxJava

Tips and tricks how to write readable, concise, and beautiful code using the Kotlin language and RxJava.

DEVELOPMENT Web React Tips Development

How to build a freehand drawing using React

Learn how to build a freehand drawing app with React and SVG. Follow our step-by-step guide for a seamless development experience.

DEVELOPMENT Culture UI/UX Development

Everybody Designs: An Agile Approach to Design

How PSPDFKit uses an agile approach for design work

DEVELOPMENT Android Tips Debugging Development

How to Fix a Bug, Blindfolded.

This is a story about fixing a bug, even when all the tools go kaput.

DEVELOPMENT iOS Objective-C Tips Development

The Struggle with Action Extensions

Pitfalls when developing a Share or an Action Extension

DEVELOPMENT iOS Swift Objective-C Insights Development

The Case for Deprecating UITableView

DEVELOPMENT iOS Insights Development

Creating a Compelling Today Widget

Best Practices on Developing a Today Widget

DEVELOPMENT Android iOS Objective-C C++ Development

Super Fast Builds Using distcc

How to dramatically shorten your build times with distcc.

DEVELOPMENT macOS Insights Development

Chef on macOS

DEVELOPMENT iOS Tips Development

Hiding Your Action and Share Extensions In Your Own Apps

DEVELOPMENT Android Kotlin Java Tips Development

A clean status bar with Android System UI and QuickDemo

How to enable Android's demo mode using a quick setting tile

DEVELOPMENT Android Java Kotlin Development

Restoring State in Android MVP Architecture

State restoration is an important part of the Android framework, but we might encounter problems with it when implementing MVP architecture.

DEVELOPMENT iOS Android Testing Development

Running Tests with Clang's AddressSanitizer

Clang has powerful sanitizers that are incredibly useful, so we collected our experiences using them between iOS, Android, and our C++ core to help you through some gotchas.

DEVELOPMENT Android Kotlin RxJava Tips Development

Android animations powered by RxJava

The purpose of this post is to show you how to combine RxJava features with animations on Android to create a great user interface without a lot of nested code.

DEVELOPMENT React Native JavaScript Development

PSPDFKit 💖 React Native

DEVELOPMENT iOS Debugging Tips Development

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 are only interested in a very particular one. This can become very tedious work.

DEVELOPMENT iOS Debugging Tips Development

Writing Good Bug Reports

At PSPDFKit, we work every day to read through developers' bug reports. In fact, we forward many of them to the engineers at Apple. While this post is Apple-centric, many details can be applied to any sort of bug reporting.

DEVELOPMENT Insights Development

Real-time collaboration, Apple, and you

Apple recognizes that real-time collaboration is necessary and so do we. Here's how PSPDFKit is upgrading your ability to work with teams.

DEVELOPMENT iOS Objective-C Tips UI/UX Development

Spicing up status messages

At PSPDFKit, we likely spend just as much time polishing the UI as we do implementing PDF features or tweaking the performance. Here's a look at how one of our developers explored improving our status messages.

DEVELOPMENT PDF Debugging Insights Development

Just a simple bookmark

When books became digital, bookmarks became more complicated. Instead of stuffing a piece of paper in a book, you now had to store a digital marker, which is not always as simple as it looks.

DEVELOPMENT iOS Testing Development

Converting Xcode Test Runs to JUnit, the Fast Way

DEVELOPMENT iOS Tips Development

Preventing Popovers on Popovers

DEVELOPMENT iOS Tips Development

Efficient iOS Version Checking

DEVELOPMENT iOS Debugging Development

Investigating Thread Safety of UIImage

DEVELOPMENT Instant Testing Development

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

DEVELOPMENT Web Instant Elixir Testing Development

Testing HTTP APIs in Elixir

DEVELOPMENT iOS Swift Objective-C Insights Development

Swifty Objective-C

DEVELOPMENT Testing Tips Development

Selective Pull Request Testing

DEVELOPMENT iOS Testing Development

Continuous iOS Code Coverage With Jenkins and Slather

DEVELOPMENT Android Java UI/UX Tips Development

Keyboard Handling on Android

DEVELOPMENT iOS Performance Testing UI/UX Development

Running UI Tests on iOS With Ludicrous Speed

DEVELOPMENT iOS Tips Development

Adding live search to Jazzy docs

DEVELOPMENT Android Kotlin Development

Kotlin-Ready Online Guides

Our Guides received a large update – now with Kotlin usage examples.

DEVELOPMENT Insights Development

A pragmatic cross-platform approach

DEVELOPMENT iOS Tips Debugging Development

Debugging Rotation Issues

Discover how we resolved a freezing issue in our Document Editor app after rotation, ensuring smooth user interaction and event handling.

DEVELOPMENT iOS Swift Objective-C Insights Development

Surprises with Swift Extensions

DEVELOPMENT Android Insights Development

The curious case of Android premultiplied alpha

DEVELOPMENT iOS Insights Development

Presentation Controllers and Adaptive Presentations

DEVELOPMENT iOS Productivity Insights Development

Using Ccache for Fun and Profit