Archive

2025

2024

Illustration: Cryptography standards for PDF digital signatures SDK DEVELOPMENT Digital Signatures Development Cryptography standards for PDF digital signatures Learn about key cryptography standards ensuring secure and authentic PDF digital signatures. Illustration: Customizable SwiftUI toolbar API for developers SDK DEVELOPMENT iOS Swift Insights Development Customizable SwiftUI toolbar API for developers Discover how to enhance your iOS SDK with a customizable SwiftUI toolbar, allowing intuitive button management and improved PDF viewing. Illustration: Top 5 document viewers for developers SDK 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. Illustration: Top JavaScript PDF libraries for PDF generation and manipulation SDK 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. Illustration: Automating Agile Stand-Up Ceremonies with Python Scripts SDK 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. Illustration: Dark and Tinted Alternative App Icons SDK 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. Illustration: Structure Padding in C++ SDK 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. Illustration: Top 10 libraries in 2025 for generating PDFs in Python SDK DEVELOPMENT Python PDF Generation Tips Development Top 10 libraries in 2025 for generating PDFs in Python Looking for the best way to create PDFs in Python? This guide explores 10 powerful libraries for PDF generation, covering both open source and premium solutions. Learn how to generate PDFs from HTML, images, or raw data, whether for simple documents, complex layouts, or enterprise needs. Illustration: Technological advancements and software sustainability SDK DEVELOPMENT Insights Development Technological advancements and software sustainability Explore the impact of rapid tech changes on software development, highlighting key challenges and strategies for maintaining quality and sustainability. Illustration: WebAssembly for high-performance document tasks SDK DEVELOPMENT WebAssembly JavaScript Web Document Processing Development WebAssembly for high-performance document tasks Discover how WebAssembly enhances document processing speed and efficiency directly in JavaScript applications. Illustration: Drag-to-reorder with Jetpack Compose SDK DEVELOPMENT Android Jetpack Compose Development Drag-to-reorder with Jetpack Compose Learn to implement drag-to-reorder functionality in Jetpack Compose with a custom modifier for smooth user interactions. Illustration: Top 10 ways of converting HTML to PDF SDK 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. Illustration: Investigating a dynamic linking crash with Xcode 16 SDK 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. Illustration: Room database for Kotlin Multiplatform projects SDK DEVELOPMENT iOS Android Room Kotlin Multiplatform Tips Development Room database for Kotlin Multiplatform projects Learn how to seamlessly integrate the Room database into Kotlin Multiplatform projects for local data management. Illustration: NSCopying in a Swift world SDK 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. Illustration: Generating API documentation for multiple targets with DocC SDK 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. Illustration: Privacy Manifests and Required Reason APIs on iOS SDK 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. Illustration: Apple’s Vision of Our Digital Future SDK 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.

2023

Illustration: Debugging in iOS: Resolving UITextView flickering issues SDK DEVELOPMENT iOS Insights Debugging Tips Development Debugging in iOS: Resolving UITextView flickering issues A debugging story that includes some tips and tricks Illustration: Using Asset Catalogs for Images SDK DEVELOPMENT iOS Swift Tips Development Using Asset Catalogs for Images We discuss the various features of asset catalogs relating to images. Illustration: Supported Annotation Flags in the PDF Spec and PSPDFKit SDK 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. Illustration: Extracting Key-Value Pairs Using GdPicture.NET SDK SDK DEVELOPMENT .NET Development Extracting Key-Value Pairs Using GdPicture.NET SDK A comprehensive introduction to extracting key-value pairs with GdPicture.NET SDK. Illustration: Kotlin Non-Nullable Pitfall SDK DEVELOPMENT Kotlin Android Development Kotlin Non-Nullable Pitfall Under what circumstances a non-nullable value might be null. Illustration: Adopting UITextInteraction SDK DEVELOPMENT iOS Swift Insights Development Adopting UITextInteraction Learn how to add UITextInteraction to a custom text input element on iOS, iPadOS, and macOS. Illustration: How to Access Native Code from WebView2 with WinAppSDK/WinUI 3 SDK 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. Illustration: Exploring SwiftUI for seamless app development SDK DEVELOPMENT SwiftUI iOS Swift Development Debugging Exploring SwiftUI for seamless app development Read about an engineer's journey using SwiftUI for creating intuitive iOS UI components, enhancing the app development experience. Illustration: Vision Is an Exciting Addition to Apple’s Lineup SDK 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. Illustration: Choosing Your .NET MAUI Document Strategy SDK DEVELOPMENT .NET MAUI Development Choosing Your .NET MAUI Document Strategy Exploring options for leveraging PSPDFKit in your .NET MAUI applications. Illustration: Customizable UI components on iOS using UIKit SDK 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. Illustration: Conditional Compilation for Apple’s Yearly Updates SDK 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. Illustration: Why I Chose Deno to Automate My Summary of the Day SDK 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. Illustration: Developing Mixed-Source Swift Packages SDK 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. Illustration: Understanding Generics in TypeScript: Part 1 SDK DEVELOPMENT Web TypeScript Development Understanding Generics in TypeScript: Part 1 Learn the basics of generics in TypeScript. Illustration: Elixir Idioms for JavaScript Developers SDK DEVELOPMENT JavaScript Elixir Development Elixir Idioms for JavaScript Developers A comparison of the features of JavaScript and Elixir. Illustration: The Challenges of PDF Text Layout SDK DEVELOPMENT PDF Text Internationalization Layout Development The Challenges of PDF Text Layout The process and difficulties involved in laying out text in PDF documents. Illustration: My Engineering Transition from Mobile to Backend SDK DEVELOPMENT Culture Insights Development My Engineering Transition from Mobile to Backend A peek into the process of an engineer switching teams at PSPDFKit. Illustration: Swift's approach to SPI SDK 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. Illustration: How to use Nutrient React Native SDK with Expo SDK DEVELOPMENT React Native Expo How To Development How to use Nutrient React Native SDK with Expo How to use Nutrient React Native SDK with Expo. Illustration: Optimizing annotation drawing performance SDK DEVELOPMENT iOS Swift Tips Development Optimizing annotation drawing performance How we optimized ink annotations and improved performance of several SDK components. Illustration: Run a Flutter App on an Emulator inside Docker SDK 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. Illustration: Systems programming meets modern web development SDK DEVELOPMENT Web C++ Development Systems programming meets modern web development Explore a developer’s transition from systems programming to web development, comparing experiences with TypeScript and traditional programming languages. Illustration: Migrating from Puppeteer to Playwright SDK DEVELOPMENT Web Testing Development Migrating from Puppeteer to Playwright How we migrated from Puppeteer to Playwright in our test suite. Illustration: SourceKit limitations in Swift API docs SDK DEVELOPMENT iOS Swift Objective-C Insights Development SourceKit limitations in Swift API docs Explore how we tackled limitations in SourceKit while improving Swift-first API documentation for PSPDFKit, ensuring better developer experience.

