iOS
Build native iOS mobile applications with Bini.js.
iOS Overview
Bini.js allows you to build native iOS mobile applications using Tauri v2. Your React app runs inside a WKWebView with full access to native iOS APIs and features.
Real native WKWebView, not a wrapper
Xcode-managed automatic signing
bini-native wires iOS permissions
Requirements
Building iOS apps requires different tools depending on your operating system. See the section for your OS below.
- On macOS: Xcode, Xcode Command Line Tools, CocoaPods, Node.js, and Rust with iOS targets - everything runs locally.
- On Windows or Linux: Node.js, Git, a GitHub account, and the ability to push a repo. The iOS build itself runs on GitHub Actions.
Add the required Rust targets with rustup:
$ rustup target add aarch64-apple-ios $ rustup target add x86_64-apple-ios $ rustup target add aarch64-apple-ios-sim
.app directly from Windows or Linux. Tauri v2 has no supported local cross-compilation path for iOS. The recommended way is GitHub Actions on a macos-latest runner, described in each section below.macOS
On macOS you can scaffold, develop, and build the iOS app entirely on your own machine - no CI required.
Step 1: Install the tools
- macOS 11 (Big Sur) or higher
- Node.js
20.19.0or higher - Xcode - Download from the Mac App Store
- Xcode Command Line Tools - run
xcode-select --install - CocoaPods - run
sudo gem install cocoapods - Rust via rustup, then add the iOS targets (see Requirements)
Step 2: Create the project
Create the Project
Create a new Bini.js project targeting iOS, install its dependencies, and install its pods:
$ npx create-bini-app@latest my-app --platform ios $ cd my-app $ npm install $ pod install --project-directory=src-tauri/gen/ios
Or use the interactive prompt and select iOS:
$ npx create-bini-app@latest
? Select target platform:Web ApplicationWindows DesktopLinux DesktopmacOS DesktopAndroid> iOS↑↓ navigate • ⏎ select
Step 3: Develop and build
Run ios to launch on the simulator or a connected device, then ios:build to produce the app bundle:
$ npm run ios
$ npm run ios:build
Windows
A native iOS .app cannot be produced on Windows - Tauri relies on Xcode, Apple's signing toolchain, and CocoaPods, none of which run on Windows. The Tauri team's own recommendation is to build iOS apps on a macos-latest runner in CI.
Step 1: Install the tools
Install Node.js 20.19.0 or higher and Git for Windows - Download.
Step 2: Create the project
Create the Project
Create a new Bini.js project targeting iOS, install its dependencies, and install its pods:
$ npx create-bini-app@latest my-app --platform ios $ cd my-app $ npm install $ pod install --project-directory=src-tauri/gen/ios
Or use the interactive prompt and select iOS:
$ npx create-bini-app@latest
? Select target platform:Web ApplicationWindows DesktopLinux DesktopmacOS DesktopAndroid> iOS↑↓ navigate • ⏎ select
Add the Build Workflow
The scaffold does not ship with a GitHub Actions workflow. You need to add one manually. Create the file .github/workflows/build-ios.yml inside your project with the following content:
# .github/workflows/build-ios.yml
name: Build iOS App
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim
- name: Install CocoaPods
run: sudo gem install cocoapods
- name: Install dependencies
run: npm install
- name: Install pods
run: pod install --project-directory=src-tauri/gen/ios
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
releaseDraft: truePush to GitHub
Run npm run deploy and choose iOS. This initializes the repo, commits, and pushes everything to GitHub in one step:
$ npm run deploy
Once pushed, the workflow runs on a real macOS runner and builds the iOS app bundle.
Download the App
- Open your repository on GitHub and go to the Actions tab.
- Open the latest
Build iOS Apprun. - Under Artifacts, download
ios-build. Or, if a release was created, download the.ipafrom the Releases page.
macos-latest is the supported path.Linux
A native iOS .app cannot be produced on Linux - Tauri relies on Xcode, Apple's signing toolchain, and CocoaPods, none of which run on Linux. The Tauri team's own recommendation is to build iOS apps on a macos-latest runner in CI.
Step 1: Install the tools
Install Node.js 20.19.0 or higher and Git with your package manager, for example sudo apt install git on Debian and Ubuntu.
Step 2: Create the project
Create the Project
Create a new Bini.js project targeting iOS, install its dependencies, and install its pods:
$ npx create-bini-app@latest my-app --platform ios $ cd my-app $ npm install $ pod install --project-directory=src-tauri/gen/ios
Or use the interactive prompt and select iOS:
$ npx create-bini-app@latest
? Select target platform:Web ApplicationWindows DesktopLinux DesktopmacOS DesktopAndroid> iOS↑↓ navigate • ⏎ select
Add the Build Workflow
The scaffold does not ship with a GitHub Actions workflow. You need to add one manually. Create the file .github/workflows/build-ios.yml inside your project with the following content:
# .github/workflows/build-ios.yml
name: Build iOS App
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim
- name: Install CocoaPods
run: sudo gem install cocoapods
- name: Install dependencies
run: npm install
- name: Install pods
run: pod install --project-directory=src-tauri/gen/ios
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
releaseDraft: truePush to GitHub
Run npm run deploy and choose iOS. This initializes the repo, commits, and pushes everything to GitHub in one step:
$ npm run deploy
Once pushed, the workflow runs on a real macOS runner and builds the iOS app bundle.
Download the App
- Open your repository on GitHub and go to the Actions tab.
- Open the latest
Build iOS Apprun. - Under Artifacts, download
ios-build. Or, if a release was created, download the.ipafrom the Releases page.
macos-latest is the supported path.Development
Running ios opens your app on the iOS Simulator or a connected device. This requires a Mac with Xcode installed (see the macOS section):
$ npm run ios
This launches your app with:
- Hot reload for frontend changes
- Native iOS integration
- Auto-wired native APIs via
bini-native - Safari Web Inspector for debugging
Setting Up a Simulator
- Open Xcode
- Go to Settings → Platforms
- Download a simulator for your target iOS version
- Run
npm run ios
Building
Build a distributable iOS app. On macOS this runs locally; on Windows and Linux it runs in GitHub Actions (see those sections):
$ npm run ios:build
The build outputs land in src-tauri/gen/ios/:
Output Files
my-app.app- iOS app bundle (for simulator/testing)my-app.ipa- iOS App Store package (for distribution)
Code Signing
iOS code signing is managed by Xcode. For local development, Xcode uses automatic signing with your Apple ID - just open the project in Xcode and configure your team:
$ open src-tauri/gen/ios/MyApp.xcodeprojIn Xcode, select the project → Signing & Capabilities → choose your Team. Xcode handles the rest.
For GitHub Actions, store your Apple ID, app-specific password, and team ID as secrets and reference them in the workflow. The tauri-action step reads them from environment variables:
GitHub Actions workflow with signing
# .github/workflows/build-ios.yml
name: Build iOS App
on:
push:
branches: [main]
workflow_dispatch:
jobs:
build-ios:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim
- name: Install CocoaPods
run: sudo gem install cocoapods
- name: Install dependencies
run: npm install
- name: Install pods
run: pod install --project-directory=src-tauri/gen/ios
- name: Build Tauri app
uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
with:
tagName: app-v__VERSION__
releaseName: 'App v__VERSION__'
releaseDraft: trueDeployment
npm run deploy pushes your project source to GitHub - it does not build a signed IPA or submit to App Store Connect:
$ npm run deploy
Deployment Flow
- Build your app with
npm run ios:build - Run
npm run deployto push source to GitHub - Upload the IPA to App Store Connect manually