Membuat Aplikasi watchOS
Copy prompt pengaturan dengan langkah instalasi dan panduan markdown lengkap untuk plugin ini.
Copy untuk AI
Persyaratan
Judul bagian “Persyaratan”Sebelum memulai, pastikan Anda memiliki:
- Xcode 15 atau lebih baru (download dari Mac App Store)
- macOS Sonoma atau lebih baru (untuk watchOS terbaru SDK)
- Proyek iOS Capacitor yang sudah ada (jalankan
npx cap add iosjika Anda belum) - Akun Pengembang Apple (akun gratis cukup untuk pengembangan)
Struktur Proyek Ringkasan
Judul Bagian “Struktur Proyek Ringkasan”Setelah menyelesaikan panduan ini, proyek Anda akan memiliki struktur sebagai berikut:
Direktoriios/
DirektoriApp/
DirektoriApp/ (aplikasi iOS utama Anda)
- …
- App.xcodeproj
- App.xcworkspace (gunakan ini untuk membuka proyek)
- Podfile
DirektoriMyWatch/ (aplikasi jam baru)
DirektoriMyWatch/ (sumber aplikasi jam)
- MyWatchApp.swift
- ContentView.swift
DirektoriAssets.xcassets/
- …
- Project MyWatch.xcodeproj
Langkah 1: Buka Projek iOS Anda di Xcode
Judul Bagian “Langkah 1: Buka Projek iOS Anda di Xcode”- Navigasikan ke folder projek Capacitor Anda
ios/Appfolder - Buka
App.xcworkspace(bukan.xcodeproj) dengan cara mengklik ganda - Tunggu Xcode untuk mengindeks projek
Langkah 2: Tambahkan Target watchOS
Judul bagian “Langkah 2: Tambahkan Target watchOS”-
Pergi ke Xcode, lalu Buka File → Baru → Target…
-
Pada pilihan template:
- Pilih tab watchOS di atas Pilih
- App App
- 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) - Bahasa: Swift
- Antarmuka Pengguna: SwiftUI
- Jenis Aplikasi Jam Tangan: Aplikasi (bukan Aplikasi untuk Aplikasi iOS yang Sudah Ada)
- Tidak Pilih Inklusif Skenario Notifikasi (kecuali Anda membutuhkannya)
- Tidak Pilih Inklusif Komplikasi (kecuali Anda membutuhkannya)
- Nama Produk:
-
Klik Selesai
-
Ketika Anda diminta “Aktifkan skema ‘MyWatch’?”, klik Aktifkan
Langkah 3: Konfigurasi Pengaturan Aplikasi Jam Tangan
Bab berjudul “Langkah 3: Konfigurasi Pengaturan Aplikasi Jam Tangan”-
Pada Navigator Proyek (sisi kiri), pilih proyek Anda (ikon biru di atas)
-
Pilih target jam tangan Anda (misalnya, “MyWatch”) dari daftar target
-
Pergi ke Umum tab:
- Nama Tampilan: Nama yang ditampilkan di bawah ikon aplikasi (misalnya, “Aplikasi Saya”)
- Identifikasi Paket: Harus diakhiri dengan
.watchkitapp - Versi: Sesuaikan versi aplikasi iOS Anda
- Build: Sesuaikan nomor pembangunan aplikasi iOS Anda
-
Pergi ke Pengesahan & Kemampuan tab:
- Mengaktifkan Menangani otomatis pengesahan
- Pilih Anda Tim
- Xcode akan membuat profil pengaturan secara otomatis
-
Atur Informasi Pengiriman:
- Deploymen Minimum: watchOS 9.0 atau lebih baru
Langkah 4: Tambahkan CapgoWatchSDK melalui Swift Package Manager
Bagian berjudul “Langkah 4: Tambahkan CapgoWatchSDK melalui Swift Package Manager”CapgoWatchSDK menyediakan kelas yang siap digunakan WatchConnector untuk komunikasi.
-
Di Xcode, pergi ke File → Tambahkan Dependensi Paket…
-
Di 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 Utama Berikutnya” dengan “8.0.0”
- Klik Tambahkan Paket
-
Pilih produk mana yang ingin ditambahkan:
- PERHATIAN: Pilih hanya
CapgoWatchSDK - Pastikan sudah ditambahkan ke target bahasa sasaran (misalnya, “MyWatch”), bukan aplikasi iOS
- Klik Tambah Paket
- PERHATIAN: Pilih hanya
Langkah 5: Implementasikan Aplikasi Jam
Bab berjudul “Langkah 5: Implementasikan Aplikasi Jam”Sekarang mari kita buat aplikasi jam code. Ganti file yang dihasilkan secara otomatis dengan yang berikut:
Membuat Poin Masuk Aplikasi
Judul Bagian “Membuat 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() } }}Membuat Tampilan Utama
Judul Bagian “Membuat 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.
-
Select your Pilih Target Aplikasi iOS (bukan target jam tangan)
-
Pergi ke Tab Tanda Tangan & Kemampuan Klik
-
Tambahkan Kemampuan Cari dan tambahkan
-
WatchConnectivity (jika tersedia) atau mungkin ditambahkan secara otomatis Plugin __CAPGO_KEEP_0__ menghandle sisi iOS secara otomatis, namun pastikan Anda memiliki: Info.plist
-
The Capacitor plugin handles the iOS side automatically, but ensure your Info.plist has:
<key>WKCompanionAppBundleIdentifier</key><string>app.capgo.myapp.watchkitapp</string>
Langkah 7: Bangun dan Jalankan
Judul Bagian “Langkah 7: Bangun dan Jalankan”Jalankan di Simulator
Judul Bagian “Jalankan di Simulator”-
Pilih skema jam tangan dari selector skema (atas jendela Xcode)
-
Pilih simulator jam tangan:
- Klik pada selector perangkat di samping skema
- Pilih simulator Apple Watch (misalnya, “Apple Watch Series 9 (45mm)”
-
Klik tombol Run tombol (▶️) atau tekan
Cmd + R -
Simulator iOS akan diluncurkan dengan baik iPhone dan Apple Watch
Jalankan pada Perangkat Fisik
Bagian berjudul “Jalankan pada Perangkat Fisik”-
Hubungkan iPhone Anda melalui USB
-
Pastikan Apple Watch Anda dipasangkan dengan iPhone tersebut
-
Pilih skema jam tangan Anda
-
Pilih Apple Watch fisik Anda dari daftar perangkat
-
Klik Jalankan
-
Pertama kali: Anda mungkin perlu mempercayai komputer Anda pada kedua perangkat
Langkah 8: Tes Komunikasi
Judul bagian “Langkah 8: Tes Komunikasi”Dari iPhone (Capacitor) ke Jam Tangan
Judul bagian “Dari iPhone (Capacitor) ke Jam Tangan”Dalam 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!' } });}Dari Jam Tangan ke iPhone
Judul bagian “Dari Jam Tangan ke iPhone”Aplikasi jam tangan menggunakan 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)")}Tangani Pesan di iPhone
Bagian berjudul “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'] } });});Maju: Delegasi Kustom untuk Kontrol Lebih Lanjut
Bagian berjudul “Maju: Delegasi Kustom untuk Kontrol Lebih Lanjut”Jika Anda membutuhkan kontrol yang lebih lanjut, implementasikan 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 Perbaikan
Bagian berjudul “Pengaturan Perbaikan”Aplikasi Jam Tangan Tidak Muncul di Jam Tangan
Bagian berjudul “Aplikasi Jam Tangan Tidak Muncul di Jam Tangan”- Pastikan ID paket yang terkait dengan benar (ID paket aplikasi jam tangan harus sama dengan ID paket aplikasi iOS +
.watchkitapp) - Pastikan kedua aplikasi ditandatangani dengan tim yang sama
- Pada perangkat fisik: Buka aplikasi Jam Tangan di iPhone → My Watch → gulir ke bawah untuk menemukan aplikasi Anda → aktifkan ON
Pesan Tidak Diterima
Judul bagian “Pesan Tidak Diterima”- Pastikan kedua aplikasi memiliki WCSession diaktifkan
- Periksa
isReachablesebelum mengirim pesan - Untuk pengiriman yang terjamin, gunakan
transferUserInfodaripadasendMessage - Pastikan pendengar terdaftar sebelum perangkat lain mengirim pesan
”Sesi Tidak Diaktifkan” Error
Bagian berjudul “”Error Aktivasi Sesi””- Panggil
WatchConnector.shared.activate()di awal siklus aplikasi - Pada iOS, plugin diaktifkan secara otomatis - pastikan plugin diimpor
- Periksa bahwa kemampuan WatchConnectivity ditambahkan ke target iOS
Error Pembangunan dengan CapgoWatchSDK
Bagian berjudul “Error Pembangunan dengan CapgoWatchSDK””- Pastikan paket ditambahkan ke target jam, bukan target iOS
- Membersihkan folder pembangunan: Produk → Membersihkan Folder Pembangunan (Cmd + Shift + K)
- Mengatur kembali cache paket: File → Paket → Mengatur Kembali Cache Paket
Masalah Simulator
Bagian berjudul “Masalah Simulator”- Mengatur kembali 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-Langkah Selanjutnya
Bagian berjudul “Langkah-Langkah Selanjutnya”- API Referensi - Dokumentasi API lengkap
- Polanya Komunikasi - Kapan menggunakan metode masing-masing
- Contoh Aplikasi - Contoh aplikasi yang berfungsi sepenuhnya
Teruskan dari Membuat Aplikasi watchOS
Judul Bagian “Teruskan dari Membuat Aplikasi watchOS”Jika Anda menggunakan Membuat Aplikasi watchOS untuk merencanakan pekerjaan plugin native, hubungkannya dengan Menggunakan @capgo/capacitor-watch untuk kemampuan native di Menggunakan @capgo/capacitor-watch, Direktori Plugin Capgo untuk alur kerja produk di Direktori Plugin Capgo, Plugin-Plugin Capacitor oleh Capgo untuk detail implementasi di Plugin-Plugin Capacitor oleh Capgo, Mengambah atau Mengupdate Plugin untuk detail implementasi di Mengambah atau Mengupdate Plugin, dan Alternatif Plugin Enterprise Ionic untuk alur kerja produk di Alternatif Plugin Enterprise Ionic.