Archive

2024

Illustration: Understanding cryptography standards in the context of PDF digital signatures 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. Illustration: Expanding SwiftUI capabilities in Nutrient: Customizable main toolbar 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. Illustration: Top 5 document viewers for developers 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 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 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 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++ 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 ways to generate PDFs in Python 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. Illustration: The Impact of Rapid Technological Advancements on Sustainable Software Product Development 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. Illustration: Leveraging WebAssembly in JavaScript for High-Performance Document Processing 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. Illustration: How to Implement Drag-to-Reorder List Functionality with Jetpack Compose 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. Illustration: Top 10 ways of converting HTML to PDF 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 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: Seamless Room database integration for Kotlin Multiplatform projects 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. Illustration: NSCopying in a Swift World 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 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 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 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 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 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 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 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 DEVELOPMENT Kotlin Android Development Kotlin Non-Nullable Pitfall Under what circumstances a non-nullable value might be null. Illustration: Adopting UITextInteraction 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 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: A Tryst with SwiftUI, Or: How I Learned to Stop Worrying and Enjoy Building UIs 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. Illustration: Vision Is an Exciting Addition to Apple’s Lineup 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 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 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 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 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 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 DEVELOPMENT Web TypeScript Development Understanding Generics in TypeScript: Part 1 Learn the basics of generics in TypeScript. Illustration: Elixir Idioms for JavaScript Developers 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 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 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 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 PSPDFKit for React Native with Expo 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. Illustration: Optimizing Annotation Drawing Performance 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 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: My Experience with Web Development from a Systems Programming Perspective 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. Illustration: Migrating from Puppeteer to Playwright DEVELOPMENT Web Testing Development Migrating from Puppeteer to Playwright How we migrated from Puppeteer to Playwright in our test suite. Illustration: Uncovering SourceKit Limitations While Updating Our API Documentation 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.

2022

