Privacy Tools Guide

Switching from Android to iPhone presents a unique challenge for password manager users. Unlike moving between devices of the same platform, cross-platform migration requires careful attention to export formats, encryption, and compatibility. This guide provides practical methods for power users and developers who want full control over their credential transfer.

Understanding the Cross-Platform Migration Challenge

Password managers store sensitive data in encrypted vaults. The encryption key typically derives from your master password, which means the vault itself remains portable across platforms—but the import/export mechanisms differ significantly between Android apps and their iOS counterparts.

Most password managers support standard export formats like CSV or encrypted JSON, but the devil lies in the details. Certain fields may not transfer correctly, and some exporters intentionally exclude TOTP seeds or secure notes for security reasons. Understanding these nuances prevents data loss during migration.

Method 1: Cloud Sync (Simplest Approach)

The easiest path involves using your password manager’s built-in cloud synchronization. If you already use 1Password, Bitwarden, or similar services with cross-platform support, simply install the iOS app and sign in.

# Verify your vault is syncing before switching devices
# For Bitwarden CLI:
bw sync

# Check sync status
echo $?

Before factory resetting your Android device, confirm that all items appear in the web vault or another trusted device. This verification step takes seconds but prevents hours of recovery work.

For developers, cloud sync provides the most reliable experience because it handles encryption consistently across platforms. The major password managers all support this workflow, though some require paid subscriptions for mobile sync.

Method 2: Encrypted Export/Import

When cloud sync isn’t available—or you prefer manual control—exporting your vault directly offers maximum transparency. This method works across all password managers that support encrypted exports.

Bitwarden Export

Bitwarden provides both unencrypted CSV and encrypted JSON exports. For security, prefer the encrypted format:

# Install Bitwarden CLI
brew install bitwarden-cli

# Login programmatically (will prompt for master password)
bw login your@email.com

# Unlock vault and capture session key
export BW_SESSION=$(bw unlock --raw)

# Export as encrypted JSON (includes TOTP seeds)
bw export --output ./vault-export.json --format json --encrypted

The encrypted export requires your master password to decrypt, making it safe for temporary storage on a computer. Transfer the file to your iPhone via AirDrop, iCloud, or USB, then import using the Bitwarden iOS app.

1Password Export

1Password’s command-line tool provides similar functionality:

# Install 1Password CLI
brew install --cask 1password-cli

# Sign in (opens browser for authentication)
op signin

# Export vault items
op export --format json --vaults Personal > 1password-export.json

1Password’s export includes all item types but requires the 1Password subscription for CLI access. The exported JSON maintains field relationships that some CSV conversions lose.

Method 3: CSV Migration (Universal Compatibility)

For maximum compatibility, CSV exports work across nearly all password managers. However, CSV strips encryption and may lose custom fields.

# Example: Convert Bitwarden CSV to 1Password CSV format
# Original Bitwarden format:
# login_uri,login_username,login_password,login_totp,name,notes,...

# Create import-ready CSV with required fields
awk -F',' 'NR>1 {print $1","$2","$3","$5}' bitwarden-export.csv > import-ready.csv

This approach requires field mapping between exporters and importers. Most password managers accept CSV with columns like url, username, password, totp, note, and name. Test with a small subset before migrating your entire vault.

Handling TOTP Seeds During Migration

Time-based one-time passwords (TOTP) present a specific challenge. Many export tools exclude these by default, requiring explicit opt-in:

# Bitwarden CLI: Include TOTP in export
bw export --format json --include-totp

# For 1Password: TOTP seeds export with items
op export --include-otp

If your password manager doesn’t export TOTP seeds, you’ll need to manually transfer each 2FA code by scanning the QR code again. This process becomes tedious with dozens of accounts but remains necessary for full credential access on your new device.

Android-Specific Export Steps

On Android, most password managers store exports in app-specific directories. Access these through Android’s file manager:

  1. Open your password manager app
  2. Navigate to Settings → Export
  3. Choose format (encrypted JSON preferred)
  4. Save to a location accessible by Files app or Google Drive
  5. Transfer to your computer or directly to iPhone

For Bitwarden Android app, the export appears in /Download/Bitwarden/ by default. Use Android’s share functionality to send the file to yourself via email or cloud storage.

iOS Import Process

Once your export file reaches iPhone, import through the password manager’s settings:

  1. Install the password manager from App Store
  2. Sign in to your account (if using cloud sync) or select “Import”
  3. Choose the import source (file or cloud storage)
  4. Select your exported file
  5. Confirm field mapping if prompted
  6. Wait for import completion—large vaults take several minutes
# Verify import success via CLI
bw list items | jq 'length'  # Count items in vault

Compare the count against your original vault to ensure complete transfer.

Command-Line Automation for Developers

For developers managing multiple accounts or performing migrations frequently, CLI automation reduces repetition:

#!/bin/bash
# migrate-password-vault.sh

EMAIL="$1"
OUTPUT_DIR="$2"

# Install dependencies
brew install bitwarden-cli

# Interactive login (safer than embedding credentials)
echo "Logging into Bitwarden..."
bw login "$EMAIL"

# Unlock and export
export BW_SESSION=$(bw unlock --raw)
bw export --output "$OUTPUT_DIR/vault.json" --format json --encrypted

# Create backup with timestamp
cp "$OUTPUT_DIR/vault.json" "$OUTPUT_DIR/vault-$(date +%Y%m%d).json"

echo "Export complete: $OUTPUT_DIR/vault.json"

This script creates timestamped backups, useful for audit trails or rollback capability. Run it on your Android device before switching, then copy exports to your iPhone.

Security Considerations During Migration

Throughout the migration process, maintain these security practices:

Troubleshooting Common Issues

Import fails with field mapping error: CSV column order matters. Check your password manager’s required format and reorder columns accordingly.

TOTP codes don’t work after import: Ensure your iPhone’s time settings sync automatically. TOTP relies on precise time alignment.

Missing items after import: Some password managers exclude archived or trashed items by default. Check these folders in your original vault before deletion.

Large vault import timeout: iOS may kill the app during long imports. Split large exports into smaller batches or use desktop import when available.

Built by theluckystrike — More at zovo.one