Langsung ke Konten Utama

Cara Menggunakan Integritas Apple di Aplikasi Capacitor

Gunakan Intelektual Apple di sebuah aplikasi Capacitor melalui Framework Model Foundation pada iOS 26: pengecekan perangkat, streaming, batasan konteks, dan kesalahan.

Kredit Artikel

Martin Donadieu

Pengarang

Valeria

Pengulas

Jordan

Pengedit

Cara Menggunakan Intelektual Apple di Aplikasi Capacitor

Menggunakan Intelektual Apple di aplikasi Capacitor, instal @capgo/capacitor-llmPanggil setModel({ path: 'Apple Intelligence' })Periksa getReadiness()lalu buatlah percakapan dan alirkan balasan melalui textFromAi event. Di balik layar plugin ini menggunakan kerangka kerja Model Dasar Apple, yang diperkenalkan bersama iOS 26, yang menjalankan model bahasa perangkat Apple tanpa kunci API, tanpa biaya per permintaan, dan tanpa data keluar dari ponsel.

Guid ini membahas apa yang ditawarkan kerangka kerja tersebut, spesifikasi perangkat, integrasi lengkap TypeScript, jendela konteks 4.096-token, penanganan kesalahan, catatan App Review, dan bagaimana code yang sama berjalan di Android.

Apa yang ditawarkan Apple Intelligence bagi pengembang aplikasi

Dengan iOS 26, Apple membuka model dasar perangkatnya kepada aplikasi pihak ketiga melalui Kerangka Kerja Model Dasar framework. Di Swift, Anda bekerja dengan SystemLanguageModel dan LanguageModelSessionPlugin ini mengelilingi mereka sehingga web code Anda dapat menggunakan mereka:

Konsep Model Dasar Konsep Model Dasar
SystemLanguageModel.default.availability getReadiness()
LanguageModelSession createChat() Setaraan Plugin
session.streamResponse(to:) sendMessage() plus textFromAi event
Kesalahan yang muncul selama pengembangan generationError event dan ditolak sendMessage

Model ini memiliki sekitar 3 miliar parameter. Model ini sangat baik dalam menyajikan ringkasan, merevisi, mengekstrak, mengklasifikasikan, dan menghasilkan teks singkat. Namun, model ini bukanlah pengganti model cloud besar untuk pertanyaan pengetahuan terbuka, dan Apple sendiri telah menyatakan hal ini dalam panduan mereka. Desain fitur sekitar teks yang sudah dimiliki pengguna.

Spesifikasi perangkat dan sistem operasi

Spesifikasi Detail
iPhone iPhone 15 Pro, 15 Pro Max, dan iPhone 16 dan seterusnya
iPad iPad mini (A17 Pro), iPad dengan M1 dan seterusnya
Mac Macs Apple (relevant untuk pengujian di Simulator)
OS iOS 26 / iPadOS 26 atau lebih baru
Pengaturan Inteligensi Apple diaktifkan di Pengaturan > Inteligensi Apple & Siri
Bahasa Perangkat dan bahasa Siri diatur ke bahasa yang didukung oleh Intelijen Apple
Storage Apple menyediakan sekitar 7 GB ruang penyimpanan gratis untuk model Intelijen Apple
Toolchain Apple menyediakan sekitar 7 GB ruang gratis untuk model Inteligensi Apple

Jika proyek Anda masih dapat dibangun dengan Xcode yang lebih tua, lihat Persyaratan Xcode 26 dari Apple untuk aplikasi Capacitor. Target pengembangan minimum aplikasi Anda tidak perlu berubah. Plugin ini mendukung iOS 15 dan lebih lanjut dan hanya menyentuh Model Foundation pada iOS 26.

Pasang plugin

bun add @capgo/capacitor-llm
bunx cap sync ios

Use plugin 8.x with Capacitor 8. No Info.plist keys or entitlements are needed for Apple Intelligence. If you are still on Capacitor 7, the Panduan pembaruan: Capacitor 8 Datang terlebih dahulu. Referensi dokumen: /docs/plugin/LLM/.

Langkah 1: Pilih model dan periksa ketersediaan

setModel({ path: 'Apple Intelligence' }) mengatur model sistem dan menyelesaikan dengan cepat. Ketersediaan sebenarnya berasal dari getReadiness(), yang menerjemahkan enum ketersediaan Apple ke string yang dapat dibaca:

readiness nilai Arti Apa yang ingin ditampilkan
ready Model tersedia Fungsi ini
Device is not eligible for Apple Intelligence Perangkat keras tidak didukung Semua fitur disembunyikan atau gunakan fallback di cloud
Apple Intelligence is not enabled Pengguna mematikan fitur ini Petunjuk untuk mengaktifkannya di Pengaturan
Model is not ready Model masih mengunduh atau mempersiapkan “Mengunduh”, coba lagi nanti
Apple Intelligence requires iOS 26.0 or later iOS lebih lama Semua fitur disembunyikan
import { Capacitor } from '@capacitor/core';
import { CapgoLLM } from '@capgo/capacitor-llm';