Illustration: A Perfect Gift 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) 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 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 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 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 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 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 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 Using PSPDFKit API and Machine Learning Language Models 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. Illustration: Adding a Document Viewer to a Mac Catalyst App 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 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 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 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 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 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 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 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: Summarize a PDF document using machine learning and natural language processing 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. Illustration: How We Use Property Testing 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 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 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 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 DEVELOPMENT Web Products Support Development Scaling Sync Performance: A Customer Story A short story about scaling performance based on a support ticket. Illustration: Top 6 best PDF generator APIs in 2024: A complete guide to choosing the best API 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. Illustration: A Peek at Our CD Pipeline 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 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 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 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 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 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 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 DEVELOPMENT Android Kotlin Tips Development Autosizing Fonts for Android EditTexts Transfer Android's TextView autosizing capability to EditTexts Illustration: Understanding Fast-Math 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 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 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 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 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? 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 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 DEVELOPMENT Web JavaScript Tips Development Practical Uses of Object URLs Showcasing different applications of JavaScript object URLs in the browser. Illustration: HTTP Caching 101 DEVELOPMENT Web JavaScript Insights Development HTTP Caching 101 ...Or, how the cache works on your browser. Illustration: Refactoring Git Branches with Interactive Rebase and Autosquash in Android Studio 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. Illustration: How to Save Custom Data in Image Files 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? 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 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 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 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 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 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 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 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 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 DEVELOPMENT Server JavaScript Testing Development Load Testing PSPDFKit Server How we figured out what it takes to run PSPDFKit Server. Illustration: How We Maintain Our Public Flutter Project Using a Private Monorepo 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. Illustration: Avoiding Primitive Type Saturation in Kotlin 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 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 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 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? 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 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 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 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? 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 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 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 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 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 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 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 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++ 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 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 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 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 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 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 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 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 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++ 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 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 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? 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 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: Executable API Documentation with the LLVM Integration Tester and FileCheck 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. Illustration: Updating Complex Forked Projects 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 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 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 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 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 PSPDFKit for Web 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. Illustration: The Generalized CRUD API of PSPDFKit for Web 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 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 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 DEVELOPMENT Server Insights Development Monitoring PSPDFKit Server with Metrics Using data to draw insightful conclusions. Illustration: Binary Frameworks as Swift Packages 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 DEVELOPMENT PDF.js PDF Insights Development Evaluating the Render Fidelity of PDF.js We explore various issues with the render fidelity of PDF.js. Illustration: Visual Studio Code, C++, and a Docker Container 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 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 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? 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 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 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 Selective Table View and Collection View Reloads 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. Illustration: How We Created a Real-Time Collaboration Tool Inside a PDF 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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++ 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 Instantly Using the Circular Reveal Animation 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. Illustration: Optimizing PDF File Size 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 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 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++ 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 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 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 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 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 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 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 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 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 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 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 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: How We Improved Keyboard Navigation Accessibility in Our Android SDK 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. Illustration: Making C++ Talk to Other Languages with SWIG 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: A beginner's guide to Docker: Import/export vs. load/save commands 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. Illustration: The Android Drag-and-Drop Framework in Practice 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 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++ 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? 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 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 DEVELOPMENT Android Debugging Development NDK Debugging A set of tips for debugging native NDK code in Android apps. Illustration: How Do I Fix NetworkOnMainThreadException? 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 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 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 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 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() 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 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 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 DEVELOPMENT Android Tips Development The Soft Keyboard on Android Tips for working with the soft keyboard on Android. Illustration: Swizzling in Swift 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 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 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 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 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: How Xcode Indexing Works and How You Can Fix IDE Problems with Your Projects 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. Illustration: Understanding Android Dimensions 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 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 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 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 the difference between bookmarks and the outline in a PDF 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. Illustration: The Many Benefits of Using a Monorepo 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 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 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 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 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 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 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 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 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 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 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? 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 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 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 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 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 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: What Is Ninja Refactoring, and When Should You Consider Doing It? DEVELOPMENT Tips Development What Is Ninja Refactoring, and When Should You Consider Doing It? Tips and best practices for code refactoring. Illustration: Saving the Activity State 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 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 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 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++ DEVELOPMENT C++ Tips Insights Development Visual Studio Code for C++ How to use Visual Studio Code for C++ development. Illustration: Inspecting APK Files 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 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 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 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 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 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 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 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 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 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 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 DEVELOPMENT iOS Insights Development iOS HEIC Performance We evaluate the encoding and decoding performance of HEIC. Illustration: Rendering Tests Using Robolectric 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 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 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? 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? 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 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 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 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 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 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 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 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 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 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 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 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 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 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 DEVELOPMENT PDF Signing Security Development Protecting PDF Documents Password-based security for PDF documents. Illustration: Debugging WebView in UWP Apps with Edge DevTools 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 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 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 DEVELOPMENT Elixir Tips Development Database Transactions with Ecto How to use database transactions and Ecto.Multi in Elixir Illustration: Immutable.js and Lazy Evaluation 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 DEVELOPMENT Tips Development Modern CMake Tips There are better ways to write CMake scripts. Illustration: Adding Spellchecking to Your Tests 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 DEVELOPMENT Flutter Android iOS Insights Development How I Got Started with Flutter A short review of Flutter from a mobile developer’s standpoint. Illustration: How to Build a Back-Pressure Queuing System in Elixir with sbroker 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. Illustration: An Introduction to Stimulus.js 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 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 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 DEVELOPMENT iOS Swift Insights Development Smart Grid Sizing How PSPDFKit is smart about choosing thumbnail sizes. Illustration: Tips for Designing an Android Library 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 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 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 DEVELOPMENT Android Insights Development Rendering PDF Previews An overview of how to render PDF previews. Illustration: Advances in Auto Layout 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 DEVELOPMENT Android Java Kotlin Tips Development Async Stacktraces in Android Studio How to create asynchronous stacktraces in Android Studio and IntelliJ. Illustration: Understanding Smart Punctuation on iOS: Impact on string handling in apps 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. Illustration: What Are Appearance Streams? 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 DEVELOPMENT Android RxJava Kotlin Insights Development RxJava Is Async yet Blocking An explanation of why RxJava is both asynchronous and blocking. Illustration: How to Manage Multiple System Configurations Using Docker Compose 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. Illustration: The Subtle Art of Real-Time Debugging With Android Studio 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 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 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 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 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 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! 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 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 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 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 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 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 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 DEVELOPMENT Android Kotlin Insights Development Simple Kotlin Tips for Beginners Useful tricks for beginners to start writing better code with Kotlin. Illustration: Understanding PDF Annotations: Their Types and Uses 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. Illustration: How to Extract Text from a PDF 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 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 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 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) 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™ DEVELOPMENT iOS React Native Swift JavaScript Development Native View Controllers and React Native - It Just Works™ Illustration: WebAssembly: A New Hope 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 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 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 DEVELOPMENT iOS Swift Objective-C Development Even Swiftier Objective-C Illustration: Linting and Code Formatting at PSPDFKit 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 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 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 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 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 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 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 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. 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 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 DEVELOPMENT iOS Swift Objective-C Insights Development The Case for Deprecating UITableView Illustration: Creating a Compelling Today Widget DEVELOPMENT iOS Insights Development Creating a Compelling Today Widget Best Practices on Developing a Today Widget Illustration: Super Fast Builds Using distcc 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 DEVELOPMENT macOS Insights Development Chef on macOS Illustration: Hiding Your Action and Share Extensions In Your Own Apps 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 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 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 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 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 DEVELOPMENT React Native JavaScript Development PSPDFKit 💖 React Native Illustration: Debugging a specific instance with scripted breakpoints 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 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 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 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 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 DEVELOPMENT iOS Testing Development Converting Xcode Test Runs to JUnit, the Fast Way Illustration: Preventing Popovers on Popovers DEVELOPMENT iOS Tips Development Preventing Popovers on Popovers Illustration: Efficient iOS Version Checking DEVELOPMENT iOS Tips Development Efficient iOS Version Checking Illustration: Investigating Thread Safety of UIImage DEVELOPMENT iOS Debugging Development Investigating Thread Safety of UIImage Illustration: End–to–End Testing: What, Why, and How? DEVELOPMENT Instant Testing Development End–to–End Testing: What, Why, and How? Illustration: Testing HTTP APIs in Elixir DEVELOPMENT Web Instant Elixir Testing Development Testing HTTP APIs in Elixir Illustration: Swifty Objective-C DEVELOPMENT iOS Swift Objective-C Insights Development Swifty Objective-C Illustration: Selective Pull Request Testing DEVELOPMENT Testing Tips Development Selective Pull Request Testing Illustration: Continuous iOS Code Coverage With Jenkins and Slather DEVELOPMENT iOS Testing Development Continuous iOS Code Coverage With Jenkins and Slather Illustration: Keyboard Handling on Android DEVELOPMENT Android Java UI/UX Tips Development Keyboard Handling on Android Illustration: Running UI Tests on iOS With Ludicrous Speed DEVELOPMENT iOS Performance Testing UI/UX Development Running UI Tests on iOS With Ludicrous Speed Illustration: Adding live search to Jazzy docs DEVELOPMENT iOS Tips Development Adding live search to Jazzy docs Illustration: Kotlin-Ready Online Guides 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 DEVELOPMENT Insights Development A pragmatic cross-platform approach Illustration: Debugging Rotation Issues 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 DEVELOPMENT iOS Swift Objective-C Insights Development Surprises with Swift Extensions Illustration: The curious case of Android premultiplied alpha DEVELOPMENT Android Insights Development The curious case of Android premultiplied alpha

2015