Membuat Aplikasi watchOS
Copy sebuah prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Petunjuk ini akan membawa Anda melalui pembuatan aplikasi kompanion watchOS dari awal, termasuk pengaturan proyek di Xcode, mengintegrasikan CapgoWatchSDK, dan membuat aplikasi jam yang berfungsi dengan SwiftUI.
Prasyarat
Bab berjudul “Prasyarat”Sebelum Anda memulai, pastikan Anda memiliki:
- Xcode 15 atau lebih baru (download dari Mac App Store)
- macOS Sonoma atau lebih baru (untuk versi watchOS terbaru SDK)
- Aplikasi iOS yang sudah ada Capacitor (jalankan
npx cap add iosJika Anda belum) - Rekening Pengembang Apple (akun gratis berfungsi untuk pengembangan)
Ringkasan Struktur Proyek
Bab berjudul “Ringkasan Struktur Proyek”Setelah menyelesaikan panduan ini, proyek Anda akan memiliki struktur sebagai berikut:
Direktoriios/
DirektoriApp/
DirektoriApp/ Aplikasi iOS utama
- …
- App.xcodeproj
- App.xcworkspace (gunakan ini untuk membuka proyek)
- Podfile
DirektoriMyWatch/ (aplikasi jam baru)
DirektoriMyWatch/ (sumber aplikasi jam)
- MyWatchApp.swift
- ContentView.swift
DirektoriAssets.xcassets/
- …
- MyWatch.xcodeproj
Langkah 1: Buka Projek iOS Anda di Xcode
Judul Langkah 1: Buka Projek iOS Anda di Xcode- Navigasikan ke folder projek Capacitor Anda
ios/Appfolder - Buka
App.xcworkspace(bukan.xcodeproj) dengan mengklik ganda - Tunggu Xcode untuk mengindeks projek
Langkah 2: Tambahkan Target watchOS
Judul bagian ini: Langkah 2: Tambahkan Target watchOS-
Pada Xcode, pergi ke File → Baru → Target…
-
Pada pilihan template:
- Pilih watchOS tab di atas
- Pilih Aplikasi
- Klik Berikutnya
-
Konfigurasi aplikasi jam Anda:
- Nama Produk:
MyWatch(atau nama yang Anda inginkan) - Tim: Pilih tim pengembang Apple Anda
- Identifikasi Organisasi: Harus sesuai dengan aplikasi iOS Anda (misalnya,
app.capgo) - Identifikasi Paket: Akan dihasilkan secara otomatis (misalnya,
app.capgo.myapp.watchkitapp) - Bahasacontext
- : SwiftAntarmuka Pengguna
- : SwiftUIJenis Aplikasi Jam Tangan
- : Aplikasi (bukan Aplikasi untuk Aplikasi iOS yang Sudah Ada) Nonaktifkan Termasuk Scene Notifikasi
- (kecuali Anda membutuhkannya) Inklusif Komplikasi (kecuali Anda membutuhkannya)
- Nama Produk:
-
Klik Selesai
-
Saat diminta “Aktifkan skema ‘MyWatch’?”, klik Aktifkan
Langkah 3: Konfigurasi Pengaturan Jam Tangan
Judul bagian ‘Langkah 3: Konfigurasi Pengaturan Jam Tangan’-
Pilih proyek Anda (ikon biru di atas) di Navigasi Proyek (sisi kiri)
-
Pilih target jam tangan Anda (misalnya, ‘MyWatch’) dari daftar target
-
Pergi ke Pengaturan Umum tab:
- Nama Tampilan: Nama yang ditampilkan di bawah ikon aplikasi (misalnya, “Aplikasi Saya”)
- Identifier Paket: Harus diakhiri dengan
.watchkitapp - Versi: Sesuaikan dengan versi aplikasi iOS Anda
- Buildcontext: Bagian halaman utama produk fitur. Peran: Label UI singkat atau item navigasi. Dilihat di: komponen landing/AutomationFeatures.astro. Kunci pesan `landing_automation_build` (Landing Automation Build).
-
: Sesuaikan dengan nomor pembangunan aplikasi iOS Anda Ke Penandatanganan & Kemampuan Capabilitas
- Aktifkan Atur otomatis tanda tangan
- Pilih Anda Tim
- Xcode akan membuat profil pengaturan otomatis
-
Atur Informasi Pengiriman:
- Minimum PengirimanwatchOS 9.0 atau lebih baru
Langkah 4: Tambahkan CapgoWatchSDK melalui Swift Package Manager
Bagian berjudul “Langkah 4: Tambahkan CapgoWatchSDK melalui Swift Package Manager”SDK CapgoWatch menyediakan sebuah capaian siap pakai WatchConnector kelas untuk komunikasi.
-
Ini Xcode, pergi ke File → Tambahkan Paket Ketergantungan…
-
Dalam bidang pencarian, masukkan:
https://github.com/Cap-go/capacitor-watch.git -
Tekan Enter dan tunggu Xcode untuk mengambil paket
-
Konfigurasi paket:
- Aturan Ketergantungan: “Hingga Versi Mayor Berikutnya” dengan “8.0.0”
- Klik Tambahkan Paket
-
Pilih produk mana yang ingin ditambahkan:
- PENTINGHanya pilih
CapgoWatchSDK - Pastikan sudah ditambahkan ke target Anda (misalnya, “MyWatch”), bukan aplikasi iOS Klik
- Tambah Paket TIPS
- PENTINGHanya pilih
Langkah 5: Implementasi Aplikasi Jam Tangan
Judul Bagian “Langkah 5: Implementasi Aplikasi Jam Tangan”Sekarang mari kita buat aplikasi jam tangan code. Ganti file yang dihasilkan secara otomatis dengan yang berikut:
5.1 Buat Poin Masuk Aplikasi
Judul Bagian “5.1 Buat Poin Masuk Aplikasi”Edit MyWatch/MyWatchApp.swift:
import SwiftUIimport CapgoWatchSDK
@mainstruct MyWatchApp: App { init() { // Activate WatchConnectivity when app launches WatchConnector.shared.activate() }
var body: some Scene { WindowGroup { ContentView() } }}5.2 Buat Tampilan Utama
Judul Bagian “5.2 Buat Tampilan Utama”Edit MyWatch/ContentView.swift:
import SwiftUIimport CapgoWatchSDK
struct ContentView: View { // Observe the WatchConnector for automatic UI updates @ObservedObject var connector = WatchConnector.shared
// Local state @State private var messageText = "" @State private var statusMessage = "Ready"
var body: some View { ScrollView { VStack(spacing: 16) { // Connection Status ConnectionStatusView(connector: connector)
Divider()
// Message Input TextField("Message", text: $messageText) .textFieldStyle(.roundedBorder)
// Send Buttons HStack { Button("Send") { sendMessage() } .disabled(!connector.isReachable || messageText.isEmpty)
Button("Request") { sendWithReply() } .disabled(!connector.isReachable || messageText.isEmpty) }
Divider()
// Status Text(statusMessage) .font(.caption) .foregroundColor(.secondary)
// Last Received Message if !connector.lastMessage.isEmpty { VStack(alignment: .leading) { Text("Last Message:") .font(.caption) .foregroundColor(.secondary) Text(formatMessage(connector.lastMessage)) .font(.caption2) } .frame(maxWidth: .infinity, alignment: .leading) } } .padding() } }
private func sendMessage() { connector.sendMessage(["text": messageText, "timestamp": Date().timeIntervalSince1970]) statusMessage = "Message sent" messageText = "" }
private func sendWithReply() { connector.sendMessage(["text": messageText, "needsReply": true]) { reply in DispatchQueue.main.async { statusMessage = "Reply: \(formatMessage(reply))" } } messageText = "" }
private func formatMessage(_ message: [String: Any]) -> String { message.map { "\($0.key): \($0.value)" }.joined(separator: ", ") }}
// Separate view for connection statusstruct ConnectionStatusView: View { @ObservedObject var connector: WatchConnector
var body: some View { HStack { Circle() .fill(connector.isReachable ? Color.green : Color.red) .frame(width: 12, height: 12)
Text(connector.isReachable ? "Connected" : "Disconnected") .font(.headline)
Spacer()
if connector.isActivated { Image(systemName: "checkmark.circle.fill") .foregroundColor(.green) } } }}
#Preview { ContentView()}Langkah 6: Konfigurasi Aplikasi iOS untuk WatchConnectivity
Judul Bagian: “Langkah 6: Konfigurasi Aplikasi iOS untuk WatchConnectivity”Aplikasi iOS Anda juga memerlukan kemampuan WatchConnectivity.
-
Pilih proyek Anda di Navigasi Proyek
-
Pilih Aplikasi Target iOS Anda (bukan target jam tangan)
-
Pilih Tab Tanda Tangan & Kemampuan Klik
-
+ Kemampuan Cari dan tambahkan
-
Kemampuan WatchConnectivity (jika tersedia) atau mungkin ditambahkan secara otomatis
-
Plugin Capacitor mengelola sisi iOS secara otomatis, namun pastikan file Info.plist Anda memiliki:
<key>WKCompanionAppBundleIdentifier</key><string>app.capgo.myapp.watchkitapp</string>
Langkah 7: Bangun dan Jalankan
Judul bagian “Langkah 7: Bangun dan Jalankan”Jalankan pada Simulator
Judul bagian “Jalankan pada Simulator”-
Pilih skema jam tangan Anda dari selector skema (atas jendela Xcode)
-
Pilih simulator jam tangan Apple:
- Pilih simulator Apple Watch (misalnya, “Apple Watch Series 9 (45mm)”)
- Pilih simulator Apple Watch (misalnya, “Apple Watch Series 9 (45mm)”)
-
Klik tombol (▶️) atau tekan Jalankan button
Cmd + R -
Tombol
Perangkat iOS akan meluncur dengan iPhone dan Apple Watch
Jalankan pada Perangkat Fisik-
Bab berjudul “Jalankan pada Perangkat Fisik”
-
Hubungkan iPhone Anda melalui USB
-
Pastikan Apple Watch Anda terpasang dengan iPhone tersebut
-
Pilih skema jam tangan Anda
-
Pilih Apple Watch fisik Anda dari daftar perangkat Klik
-
Kali Pertama: Anda mungkin perlu memercayai komputer Anda di kedua perangkat
Langkah 8: Uji Komunikasi
Bab berjudul “Langkah 8: Uji Komunikasi”Dari iPhone (Capacitor) ke Jam Tangan
Bab berjudul “Dari iPhone (Capacitor) ke Jam Tangan”Pada aplikasi Capacitor Anda:
import { CapgoWatch } from '@capgo/capacitor-watch';
// Check connectionconst info = await CapgoWatch.getInfo();console.log('Watch reachable:', info.isReachable);
// Send a messageif (info.isReachable) { await CapgoWatch.sendMessage({ data: { action: 'update', value: 'Hello from iPhone!' } });}From Watch to iPhone
Judul Bagian “Dari Jam Tangan ke iPhone”The watch app uses WatchConnector:
// Send message (fire and forget)WatchConnector.shared.sendMessage(["action": "buttonTapped"])
// Send message with replyWatchConnector.shared.sendMessage(["request": "getData"]) { reply in print("Got reply: \(reply)")}Handle Messages on iPhone
Judul Bagian “Tangani Pesan di iPhone”// Listen for messages from watchawait CapgoWatch.addListener('messageReceived', (event) => { console.log('Message from watch:', event.message); // { action: 'buttonTapped' }});
// Handle messages that need a replyawait CapgoWatch.addListener('messageReceivedWithReply', async (event) => { console.log('Request from watch:', event.message);
// Send reply back await CapgoWatch.replyToMessage({ callbackId: event.callbackId, data: { status: 'success', items: ['item1', 'item2'] } });});Advanced: Custom Delegate for More Control
Judul Bagian “Maju: Delegasi Kustom untuk Kontrol Lebih Lanjut”If you need more control, implement WatchConnectorDelegate:
import SwiftUIimport CapgoWatchSDK
class WatchHandler: WatchConnectorDelegate { func didReceiveMessage(_ message: [String: Any]) { print("Received: \(message)") // Handle incoming message }
func didReceiveMessageWithReply(_ message: [String: Any], replyHandler: @escaping ([String: Any]) -> Void) { print("Received request: \(message)") // Process and send reply replyHandler(["status": "processed"]) }
func didReceiveApplicationContext(_ context: [String: Any]) { print("Context updated: \(context)") }
func didReceiveUserInfo(_ userInfo: [String: Any]) { print("User info received: \(userInfo)") }
func reachabilityDidChange(_ isReachable: Bool) { print("Reachability changed: \(isReachable)") }
func activationDidComplete(with state: WCSessionActivationState) { print("Activation completed: \(state.rawValue)") }}
// In your app setup:let handler = WatchHandler()WatchConnector.shared.delegate = handlerWatchConnector.shared.activate()Pengaturan Tambahan
Bagian berjudul “Pengaturan Masalah”Aplikasi Jam Tangan Tidak Muncul
Bagian berjudul “Aplikasi Jam Tangan Tidak Muncul”- Pastikan ID Paket yang Benar (ID Paket Aplikasi Jam Tangan harus sama dengan ID Paket Aplikasi iOS +
.watchkitapp) - Periksa apakah kedua aplikasi telah ditandatangani dengan tim yang sama
- Pada perangkat fisik: Buka Aplikasi Jam Tangan di iPhone → Jam Tangan Saya → gulir ke bawah untuk menemukan aplikasi Anda → aktifkan
Pesan Tidak Diterima
Bagian berjudul “Pesan Tidak Diterima”- Verifikasi apakah kedua aplikasi telah mengaktifkan WCSession
- Periksa
isReachablesebelum mengirim pesan - Untuk pengiriman yang dapat dipastikan, gunakan
transferUserInfobukannyasendMessage - Pastikan pemangku jawab telah terdaftar sebelum perangkat lain mengirim pesan
Error "Sesi Tidak Diaktifkan"
Judul "Error "Sesi Tidak Diaktifkan""- Panggil
WatchConnector.shared.activate()context":"HTML teks fragmen dari string Capgo UI yang lebih panjang (kunci induk `appflow_migration_step2`). Halaman/area: Perbandingan/migrasi Capflow / pemasaran copy. Peran: Kalimat website. Dilihat di: halaman ionic-appflow.astro. Simpan Capgo produk/merek dan istilah pengembang secara tepat. Kunci pesan `appflow_migration_step2` (Appflow Migration Step2)." - pada awal siklus aplikasi
- Pada iOS, plugin diaktifkan secara otomatis - pastikan plugin telah diimport
Pastikan kemampuan WatchConnectivity telah ditambahkan ke target iOS
Error Pembangunan dengan CapgoWatchSDK- Judul "Error Pembangunan dengan CapgoWatchSDK" Pastikan paket telah ditambahkan ke target watchtidak untuk target iOS
- Membersihkan folder pembangunan: Produk → Membersihkan Folder Pembangunan (Cmd + Shift + K)
- Mengatur ulang cache paket: File → Paket → Mengatur Ulang Cache Paket
Masalah Simulator
Bab berjudul “Masalah Simulator”- Mengatur ulang simulator: Perangkat → Menghapus Semua Konten dan Pengaturan
- Pastikan simulator iOS dan watchOS adalah pasangan yang kompatibel
- Kedua simulator harus berjalan untuk komunikasi dapat berfungsi
Langkah Selanjutnya
Judul Bagian: Langkah Selanjutnya- API Referensi - Dokumentasi API
- Gaya Komunikasi - Kapan menggunakan metode masing-masing
- Contoh Aplikasi - Contoh aplikasi yang berfungsi sepenuhnya
Teruskan dari Membuat Aplikasi watchOS
Judul Bagian: Teruskan dari Membuat Aplikasi watchOSJika Anda menggunakan Membuat Aplikasi watchOS untuk merencanakan pekerjaan plugin asli, hubungkannya dengan Menggunakan @capgo/capacitor-watch untuk kemampuan asli dalam Menggunakan @capgo/capacitor-watch, Capgo Direktori Plugin untuk alur kerja produk dalam Capgo Direktori Plugin, Capacitor Plugin oleh Capgo untuk detail implementasi dalam Capacitor Plugin oleh Capgo, Menambahkan atau Mengupdate Plugin untuk detail implementasi dalam Menambahkan atau Mengupdate Plugin, dan Alternatif Plugin Enterprise Ionic untuk alur kerja produk dalam Alternatif Plugin Enterprise Ionic.