export type AIState = 'ready' | 'enable-in-settings' | 'preparing' | 'unsupported';

export async function initAppleIntelligence(): Promise<AIState> {
  if (Capacitor.getPlatform() !== 'ios') return 'unsupported';

  await CapgoLLM.setModel({ path: 'Apple Intelligence' });
  const { readiness } = await CapgoLLM.getReadiness();

  if (readiness === 'ready') return 'ready';
  if (readiness.includes('not enabled')) return 'enable-in-settings';
  if (readiness.includes('not ready')) return 'preparing';
  return 'unsupported';
}

Periksa lagi ketika aplikasi kembali ke latar belakang. Pengguna sering mengaktifkan Integritas Apple setelah melihat petunjuk Anda, dan download model dapat selesai sementara aplikasi Anda berada di latar belakang.

import { App } from '@capacitor/app';

App.addListener('appStateChange', async ({ isActive }) => {
  if (isActive) updateAIState(await initAppleIntelligence());
});

Langkah 2: Buat percakapan dengan instruksi

Satu percakapan mewakili satu LanguageModelSessionyang menjaga riwayat percakapan. Diketik createChat() Tidak menerima opsi, jadi letakkan instruksi Anda di awal pesan pertama.

const INSTRUCTIONS =
  'You summarize meeting notes. Reply with at most 5 bullet points. ' +
  'Keep names and dates exactly as written. Do not add information.';

const { id: chatId } = await CapgoLLM.createChat();

Gunakan satu percakapan per tugas. Jika percakapan terus tumbuh, maka akan mencapai batas konteks yang dijelaskan di bawah ini.

Langkah 3: Streaming respons ke UI

Langkah 3: Streaming respons ke UI textFromAi event carries a snapshot of the response so far, because that is how Foundation Models streams. On Android with Gemini Nano, events carry only the new text. This helper handles both and resolves with the final text:

import { CapgoLLM } from '@capgo/capacitor-llm';

function mergeChunk(current: string, chunk: string) {
  return chunk.startsWith(current) ? chunk : current + chunk;
}

export async function ask(chatId: string, message: string, onText: (t: string) => void) {
  let text = '';
  let finish!: (value: string) => void;
  let fail!: (error: Error) => void;
  const done = new Promise<string>((resolve, reject) => {
    finish = resolve;
    fail = reject;
  });

  const handles = await Promise.all([
    CapgoLLM.addListener('textFromAi', (e) => {
      if (e.chatId !== chatId) return;
      text = mergeChunk(text, e.text);
      onText(text);
    }),
    CapgoLLM.addListener('aiFinished', (e) => {
      if (e.chatId === chatId) finish(text);
    }),
    CapgoLLM.addListener('generationError', (e) => {
      if (!e.chatId || e.chatId === chatId) fail(new Error(e.error));
    }),
  ]);

  try {
    await CapgoLLM.sendMessage({ chatId, message });
    return await done;
  } finally {
    await Promise.all(handles.map((h) => h.remove()));
  }
}

Menggabungkan catatan: ringkasan perangkat

export async function summarizeNotes(notes: string, render: (t: string) => void) {
  const state = await initAppleIntelligence();
  if (state !== 'ready') throw new Error(`AI unavailable: ${state}`);

  const { id } = await CapgoLLM.createChat();
  const prompt = `${INSTRUCTIONS}\n\nNotes:\n${notes.slice(0, 8000)}\n\nSummary:`;
  return ask(id, prompt, render);
}

The slice is a crude guard against huge inputs. A better approach is to summarize long documents in chunks and then summarize the summaries, each in a fresh chat.

In komponen framework, matikan tombol sementara ask menjalankan. Plugin menolak permintaan kedua sendMessage pada percakapan yang sama dengan “percakapan sedang menjawab, silakan tunggu sebelum bertanya pertanyaan baru”.

Jendela konteks 4.096-token

Model perangkat keras memiliki jendela konteks 4.096 token. Semua hal berkontribusi pada jendela konteks: instruksi, setiap putaran percakapan sebelumnya, prompt baru, dan jawaban yang sedang dihasilkan. Ketika sesi melebihi batasnya, Model Dasar Membangun mengeluarkan kesalahan “ukuran jendela konteks melebihi batas” yang mencapai Anda sebagai generationError event dan ditolak sendMessage.

Aturan praktis:

  • Satu percakapan per tugas, bukan satu percakapan per layar.
  • Jaga instruksi singkat dan spesifik.
  • Mulai percakapan baru ketika percakapan panjang dan beritahu ringkasan singkat percakapan sebelumnya.
  • Askilkan output singkat. Jawaban panjang menggunakan anggaran yang sama.