2022

Illustration: A Perfect Gift SDK DEVELOPMENT Culture Productivity Development A Perfect Gift Learn how to modify a mechanical keyboard Illustration: Pairs and triples in Kotlin (and why you shouldn't use them) SDK 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. Illustration: Setting up your Flutter environment, the right way — Part 1 SDK 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. Illustration: Road to Polyglot Development SDK DEVELOPMENT Android Web Development Culture Road to Polyglot Development A blog post outlining my transition to polyglot development for the web. Illustration: How to Handle NDK Crashes SDK DEVELOPMENT Android Support NDK Development How to Handle NDK Crashes Handling NDK crashes when using PSPDFKit for Android. Illustration: Calling .NET Code from Your JavaScript Project SDK 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! Illustration: Kotlin Context Receivers — A Preview SDK DEVELOPMENT Kotlin Android How To Development Kotlin Context Receivers — A Preview A short summary about the upcoming Kotlin feature, context receivers. Illustration: Using the JSON Configuration Format with a Schema Definition in an Elixir Release SDK 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. Illustration: Edit documents in plain English with PSPDFKit API API SDK DEVELOPMENT Machine Learning Development Edit documents in plain English with PSPDFKit API Learn to use machine learning models like GPT-3 to operate PSPDFKit API using simple English commands. Illustration: Adding a Document Viewer to a Mac Catalyst App SDK 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. Illustration: How We Make Our CI Fast API SDK DEVELOPMENT Testing Productivity Insights Development How We Make Our CI Fast Principles we apply to improve our CI efficiency. Illustration: Download Failures with Swift Package Manager Binary Targets SDK 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. Illustration: Margin Collapsing in CSS SDK 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. Illustration: Replicating the iOS Text Magnifying Glass SDK 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. Illustration: Testing Subjective Office Conversion Results SDK 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. Illustration: Rate Limiting Server Requests in Elixir SDK 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. Illustration: Our Attempt at Rewriting PSPDFKit Catalog in SwiftUI SDK 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. Illustration: Quickly summarize PDF documents with AI SDK DEVELOPMENT Machine Learning NLP PDF Tips Development Quickly summarize PDF documents with AI Learn to summarize PDF documents efficiently using machine learning and natural language processing techniques like BART in Python. Illustration: How We Use Property Testing SDK 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. Illustration: Cross-Platform Mobile Frameworks — An iOS Engineer's Perspective SDK 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. Illustration: Best Practices When Doing Code Reviews — Part 2 SDK 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. Illustration: How to Load OBJ Files with MTL in Android SDK DEVELOPMENT Android Tips Development How to Load OBJ Files with MTL in Android Loading .obj files with .mtl using Three.js in Android. Illustration: Scaling Sync Performance: A Customer Story SDK DEVELOPMENT Web Products Support Development Scaling Sync Performance: A Customer Story A short story about scaling performance based on a support ticket. Illustration: Best PDF generator APIs for your needs SDK DEVELOPMENT API PDF Generation Tips Development Best PDF generator APIs for your needs Explore the best PDF generator APIs in 2024, comparing features and pricing to find the ideal solution for your document creation needs. Illustration: A Peek at Our CD Pipeline API SDK DEVELOPMENT API Insights Development A Peek at Our CD Pipeline A short peek at the CD pipeline powering our PSPDFKit API product. Illustration: PDF vs. DOCX: How Textual Contents Can Be So Different SDK 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. Illustration: Presenting Popovers on iPhone with SwiftUI SDK DEVELOPMENT iOS SwiftUI Tips Development Presenting Popovers on iPhone with SwiftUI How to present the UI as popovers on iPhone when using SwiftUI. Illustration: Best Practices When Doing Code Reviews — Part 1 SDK 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. Illustration: How We Expose Jetpack Compose APIs SDK DEVELOPMENT Android Kotlin Jetpack Compose Insights Development How We Expose Jetpack Compose APIs A few lessons we learned about API design for modern Android. Illustration: How to download multiple files with JavaScript SDK 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. Illustration: Using SSL for PostgreSQL Connections on Elixir SDK 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.

2021

Illustration: Autosizing Fonts for Android EditTexts SDK DEVELOPMENT Android Kotlin Tips Development Autosizing Fonts for Android EditTexts Transfer Android's TextView autosizing capability to EditTexts Illustration: Understanding fast-math SDK DEVELOPMENT iOS Insights Development Understanding fast-math What does the -ffast-math optimization really do, and when is it safe to use it? Illustration: A Case for Fast CI SDK DEVELOPMENT Testing Productivity Insights Development A Case for Fast CI How slow build times lower your team’s productivity, and how to change this. Illustration: Migrating Our Web Codebase from Flow to TypeScript SDK DEVELOPMENT Web TypeScript Insights Development Migrating Our Web Codebase from Flow to TypeScript How we migrated our web codebase from Flow to TypeScript. Illustration: Fitting Text into a Bounding Frame on iOS SDK 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. Illustration: How to handle stacked PRs on GitHub SDK 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. Illustration: What Is a Deprecated API on iOS? SDK 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. Illustration: Introducing Jetpack Compose support SDK DEVELOPMENT Android Kotlin Jetpack Compose UI/UX Development Introducing Jetpack Compose support The Android PDF SDK you know and love now supports Jetpack Compose! Illustration: Practical Uses of Object URLs SDK DEVELOPMENT Web JavaScript Tips Development Practical Uses of Object URLs Showcasing different applications of JavaScript object URLs in the browser. Illustration: HTTP Caching 101 SDK DEVELOPMENT Web JavaScript Insights Development HTTP Caching 101 ...Or, how the cache works on your browser. Illustration: Refactor Git branches with rebase and autosquash SDK DEVELOPMENT Android Productivity git Development Refactor Git branches with rebase and autosquash Streamline your commit history in Android Studio using Git's interactive rebase and autosquash features for efficient version control. Illustration: How to Save Custom Data in Image Files SDK 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. Illustration: What Is Text Shaping and Why Do We Do It? SDK 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. Illustration: Managing CI pipelines with Terraform SDK DEVELOPMENT Productivity Testing Insights Development Managing CI pipelines with Terraform Learn about Terraform and how we use it to manage our Buildkite pipelines. Illustration: Swift Render Tests in Practice — Part III SDK DEVELOPMENT iOS Swift Testing Tips Development Swift Render Tests in Practice — Part III How to automate regenerating and updating reference images for render tests. Illustration: Swift Render Tests in Practice - Part II SDK 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. Illustration: Swift Render Tests in Practice - Part I SDK DEVELOPMENT iOS Swift Testing Tips Development Swift Render Tests in Practice - Part I How to pragmatically approach render testing for custom drawing code. Illustration: Reverse engineering UIKit to fix our top crash SDK 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. Illustration: Automating Test Retries SDK DEVELOPMENT iOS Testing Xcode Development Automating Test Retries We walk through our experience of dealing with flaky tests by automatically retrying them. Illustration: Debugging Image Loading and Cropping Performance on iOS SDK 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. Illustration: How We Debugged a Customer Problem with a Signed PDF 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. Illustration: Load Testing PSPDFKit Server SDK DEVELOPMENT Server JavaScript Testing Development Load Testing PSPDFKit Server How we figured out what it takes to run PSPDFKit Server. Illustration: Maintain Your Public Flutter Project Seamlessly SDK DEVELOPMENT Flutter Productivity git Insights Development Maintain Your Public Flutter Project Seamlessly Learn how to streamline your Flutter development and release cycle by managing a public project through a private monorepo effectively. Illustration: Avoiding Primitive Type Saturation in Kotlin SDK 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. Illustration: CMake Presets in Practice SDK DEVELOPMENT C++ Insights Development CMake Presets in Practice What CMake presets are and why PSPDFKit hopes to use them more. Illustration: Automating Mac Catalyst Distribution with fastlane SDK 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. Illustration: Optimizing PDFs for Printers SDK DEVELOPMENT PDF Insights Development Optimizing PDFs for Printers How to make sure your users get a good experience when your PDF is printed. Illustration: Why Should You Care about Manual Testing? SDK 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. Illustration: How a B-Tree Helped Reduce Memory Usage in Our Framework SDK 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. Illustration: A brief tour of multipart requests SDK 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. Illustration: Why PDF Uses Floats and Word Uses EMUs SDK 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. Illustration: What Contributes to Slow PDF Rendering? SDK 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. Illustration: SwiftUI In Production SDK 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. Illustration: Server Development on Apple Silicon SDK 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. Illustration: Our Journey to ARM SDK 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. Illustration: How to Identify Browser Bugs SDK 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. Illustration: Tackling PDF Performance Issues SDK DEVELOPMENT PDF C++ PDFium Development Tackling PDF Performance Issues Digging into the internals of PSPDFKit to improve PDF performance. Illustration: The Perils of Large Files in Elixir SDK DEVELOPMENT Web Server Elixir Tips Development The Perils of Large Files in Elixir A post about dealing with large files in Elixir applications. Illustration: Streams of Cocoa: Why It's Still Worth Knowing NSStream SDK 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. Illustration: String Literals, Character Encodings, and Multiplatform C++ SDK DEVELOPMENT C++ Tips Insights Development String Literals, Character Encodings, and Multiplatform C++ How string literals are encoded by Clang and MSVC. Illustration: Frontend Performance Enhancements at PSPDFKit SDK DEVELOPMENT Web JavaScript Performance Development Frontend Performance Enhancements at PSPDFKit A short article about the principles of performance improvements at PSPDFKit. Illustration: Advances in XCFrameworks SDK DEVELOPMENT iOS macOS Insights Development Advances in XCFrameworks With Xcode 12, Apple improved the XCFramework format, which unlocks great new capabilities. Illustration: Deflaking CI Tests with xcresults SDK 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. Illustration: Keyboard Navigation in SwiftUI SDK 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. Illustration: Using the SwiftUI ColorPicker on iOS and macOS SDK 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. Illustration: Continuous integration: From Jenkins to Buildkite SDK 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. Illustration: Automating macOS provisioning with Chef SDK DEVELOPMENT iOS Testing Development Automating macOS provisioning with Chef Learn how to use Chef to automatically provision macOS machines for CI: infrastructure as code Illustration: A Primer on JSON Web Tokens SDK DEVELOPMENT Processor Web Server Development A Primer on JSON Web Tokens What JWTs are, how they work, and how we use them at PSPDFKit. Illustration: Time Travel Debugging for C/C++ SDK DEVELOPMENT C++ Tips Debugging Development Time Travel Debugging for C/C++ A quick look at reverse debugging/time travel debugging for C/C++. Illustration: Keeping Up with JavaScript Pointer Events SDK 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.

2020

Illustration: How Updating to Kotlin 1.4 Broke Our Linter Rules SDK 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. Illustration: Managing macOS hardware: Virtualization or bare metal? SDK 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. Illustration: Continuous integration for small iOS/macOS teams SDK 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. Illustration: API documentation using LLVM integration tester SDK DEVELOPMENT Python Testing Development API documentation using LLVM integration tester Learn how to create executable documentation for APIs using LLVM Integration Tester and FileCheck to keep your documentation accurate and up to date. Illustration: Updating Complex Forked Projects SDK 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. Illustration: Caching file downloads with URLCache in Swift SDK 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. Illustration: Faster Compilation with Ccache 4.0 SDK 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. Illustration: Presenting popovers from SwiftUI SDK 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? Illustration: Migrating to the New Emscripten LLVM Backend SDK 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. Illustration: How we're improving accessibility on Nutrient Web SDK SDK DEVELOPMENT Web Accessibility Development How we're improving accessibility on Nutrient Web SDK Better keyboard navigation and assistive technology support on the latest versions of our Web SDK. Illustration: The Generalized CRUD API of PSPDFKit for 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. Illustration: An Introduction to LLDB Reproducers SDK 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. Illustration: The State of Debugging in WebAssembly SDK 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. Illustration: Monitoring PSPDFKit Server with Metrics SDK DEVELOPMENT Server Insights Development Monitoring PSPDFKit Server with Metrics Using data to draw insightful conclusions. Illustration: Binary Frameworks as Swift Packages SDK DEVELOPMENT iOS Swift Insights Development Binary Frameworks as Swift Packages What we learned from experimenting with binary frameworks as Swift packages in Xcode 12. Illustration: Evaluating the render fidelity of PDF.js SDK DEVELOPMENT PDF.js PDF Insights Development Evaluating the render fidelity of PDF.js A deep dive into the render fidelity of PDF.js, its limitations, and how Nutrient Web SDK provides a superior alternative with improved performance, advanced features, and robust security measures. Illustration: Visual Studio Code, C++, and a Docker Container SDK 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. Illustration: Using Metal to Apply Image Filters SDK 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. Illustration: C++20 in 2020: Modules SDK 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. Illustration: Why Is the PDF Format So Well Supported on Apple Platforms? SDK 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? Illustration: A Better Way to Git Log to Understand Changes in a Big Codebase SDK 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. Illustration: The Case for Lists in UICollectionView SDK DEVELOPMENT iOS Swift UI/UX Insights Development The Case for Lists in UICollectionView Exploring the power and flexibility offered by creating lists using UICollectionView. Illustration: The hidden trap in table and collection view reloads SDK DEVELOPMENT iOS Swift Debugging Insights Development The hidden trap in table and collection view reloads Discover how to prevent crashes during selective updates in table views and collection views, ensuring smooth iOS app performance. Illustration: How We Created a Real-Time Collaboration Tool Inside a PDF SDK 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. Illustration: Direct Calls with Objective-C SDK 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. Illustration: How to use WebAssembly modules in a web worker SDK 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. Illustration: Supporting XCFrameworks SDK DEVELOPMENT iOS macOS Insights Xcode Development Supporting XCFrameworks What we learned about XCFrameworks while migrating PSPDFKit to this new format. Illustration: NULL-Characters in Strings and Tales of Apple Radar SDK 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. Illustration: Generate TypeScript Declarations from a Flow Codebase SDK 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. Illustration: Level Up Your Trackpad Support Using UIInteraction SDK 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. Illustration: Text Selection Regression in Chrome 83 SDK 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. Illustration: Think First, Code Later SDK DEVELOPMENT Android Kotlin Tips Productivity Development Think First, Code Later A case study on how we design features and APIs for PSPDFKit for Android. Illustration: Best C++ IDEs of 2024 SDK 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. Illustration: Automated Profiling Runs in Instruments SDK DEVELOPMENT iOS macOS Tips Performance Xcode Development Automated Profiling Runs in Instruments Learn how to automate measurement runs with Instruments. Illustration: How to Effectively Measure the Performance of Your Code SDK 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. Illustration: How to Reduce Flakiness in Automated UI Testing on Android SDK 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. Illustration: Preventing Surprisingly Large Objective-C Type Encodings SDK 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. Illustration: Supporting Pointer Interactions SDK 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. Illustration: Effective Header Management in C++ SDK 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. Illustration: Change Android themes with circular animations SDK DEVELOPMENT Android Kotlin Tips UI/UX Development Change Android themes with circular animations Discover how to implement seamless theme changes in Android using circular reveal animation techniques. Illustration: Optimizing PDF File Size SDK 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. Illustration: Our Approach to Testing a Large-Scale C++ Codebase SDK 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. Illustration: Investigating the performance overhead of C++ exceptions SDK 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. Illustration: Compiler-Based Lock Checking in C++ SDK 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 Illustration: The State of Progressive Web Apps in 2020 SDK 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. Illustration: The C++ Lifetime Profile: How It Plans to Make C++ Code Safer SDK 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. Illustration: Moving a Git Repository into Its Submodule SDK 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. Illustration: Adopting UIAppearance in Custom Views SDK 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. Illustration: Filtering Tests in Android SDK 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.

2019

Illustration: The Functional Side of std::optional with C++20 SDK 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. Illustration: Open links in Safari, not Safari view controller SDK 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. Illustration: Our Journey from Genymotion to the Android Emulator SDK DEVELOPMENT Android Insights Development Our Journey from Genymotion to the Android Emulator How we migrated our Genymotion-based CI to an AVD. Illustration: WebAssembly and Emscripten Chat with Alon Zakai SDK DEVELOPMENT Web WebAssembly Development WebAssembly and Emscripten Chat with Alon Zakai A chat with Alon Zakai, co-creator of WebAssembly and creator of Emscripten. Illustration: Introduction to C++ for Swift Developers SDK 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. Illustration: Adopting Dark Mode on iOS and Ensuring Backward Compatibility SDK 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. Illustration: Improving keyboard accessibility in our Android SDK SDK DEVELOPMENT Android Kotlin Tips Accessibility Insights Development Improving keyboard accessibility in our Android SDK Discover how we enhanced keyboard navigation access in our Android SDK to ensure usability for all users. Illustration: Making C++ Talk to Other Languages with SWIG 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. Illustration: Beginner's guide to Docker commands SDK DEVELOPMENT Web Docker Containers Tips Development Beginner's guide to Docker commands Learn the key differences between Docker import/export and load/save commands in this beginner-friendly guide. Illustration: The Android Drag-and-Drop Framework in Practice SDK DEVELOPMENT Android Tips Development The Android Drag-and-Drop Framework in Practice Using the Android drag-and-drop framework — from theory to implementation. Illustration: Understanding the Gradle Build System SDK 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. Illustration: Challenges of Using Emojis with C++ SDK 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. Illustration: What Is an Intent? SDK DEVELOPMENT Android Kotlin Java Insights Development What Is an Intent? An overview of intents, their uses, and pitfalls to consider. Illustration: Dealing with Large Memory Requirements on Android SDK DEVELOPMENT Android Tips Development Dealing with Large Memory Requirements on Android This article provides tips for optimizing memory usage of your apps. Illustration: NDK Debugging SDK DEVELOPMENT Android Debugging Development NDK Debugging A set of tips for debugging native NDK code in Android apps. Illustration: How Do I Fix NetworkOnMainThreadException? SDK DEVELOPMENT Android Kotlin Tips Development How Do I Fix NetworkOnMainThreadException? A post detailing what NetworkOnMainThreadException is and how to prevent it. Illustration: The Role of PSPDFKit as a PDF Processor SDK DEVELOPMENT Android iOS Web PDF Development The Role of PSPDFKit as a PDF Processor How we fit into the PDF landscape. Illustration: Performance Evaluation of Linked Lists SDK 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. Illustration: React Redux's New Features SDK DEVELOPMENT Web React JavaScript Insights Development React Redux's New Features An overview of React Redux's seven new features in action. Illustration: How to Await an Async Event Handler Delegate in UWP SDK 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. Illustration: Smoother Interactions on the Web: getCoalescedEvents() SDK 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. Illustration: Making a Resource Thread-Safe with Locks SDK DEVELOPMENT iOS Swift Tips Development Making a Resource Thread-Safe with Locks We discuss how to ensure thread safety and synchronization via locking. Illustration: When C++ Doesn't Move SDK 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. Illustration: The Soft Keyboard on Android SDK DEVELOPMENT Android Tips Development The Soft Keyboard on Android Tips for working with the soft keyboard on Android. Illustration: Swizzling in Swift SDK 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 Illustration: Working with PDF Metadata in Swift SDK 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. Illustration: Retaining Objects Using a Fragment SDK 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. Illustration: Problems with Nullability Annotations SDK 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. Illustration: WWDC for First-Timers, 2019 Edition SDK 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. Illustration: Fix Xcode IDE problems effectively SDK DEVELOPMENT macOS Tips Insights Development Fix Xcode IDE problems effectively Learn how Xcode indexing works and discover tips to troubleshoot code assistance issues for iOS and macOS app development. Illustration: Understanding Android Dimensions SDK DEVELOPMENT Android Tips Development Understanding Android Dimensions A post about existing Android dimensions, their purpose, and common conversion rules. Illustration: Gradle Task Configuration Avoidance in Android Builds SDK 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. Illustration: How to Use Native C++ in UWP SDK 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#. Illustration: How to Use Android App Bundles SDK 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. Illustration: Understanding PDF bookmarks and outlines SDK DEVELOPMENT PDF Insights Development Understanding PDF bookmarks and outlines Discover the differences between PDF bookmarks and outlines, and how they impact document navigation and user experience. Illustration: The Many Benefits of Using a Monorepo SDK 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? Illustration: Kotlin Coroutines SDK DEVELOPMENT Android Kotlin Insights Development Kotlin Coroutines A look at Kotlin coroutines and how they compare to other solutions for concurrency. Illustration: The Bittersweet iOS Document Browser SDK 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. Illustration: Debug Emscripten with the Tracing API SDK DEVELOPMENT Web Debugging Development Debug Emscripten with the Tracing API How to debug memory usage in an Emscripten app. Illustration: Preparing My Tax Return with Apache PDFBox, Docker, and Make SDK 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. Illustration: Java 8 in Android Apps SDK 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. Illustration: Handling Nullability in Your Code SDK 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. Illustration: Embracing the Limits of UIActivityViewController SDK DEVELOPMENT iOS Objective-C Insights Development Embracing the Limits of UIActivityViewController We talk about our experience in implementing the new sharing flow. Illustration: Using ViewModels to Retain State on Android SDK 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. Illustration: PSPDFKit and Swift SDK DEVELOPMENT iOS Swift Insights Development PSPDFKit and Swift Will PSPDFKit for iOS move to Swift? In this post, we weigh the pros and cons. Illustration: Adding Logging to Crash Reports SDK 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. Illustration: What are configuration changes in Android? SDK DEVELOPMENT Android Tips Development What are configuration changes in Android? An overview of configuration changes on Android, including best practices for modern development. Illustration: How Spaced Repetition Helps You Learn New Things SDK 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. Illustration: Incremental and Full Save in PDFs SDK 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. Illustration: Sharing Business Logic Using React Native SDK 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. Illustration: Android Debug Bridge Tricks and Tips SDK DEVELOPMENT Android Debugging Development Android Debug Bridge Tricks and Tips An introduction to Android Debug Bridge (adb) and an overview of some tricks. Illustration: How to Test REST API Clients in Android Apps SDK 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. Illustration: Ninja refactoring: Improve your code step-by-step SDK DEVELOPMENT Tips Development Ninja refactoring: Improve your code step-by-step Learn about ninja refactoring and how to efficiently enhance your code quality with quick, incremental improvements. Illustration: Saving the Activity State SDK DEVELOPMENT Android Java Tips Development Saving the Activity State An overview of how to make sure your activity state is saved. Illustration: Writing and Maintaining Good Code Documentation SDK 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. Illustration: UWP for iOS Developers SDK DEVELOPMENT iOS Windows UWP C# Insights Development UWP for iOS Developers A brief introduction to Universal Windows development for iOS developers. Illustration: Using the Bottom Navigation View in Android SDK 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. Illustration: Visual Studio Code for C++ SDK DEVELOPMENT C++ Tips Insights Development Visual Studio Code for C++ How to use Visual Studio Code for C++ development. Illustration: Inspecting APK Files SDK DEVELOPMENT Android Tips Debugging Development Inspecting APK Files This article discusses the basics of Android reverse engineering using the Apktool, smali, and Java decompilers.

2018

Illustration: Self-Sizing Table View Cells in Practice SDK 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. Illustration: Generating PDFs with Ruby: 2018 Edition SDK 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. Illustration: External storage permissions on Android SDK 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. Illustration: How to Increase the Logcat Buffer Size SDK DEVELOPMENT Android Tips Development How to Increase the Logcat Buffer Size Don't lose your logs. Increase your logcat buffer! Illustration: Understanding Images in PDF SDK 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. Illustration: How to generate PDFs with Elixir SDK 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. Illustration: Tips and Tricks for Contributing to the Swift Language SDK 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. Illustration: Using Signposts for Performance Tuning on iOS SDK 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. Illustration: Creating an Efficient App Store Screenshot Workflow SDK DEVELOPMENT iOS Tips Development Creating an Efficient App Store Screenshot Workflow A look at how we generate our screenshots for the iOS App Store. Illustration: Time Management SDK 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. Illustration: iOS HEIC Performance SDK DEVELOPMENT iOS Insights Development iOS HEIC Performance We evaluate the encoding and decoding performance of HEIC. Illustration: Rendering Tests Using Robolectric SDK DEVELOPMENT Android Testing Development Rendering Tests Using Robolectric Rendering tests using Robolectric with a custom bitmap shadow. Illustration: PDF syntax 101: Understanding PDF Object Types SDK DEVELOPMENT PDF Development PDF syntax 101: Understanding PDF Object Types An overview of the internal structure of a PDF. Illustration: Challenges of Adopting Drag and Drop SDK 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. Illustration: What are Kotlin contracts and how are they useful? SDK DEVELOPMENT Android Kotlin Insights Development What are Kotlin contracts and how are they useful? An overview of the experimental Kotlin Contracts API. Illustration: What’s Hiding in Your PDF? SDK 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. Illustration: Using paths to draw shapes with borders SDK DEVELOPMENT Android Tips Development Using paths to draw shapes with borders How to use a flexible path API to draw complex shapes with borders. Illustration: Running multiple instances of a service with Docker Compose SDK 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. Illustration: Using clang-tidy and integrating it in Jenkins SDK 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. Illustration: Refactoring Large Codebases: Tips and Tricks SDK 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! Illustration: Improving Dynamic Type Support SDK DEVELOPMENT iOS Tips Development Improving Dynamic Type Support How to improve Dynamic Type support in your app and bring it to the next level. Illustration: Building Accessible Modals with React SDK 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. Illustration: How to Extend LLDB to Provide a Better Debugging Experience SDK 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. Illustration: PWA — Progressive Web Applications SDK DEVELOPMENT Web PWA Performance Open Source Development PWA — Progressive Web Applications PSPDFKit for Web and Progressive Web Applications: an open source example and guide. Illustration: Marzipan: Porting iOS Apps to the Mac SDK 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. Illustration: The Challenges of Changelogs SDK DEVELOPMENT iOS Insights Development The Challenges of Changelogs How we handle changelogs at PSPDFKit and the tools we built to help us with this. Illustration: Naming Is Hard — Difficulties of Naming Variables SDK 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. Illustration: Naming Classes — Why It Matters, and How to Do It Well SDK DEVELOPMENT Tips Development Naming Classes — Why It Matters, and How to Do It Well Tips for choosing good class names. Illustration: How to Parse XML Documents in Elixir SDK DEVELOPMENT Elixir Tips Development How to Parse XML Documents in Elixir A tutorial on how to parse XML documents in Elixir. Illustration: Protecting PDF Documents SDK DEVELOPMENT PDF Signing Security Development Protecting PDF Documents Password-based security for PDF documents. Illustration: Debugging WebView in UWP Apps with Edge DevTools SDK 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. Illustration: RxJava for Multi-Level Data Retrieval SDK 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. Illustration: Switching to a Standing Desk SDK DEVELOPMENT Productivity Development Switching to a Standing Desk We discuss some of the benefits of switching to a standing desk. Illustration: Database Transactions with Ecto SDK DEVELOPMENT Elixir Tips Development Database Transactions with Ecto How to use database transactions and Ecto.Multi in Elixir Illustration: Immutable.js and Lazy Evaluation SDK 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. Illustration: Modern CMake Tips SDK DEVELOPMENT Tips Development Modern CMake Tips There are better ways to write CMake scripts. Illustration: Adding Spellchecking to Your Tests SDK 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. Illustration: How I Got Started with Flutter SDK DEVELOPMENT Flutter Android iOS Insights Development How I Got Started with Flutter A short review of Flutter from a mobile developer’s standpoint. Illustration: Back-Pressure Queuing System in Elixir SDK DEVELOPMENT Elixir Tips Development Back-Pressure Queuing System in Elixir Learn to build a back-pressure queuing system in Elixir using the sbroker library to enhance performance and reliability. Illustration: An Introduction to Stimulus.js SDK 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. Illustration: Moving Your Gradle Build Scripts to Kotlin SDK 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. Illustration: A real-world WebAssembly benchmark SDK DEVELOPMENT Web WebAssembly Performance Development A real-world WebAssembly benchmark A WebAssembly benchmark for browser vendors to test a real-world production application. Illustration: Smart Grid Sizing SDK DEVELOPMENT iOS Swift Insights Development Smart Grid Sizing How PSPDFKit is smart about choosing thumbnail sizes. Illustration: Tips for Designing an Android Library SDK 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. Illustration: Reviewbot SDK 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`. Illustration: Line Annotations in PDF SDK 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. Illustration: Rendering PDF Previews SDK DEVELOPMENT Android Insights Development Rendering PDF Previews An overview of how to render PDF previews. Illustration: Advances in Auto Layout SDK 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. Illustration: Async Stacktraces in Android Studio SDK DEVELOPMENT Android Java Kotlin Tips Development Async Stacktraces in Android Studio How to create asynchronous stacktraces in Android Studio and IntelliJ. Illustration: Smart Punctuation in iOS: A Developer's Guide SDK DEVELOPMENT iOS Insights Development Smart Punctuation in iOS: A Developer's Guide Discover how iOS's Smart Punctuation affects string handling and learn best practices for developers managing text input in their apps. Illustration: What Are Appearance Streams? SDK DEVELOPMENT PDF Insights Development What Are Appearance Streams? An explanation of what appearance streams actually are, along with their gotchas. Illustration: RxJava Is Async yet Blocking SDK DEVELOPMENT Android RxJava Kotlin Insights Development RxJava Is Async yet Blocking An explanation of why RxJava is both asynchronous and blocking. Illustration: Docker Compose for Multiple Configurations SDK DEVELOPMENT Tips Development Docker Compose for Multiple Configurations Learn how to manage various system configurations effectively using Docker Compose for local development and testing. Illustration: The Subtle Art of Real-Time Debugging With Android Studio SDK DEVELOPMENT Android Debugging Productivity Development The Subtle Art of Real-Time Debugging With Android Studio Debugging in real time with Android Studio. Illustration: Hints for Beginners Navigating Around New Code SDK DEVELOPMENT Android Tips Development Hints for Beginners Navigating Around New Code We share some tips on how to navigate a new codebase. Illustration: Failable Methods with Djinni SDK 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. Illustration: Using webpack with Middleman SDK DEVELOPMENT Tips Development Using webpack with Middleman We explain how to integrate Middleman and webpack to boost your frontend productivity. Illustration: Leveraging SQLite Full-Text Search on iOS SDK 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. Illustration: Forms in PDF SDK DEVELOPMENT PDF Tips Forms Development Forms in PDF Forms provide a simple yet flexible way to gather data from users. Illustration: UICollectionView All the Things! SDK 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. Illustration: Using Kotlin to Make the PSPDFKit API Even Better SDK 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. Illustration: Rendering PDFs on Android SDK 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. Illustration: Optimizing WebAssembly Startup Time SDK 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. Illustration: How to Run Your Phoenix Application with Docker SDK 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. Illustration: Android Studio Shortcuts: How to Boost Your Productivity SDK 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. Illustration: Binary Frameworks in Swift SDK DEVELOPMENT iOS Swift Insights Development Binary Frameworks in Swift ABI? Module stability? What does binary stability mean, and how will it affect you? Illustration: Simple Kotlin Tips for Beginners SDK DEVELOPMENT Android Kotlin Insights Development Simple Kotlin Tips for Beginners Useful tricks for beginners to start writing better code with Kotlin. Illustration: PDF annotations: Types, uses, and how to manage them efficiently SDK DEVELOPMENT PDF Insights Annotations Development PDF annotations: Types, uses, and how to manage them efficiently Learn everything about PDF annotations, including their types, functions, and real-world applications. Discover how to add, edit, and manage annotations in PDFs with ease. See how Nutrient’s annotation model simplifies handling comments, highlights, and markup for a seamless document experience. Illustration: How to Extract Text from a PDF SDK 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.

2017

Illustration: Adopting Drag and Drop on iOS SDK 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. Illustration: Make Android Animations Reactive with VanGogh SDK DEVELOPMENT Android RxJava Open Source Development Make Android Animations Reactive with VanGogh Android view animations powered by RxJava 2. Illustration: Challenges of Supporting iPhone X SDK DEVELOPMENT iOS Insights Development Challenges of Supporting iPhone X Tips and tricks for adding support for the iPhone X in PSPDFKit. Illustration: How to use iOS Data Protection (updated for iOS 17) SDK 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. Illustration: Native View Controllers and React Native - It Just Works™ SDK DEVELOPMENT iOS React Native Swift JavaScript Development Native View Controllers and React Native - It Just Works™ Illustration: WebAssembly: A New Hope SDK DEVELOPMENT Web JavaScript WebAssembly Development WebAssembly: A New Hope What is WebAssembly, and what does it mean for the web? Illustration: Secure Media Playback on Android SDK DEVELOPMENT Android Kotlin Java Security Development Secure Media Playback on Android Picking smart defaults with security in mind when playing videos on Android. Illustration: User Breakpoints in Xcode SDK 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. Illustration: Even Swiftier Objective-C SDK DEVELOPMENT iOS Swift Objective-C Development Even Swiftier Objective-C Illustration: Linting and Code Formatting at PSPDFKit SDK 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 Illustration: 50 Shaders of Android: Drawing on Canvas SDK 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. Illustration: Creating Better User Experiences with Animations and Lottie SDK 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. Illustration: How we test and generate interactive CSS documentation SDK DEVELOPMENT Web Elixir Testing Development How we test and generate interactive CSS documentation Automating CSS testing and documentation with Hound and Webdriver Illustration: Internationalization - Right to Left Support for Mobile Apps SDK 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 Illustration: Writing Concise Code with Kotlin and RxJava SDK 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. Illustration: How to build a freehand drawing using React SDK 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. Illustration: Everybody Designs: An Agile Approach to Design SDK DEVELOPMENT Culture UI/UX Development Everybody Designs: An Agile Approach to Design How PSPDFKit uses an agile approach for design work Illustration: How to Fix a Bug, Blindfolded. SDK 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. Illustration: The Struggle with Action Extensions SDK DEVELOPMENT iOS Objective-C Tips Development The Struggle with Action Extensions Pitfalls when developing a Share or an Action Extension Illustration: The Case for Deprecating UITableView SDK DEVELOPMENT iOS Swift Objective-C Insights Development The Case for Deprecating UITableView Illustration: Creating a Compelling Today Widget SDK DEVELOPMENT iOS Insights Development Creating a Compelling Today Widget Best Practices on Developing a Today Widget Illustration: Super Fast Builds Using distcc SDK DEVELOPMENT Android iOS Objective-C C++ Development Super Fast Builds Using distcc How to dramatically shorten your build times with distcc.

2016

Illustration: Chef on macOS SDK DEVELOPMENT macOS Insights Development Chef on macOS Illustration: Hiding Your Action and Share Extensions In Your Own Apps SDK DEVELOPMENT iOS Tips Development Hiding Your Action and Share Extensions In Your Own Apps Illustration: A clean status bar with Android System UI and QuickDemo SDK 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 Illustration: Restoring State in Android MVP Architecture SDK 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. Illustration: Running Tests with Clang's AddressSanitizer SDK 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. Illustration: Android animations powered by RxJava SDK 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. Illustration: PSPDFKit 💖 React Native SDK DEVELOPMENT React Native JavaScript Development PSPDFKit 💖 React Native Illustration: Debugging a specific instance with scripted breakpoints SDK 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. Illustration: Writing Good Bug Reports SDK 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. Illustration: Real-time collaboration, Apple, and you SDK 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. Illustration: Spicing up status messages SDK 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. Illustration: Just a simple bookmark SDK 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. Illustration: Converting Xcode Test Runs to JUnit, the Fast Way SDK DEVELOPMENT iOS Testing Development Converting Xcode Test Runs to JUnit, the Fast Way Illustration: Preventing Popovers on Popovers SDK DEVELOPMENT iOS Tips Development Preventing Popovers on Popovers Illustration: Efficient iOS Version Checking SDK DEVELOPMENT iOS Tips Development Efficient iOS Version Checking Illustration: Investigating Thread Safety of UIImage SDK DEVELOPMENT iOS Debugging Development Investigating Thread Safety of UIImage Illustration: End–to–End Testing: What, Why, and How? SDK DEVELOPMENT Instant Testing Development End–to–End Testing: What, Why, and How? Illustration: Testing HTTP APIs in Elixir SDK DEVELOPMENT Web Instant Elixir Testing Development Testing HTTP APIs in Elixir Illustration: Swifty Objective-C SDK DEVELOPMENT iOS Swift Objective-C Insights Development Swifty Objective-C Illustration: Selective Pull Request Testing SDK DEVELOPMENT Testing Tips Development Selective Pull Request Testing Illustration: Continuous iOS Code Coverage With Jenkins and Slather SDK DEVELOPMENT iOS Testing Development Continuous iOS Code Coverage With Jenkins and Slather Illustration: Keyboard Handling on Android SDK DEVELOPMENT Android Java UI/UX Tips Development Keyboard Handling on Android Illustration: Running UI Tests on iOS With Ludicrous Speed SDK DEVELOPMENT iOS Performance Testing UI/UX Development Running UI Tests on iOS With Ludicrous Speed Illustration: Adding live search to Jazzy docs SDK DEVELOPMENT iOS Tips Development Adding live search to Jazzy docs Illustration: Kotlin-Ready Online Guides SDK DEVELOPMENT Android Kotlin Development Kotlin-Ready Online Guides Our Guides received a large update – now with Kotlin usage examples. Illustration: A pragmatic cross-platform approach SDK DEVELOPMENT Insights Development A pragmatic cross-platform approach Illustration: Debugging Rotation Issues SDK 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. Illustration: Surprises with Swift Extensions SDK DEVELOPMENT iOS Swift Objective-C Insights Development Surprises with Swift Extensions Illustration: The curious case of Android premultiplied alpha SDK DEVELOPMENT Android Insights Development The curious case of Android premultiplied alpha

2015