Archive

2024

Illustration: The future of document interactions: Voice-driven exchange with OpenAI’s Realtime API DEVELOPMENT AI Tips The future of document interactions: Voice-driven exchange with OpenAI’s Realtime API Discover how OpenAI’s Realtime API with voice mode could transform document interactions. Simply navigate and access information with voice commands, setting the stage for the future of document workflows. 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: 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: Top 10 Ways to Convert HTML to PDF DEVELOPMENT HTML JavaScript Node Tips Development Top 10 Ways to Convert HTML to PDF Explore 10 effective methods for converting HTML to PDF, including open source options, as well as a premium choice. 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: 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.

2023

2022

Illustration: React PDF Annotations — A Complete Overview TUTORIALS Annotations React Tips React PDF Annotations — A Complete Overview A comprehensive tutorial for managing React PDF annotations with PSPDFKit. 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: 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: 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 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: Adding custom fonts to HTML documents DESIGN Web Processor API PDF Generation Tips Adding custom fonts to HTML documents How to add custom fonts to HTML and use PDF Generation to create documents. Illustration: Productivity Tips When Switching from a PC to a Mac INSIGHTS Tips Productivity Productivity Tips When Switching from a PC to a Mac Improving productivity when switching from a PC to a Mac. Illustration: PDF Annotations with JavaScript — A Complete Overview TUTORIALS Annotations JavaScript Tips PDF Annotations with JavaScript — A Complete Overview A comprehensive tutorial for managing JavaScript PDF annotations with PSPDFKit. Illustration: HTML-to-PDF invoice generation with headers and footers DESIGN Web Processor API PDF Generation Tips HTML-to-PDF invoice generation with headers and footers How we enhanced our PDF Generation component by adding the option of headers and footers. Illustration: How to Delete PDF Pages Using Java TUTORIALS API Java Tips How to Delete PDF Pages Using Java Learn how to delete PDF pages with PSPDFKit API using Java. Illustration: How to Merge PDFs Using Java TUTORIALS API Java Tips How to Merge PDFs Using Java Learn how to merge PDFs with PSPDFKit API using Java. Illustration: How to Merge PDFs Using JavaScript TUTORIALS API JavaScript Tips How to Merge PDFs Using JavaScript Learn how to merge PDFs with PSPDFKit API using JavaScript. Illustration: How to Merge PDFs Using PHP TUTORIALS API PHP Tips How to Merge PDFs Using PHP Learn how to merge PDFs with PSPDFKit API using PHP. Illustration: Top 6 Best PDF Generator APIs in 2024: A Complete Guide to Choosing the Best PDF API DEVELOPMENT API PDF Generation Tips Development Top 6 Best PDF Generator APIs in 2024: A Complete Guide to Choosing the Best PDF 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: How to Delete PDF Pages Using JavaScript TUTORIALS API JavaScript Tips How to Delete PDF Pages Using JavaScript Learn how to delete PDF pages with PSPDFKit API using JavaScript. Illustration: How to Merge PDFs Using Python TUTORIALS API Python Tips How to Merge PDFs Using Python Learn how to merge PDFs with PSPDFKit API using Python. Illustration: How to Delete PDF Pages Using Python TUTORIALS API Python Tips How to Delete PDF Pages Using Python Learn how to delete PDF pages with PSPDFKit API using Python. Illustration: How to Delete PDF Pages Using PHP TUTORIALS API PHP Tips How to Delete PDF Pages Using PHP Learn how to delete PDF pages with PSPDFKit API using PHP. Illustration: How to Split PDFs Using Python TUTORIALS API Python Tips How to Split PDFs Using Python Learn how to split PDFs with PSPDFKit API using Python. Illustration: How to Split PDFs Using JavaScript TUTORIALS API JavaScript Tips How to Split PDFs Using JavaScript Learn how to split PDFs with PSPDFKit API using JavaScript. Illustration: How to Split PDFs Using PHP TUTORIALS API PHP Tips How to Split PDFs Using PHP Learn how to split PDFs with PSPDFKit API using PHP. Illustration: How to Split PDFs Using Java TUTORIALS API Java Tips How to Split PDFs Using Java Learn how to split PDFs with PSPDFKit API using Java. 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: 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: Loading Images on iOS 15 BLOG iOS Tips Loading Images on iOS 15 We discuss the new iOS 15 APIs provided by UIKit for loading and displaying images and the SwiftUI APIs for loading an image from a remote URL. 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: 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 Pull Requests on GitHub DEVELOPMENT Productivity Tips git Development How to Handle Stacked Pull Requests 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: 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: 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: 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 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: 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: 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: 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: PSPDFKit for Magazines SOLUTIONS iOS macOS Tips PSPDFKit for Magazines How to configure PSPDFKit for a magazine. Illustration: PSPDFKit for Construction SOLUTIONS iOS macOS Tips PSPDFKit for Construction How to configure PSPDFKit to display a building floorplan. Illustration: PSPDFKit for E-Readers SOLUTIONS iOS macOS Tips PSPDFKit for E-Readers How to configure PSPDFKit for an e-reader app. Illustration: PSPDFKit for E-Learning SOLUTIONS iOS macOS Tips PSPDFKit for E-Learning How PSPDFKit can be configured for taking and grading an e-learning exam. 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: PSPDFKit for Board Meetings SOLUTIONS iOS macOS Tips PSPDFKit for Board Meetings How PSPDFKit can be used to create or join a collaborative editing session for a board meeting. Illustration: PSPDFKit for Aviation SOLUTIONS iOS macOS Tips PSPDFKit for Aviation How to configure PSPDFKit to display a flight manual and passenger list documents. 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++.

