Skip to content

Guides

How to Build and Deploy iOS Apps Without Owning a Mac

If you're building a Capacitor app on Windows or Linux, you've probably hit the same wall every cross-platform developer eventually runs into: shipping to the App Store requires macOS. Xcode, codesign, and the iOS simulator all live exclusively on Apple hardware, and Apple isn't planning to change that any time soon. The good news is that you don't actually need a Mac on your desk to build, sign, and ship an iOS app.

The Right Way to Update Your Capacitor App Remotely

One of the most common questions we get is: "What's the difference between using Live Updates and server.url in Capacitor?" Many developers use the server.url configuration option to load their app's web content from a remote server in production — even though it was never designed for that. In this post, we'll break down what each approach does, how they compare, and why Live Updates are the better choice for production apps.

How to Distribute iOS and Android Apps to Testers

Getting a test build onto a tester's phone should be simple — but if you've ever dealt with TestFlight review delays, Firebase profile installations, or setting up OTA manifest files by hand, you know it's anything but. In this guide, we'll walk through how to distribute iOS and Android builds to testers and stakeholders with just a link or QR code, no app store submission required.

iOS Certificates and Provisioning Profiles Explained

If you've ever hit a cryptic code signing error in Xcode and spent hours trying to figure out what went wrong, you're not alone. iOS code signing is one of the most confusing parts of iOS development, especially for developers coming from web or Android backgrounds. The good news is that once you understand the pieces and how they fit together, it all starts to make sense.

In this guide, you'll learn what certificates and provisioning profiles are, how they work together, and which combinations you need for each type of build.

How to Use SPM Package Traits in Capacitor 8

Capacitor 8 now supports Swift Package Manager (SPM) package traits, bringing feature-flag-like capabilities to your iOS plugin dependencies. If you've ever needed to toggle an optional dependency — like enabling SQLCipher encryption for a SQLite plugin — you can now do it directly from your Capacitor config. This was previously only possible with CocoaPods subspecs, and since SPM is the default package manager in Capacitor, this fills an important gap.

CI/CD for Capacitor: Common Pitfalls and How to Avoid Them

Getting CI/CD to work for a web app is usually painless. Getting it to work for a Capacitor app? That's where things get interesting. Between code signing, native build environments, and app store submission quirks, teams run into the same problems again and again. The good news is that most of these pitfalls are predictable — and avoidable if you know what to watch out for.

How to Upgrade Your Capacitor App to Capacitor 8

Capacitor 8 ships with Swift Package Manager as the default for iOS, targets Android SDK 36, and requires Node.js 22+. Whether you prefer an automated CLI migration, an AI-assisted upgrade, or full manual control, this guide walks you through all three approaches so you can pick the one that fits your project best.

How to Upgrade Your Capacitor Plugin to Capacitor 8

Capacitor 8 makes Swift Package Manager the default on iOS, bumps the Android target to SDK 36, and upgrades to Kotlin 2.2. This guide covers three ways to bring your Capacitor plugin up to date — an automated CLI tool, AI-powered Capawesome Skills, or a fully manual upgrade.

How Live Updates Are Changing Mobile App Deployment

If you've ever pushed a one-line bug fix and then waited days for app store approval, you know the frustration. Traditional mobile releases are slow, manual, and often out of sync with how fast your team actually ships code. Live updates — also known as Over-The-Air (OTA) updates — are changing that by letting Capacitor teams push web layer changes directly to users' devices, no app store submission required. In this post, we'll look at how live updates are reshaping mobile app deployment and why more teams are making the switch.