Pengaturan output

On jalur Intelijen Apple, plugin menggunakan pengaturan penghasilan default sistem. temperature, topk, dan maxTokens di setModel berlaku untuk jalur model LiteRT-LM dan MediaPipe yang diatur sendiri. Untuk mengarahkan model Apple, bergantung pada prompt: katakan berapa lama jawaban seharusnya, berikan format (daftar, JSON, satu kalimat), dan termasuk satu contoh singkat ketika format penting.

Yang sama code pada Android

Hanya perubahan model yang berubah:

const path = Capacitor.getPlatform() === 'ios' ? 'Apple Intelligence' : 'Gemini Nano';
await CapgoLLM.setModel({ path });

Pada Android, setModel menolak ketika Gemini Nano tidak tersedia, dan Anda dapat kembali ke model download Gemma melalui plugin yang sama. Detailnya ada di Cara Menggunakan Gemini Nano di Aplikasi Capacitor.

Pengujian

  • Perangkat nyata: jalan yang dapat diandalkan. Gunakan iPhone yang didukung pada iOS 26 dengan Intelijen Apple.
  • Simulator: Model ini dapat digunakan ketika Mac host menjalankan macOS 26 pada Apple silicon dengan Apple Intelligence diaktifkan. Perilaku dan kecepatan berbeda dari ponsel, jadi pastikan pada perangkat keras.
  • Status Tidak Dapat Dihubungi: test with Apple Intelligence turned off to check your “enable in Settings” UI, and on an older iPhone or iOS version to check that the feature hides cleanly.

aktifkan di Pengaturan

Prompts and responses stay on the device, so on-device generation adds no data collection to your privacy label by itself. Two things are still on you:

  1. Apple publishes acceptable use requirements for the Foundation Models framework. Read them before you ship, especially for features that generate content shown to other users.
  2. Pertanyaan dan respons tetap pada perangkat, sehingga pengenalan pada perangkat tidak menambahkan pengumpulan data pada label privasi Anda sendiri. Dua hal masih ada pada Anda:

Sejak prompt adalah string sederhana di dalam web code, Anda dapat meningkatkannya setelah peluncuran dengan Capgo pembaruan waktu nyata instead of waiting for a new App Store build. Changes to native code, including plugin upgrades, still need a store release, which you can build in the cloud with Capgo Live Update.

Masalah umum dan solusi

Gejala Pemicu yang mungkin Pembetulan
readiness adalah “Perangkat tidak layak” iPhone lebih tua dari 15 Pro atau iPad tidak didukung Sembunyikan fitur atau gunakan model server
readiness adalah “tidak diaktifkan” Pengguna mematikan Intelijen Apple Tampilkan Petunjuk Pengaturan, Periksa Lagi Saat Dibuka
readiness adalah “Model tidak siap” Model masih mengunduh Menampilkan status siap, coba lagi nanti
sendMessage menolak “kesalahan deviceNotEligible error” Mengirim tanpa memeriksa kesiapan Membuka pintu getReadiness() Pertama
“chat tidak ditemukan” Chat dibuat sebelum yang baru setModel Panggilan Menghubungi setModel Menghapus percakapan, buat yang baru
“percakapan sedang menjawab” Pesan kedua dikirim selama streaming Matikan input sampai aiFinished
generationError Menggunakan jendela konteks Percakapan terlalu panjang Mulai percakapan baru dengan ringkasan
Error pembangunan tentang Model Dasar Xcode lebih tua dari 26 Perbarui Xcode atau bangun di cloud

Penutup

Inteligensi Apple membawa model bahasa offline gratis dan pribadi ke setiap iPhone yang memenuhi syarat di iOS 26, dan sebuah aplikasi Capacitor dapat menggunakan model tersebut dengan beberapa baris kode TypeScript. Pilih model, tutup UI pada getReadiness()tetapkan setiap tugas di percakapan pendek, streaming snapshot ke UI, dan tangani penolakan dan kesalahan konteks seperti hasil normal. Untuk pandangan yang lebih luas tentang mengirimkan fitur AI di aplikasi hybrid, baca mengapa Capacitor berfungsi baik untuk aplikasi AI mobile.

Update langsung untuk aplikasi Capacitor

Ketika bug layer web masih aktif, kirimkan perbaikan melalui Capgo daripada menunggu hari-hari untuk persetujuan toko aplikasi. Pengguna mendapatkan update di latar belakang sementara perubahan native tetap dalam jalur review normal.

Terbaru dari Blog Kami

Capgo memberikan Anda wawasan terbaik yang Anda butuhkan untuk membuat aplikasi mobile profesional sejati.