2020

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: 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: 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: 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: 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: 9 Tips to Help You Work Effectively from Home INSIGHTS Remote Work Productivity Tips 9 Tips to Help You Work Effectively from Home This article describes some strategies first-time remote workers should follow to get the most out of working from home. This is part two of four of our remote work series. 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: Remote Work: How to Overcome Common Struggles of Working from Home INSIGHTS Culture Remote Work Productivity Tips Remote Work: How to Overcome Common Struggles of Working from Home This article describes some struggles first-time remote workers may face and provides some strategies to help overcome them. This is part one of four of our remote work series. 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: 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.

2019

Illustration: From zero to hero: How I got a full-time job in tech INSIGHTS Culture Insights Tips From zero to hero: How I got a full-time job in tech A political scientist turned web engineer describes her journey of transformation. She also reveals a few aspects that can make or break an internship in tech (and in general). 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: Supporting Hybrid Technologies PRODUCTS Cordova Electron Flutter React Native Xamarin Tips Supporting Hybrid Technologies We support all major hybrid technologies, including Cordova, Electron, Flutter, Ionic, React Native, and Xamarin. 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: 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: 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: 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: 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: Examples for Using Our Frameworks PRODUCTS iOS Android Web Tips Examples for Using Our Frameworks Here at PSPDFKit, we believe doing practical work is the best way to learn things, so we decided to create a few example apps to help customers explore our framework. 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: 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: 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: 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: How to Use Slack and Not Go Bananas INSIGHTS Culture Remote Work Tips How to Use Slack and Not Go Bananas Slack is both amazing and awful. At a time when many companies quit Slack, we refined our processes to make it work well for us. 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: 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: 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: 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: 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: Deploy a WebAssembly-Based PDF Viewer to the Cloud with One Command TUTORIALS Web WebAssembly Tips PDF Viewer Deploy a WebAssembly-Based PDF Viewer to the Cloud with One Command In this blog post, we show how easy it is to deploy our standalone, WebAssembly-powered version of PSPDFKit for Web to ZEIT’s now.sh, a cloud provider. 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.

2017

2016

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: 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: 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: Hiring a distributed team INSIGHTS Culture Remote Work Tips Hiring a distributed team Who you hire can have a dramatic effect on your team’s culture, company’s productivity and, overall, is the most influential factor in determining the success or failure of a company. Over the past six years at PSPDFKit, we’ve slowly learned what’s important, what works, and what doesn’t work, at least for us. 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: 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: 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: Selective Pull Request Testing DEVELOPMENT Testing Tips Development Selective Pull Request Testing Illustration: Keyboard Handling on Android DEVELOPMENT Android Java UI/UX Tips Development Keyboard Handling on Android Illustration: Adding live search to Jazzy docs DEVELOPMENT iOS Tips Development Adding live search to Jazzy docs 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.