Comprendere estensioni di tastiera personalizzate iOS

iOS fornisce un quadro robusto per la costruzione di estensioni personalizzate per tastiera che possono sostituire o integrare la tastiera di sistema. Queste estensioni funzionano come processi separati e sono sandboxed, il che significa che hanno accesso limitato alle risorse di sistema e ai dati degli utenti. La classe `UIInputViewController` è la base per qualsiasi tastiera personalizzata, gestione della gestione dell'ingresso, visualizzazione del layout e comunicazione con l'app host.

Le tastiere personalizzate possono includere qualsiasi layout, inclusi caratteri speciali, lettere accentate, emoji o anche input basati su gesti. Tuttavia, Apple impone regole rigorose: la tastiera non può accedere alle risorse di rete senza un esplicito permesso utente, e non deve raccogliere dati di tasti per analisi senza un chiaro consenso.

Quando si costruisce una tastiera personalizzata, si sta essenzialmente creando un'estensione dell'app. L'estensione è confezionata all'interno di un'app host, e gli utenti devono installare quell'app e quindi abilitare l'estensione tramite []]Impostazioni > Generali > Tastiera > Tastiera].

Molti sviluppatori creano tastiere che raggruppano simboli logicamente, offrono popup a lunga pressione per varianti aggiuntive, o forniscono uno strato simbolico dedicato. Le sezioni seguenti camminano attraverso ogni fase di creazione di una tastiera personalizzata pronta per la produzione con caratteri speciali.

Impostazione del progetto di estensione della tastiera

Creare una tastiera personalizzata inizia all'interno di Xcode. Hai bisogno sia di un'app contenitore che di un obiettivo di estensione della tastiera.

Aggiungi un nuovo obiettivo in Xcode

Apri il tuo progetto iOS esistente o crearne uno nuovo. Vai a File > Nuovo > Target, quindi seleziona Custom Keyboard Extension[] sotto la categoria di estensione dell'applicazione.

Configurare Info.plist

L’estensione `Info.plist` contiene due chiavi critiche sotto `NSExtension`:

  • IsASCIICapable[[]: Impostare a `YES` se la tastiera utilizza solo caratteri ASCII; altrimenti impostare `NO`.
  • PrefersRightToLeft[]: Regolare se la lingua legge a destra a sinistra.
  • PrimaryLanguage[[]]: Definire un codice di lingua (ad esempio, `en-US`).

Aggiungi anche la `Privacy - Camera Uso Descrizione` solo se si include funzioni di ingresso basate sulla fotocamera (rara per una tastiera).

Capire l'Inserzione di RichiestaAccesso

Se è necessario scaricare i set di caratteri speciali o fornire la sincronizzazione cloud, è necessario aggiungere il tasto `RequestOpenAccess` sotto `NSExtensionAttributes` in `Info.plist` e impostarlo su `YES`. Tuttavia, le app di Apple che richiedono l'accesso aperto con attenzione. Per una tastiera focalizzata su caratteri speciali offline, saltare questa chiave per evitare problemi di fiducia dell'utente.

Costruisci l'interfaccia utente di base

Il metodo `viewDidLoad` all'interno di `KeyboardViewController` è dove è impostato il layout della tastiera. È possibile utilizzare uno storyboard o costruire l'interfaccia programmaticamente. Per un layout complesso con molti caratteri speciali, UI programmatico offre un migliore controllo sui vincoli di dimensionamento dinamico e di layout automatico.

override func viewDidLoad() {
 super.viewDidLoad()

 // Set up the main container view
 let stackView = UIStackView()
 stackView.axis = .vertical
 stackView.distribution = .fillEqually
 stackView.spacing = 4
 stackView.translatesAutoresizingMaskIntoConstraints = false
 self.view.addSubview(stackView)

 NSLayoutConstraint.activate([
 stackView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 4),
 stackView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -4),
 stackView.topAnchor.constraint(equalTo: view.topAnchor, constant: 4),
 stackView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -4)
 ])
}

Questa configurazione minima crea uno stack verticale che trattenere righe di chiavi.

Progettazione del layout tastiera per caratteri speciali

Le tastiere dei caratteri speciali richiedono un'organizzazione attenta. Gli utenti devono trovare rapidamente i simboli senza cacciare attraverso pagine chiave infinite. Inizia raggruppando simboli in categorie logiche:

  • I simboli della frequenza[: $, €, £, ¥, ¥, ¥, ¥, ⁇
  • Segni matematici[[]: +, -, ×, ÷, =, ∞, ≈, ±, √, ∞, ∫
  • Varianti di inserimento[: ..., —, —, ‹, ›, «, »
  • Lettere accentate[]: á, é, í, ó, ú, ü, ñ, ç
  • Arrows and direzionale[: ←, →, ↑, ↓, ↔, ⁇

Implementare due o tre strati di layout: uno strato alfabetico principale con una toggle per passare a uno strato di simboli, e forse uno strato secondario con caratteri meno comuni. Utilizzare una chiave dedicata (ad esempio, "123" o "#+=") per passare tra strati. Ogni strato è una raccolta separata di viste di riga che è possibile scambiare tramite la proprietà `inputView` o nascondendo/mostrando viste.

Gesti a lunga data per caratteri aggiuntivi

Se la tastiera visualizza un layout standard QWERTY, gli utenti si aspettano che la lunga pressione per rivelare varianti di carattere. Ad esempio, a lunga pressione il “E” mostra “é”, “è”, “ê”, “ë”. Implementa questo aggiungendo un `UILongPressGestureRecognizer` a ogni chiave. Quando è attivato, presentare una vista popup sopra la chiave con le varianti disponibili.

La tastiera di sistema di Apple utilizza un meccanismo interno, ma per la tua estensione, puoi usare un `UIView` che appare come una bolla galleggiante. Assicurare che il popup non si estenda oltre l'area sicura e che rispetta l'orientamento del dispositivo.

Codice Snippet: Aggiungere lungamente Premere per una chiave

let longPress = UILongPressGestureRecognizer(target: self, action: #selector(handleLongPress(_:)))
longPress.minimumPressDuration = 0.3
keyButton.addGestureRecognizer(longPress)

All'interno del maniglione, tracciare lo stato `.began`, `.changed`, e `.ended` per mostrare, aggiornare e selezionare dal popup.

Taglie e spaziatura

Utilizzare dimensionamento proporzionale: 10–12 tasti per riga su iPhone e leggermente più su iPad. Ogni chiave dovrebbe essere alta almeno 28 punti per soddisfare le linee guida di interfaccia umana di Apple per obiettivi di tocco. Impostare vincoli in modo che le chiavi si restringano adeguatamente su schermi più piccoli. Per i caratteri speciali, assicurarsi che i simboli siano chiaramente visibili; utilizzare una dimensione del carattere di 16–18 punti per le etichette chiave.

Gestione dell'input con il documento di testo

Quando un utente tocca una chiave, la tastiera deve inserire il carattere nel campo di testo attualmente focalizzato. Questo viene fatto attraverso l'oggetto `textDocumentProxy`, un'istanza di `UITextDocumentProxy`. Il proxy fornisce metodi come `insertText( :)`, `deleteBackward()`, e `adjustTextPosition(byCharacterOffset:)`.

Per caratteri speciali, è spesso necessario inserire glifi multibyte (come emoji o combinando diacritici). Questi sono gestiti correttamente da `insertText`, fino a quando si passa la stringa corretta Unicode. Ad esempio, per inserire il carattere accentato "é", chiamare `proxy.insertuText('é)`. Per un'unione come "e" con un accento semplice combinante (U+03oxy

Maneggiare il cambio e la serratura dei cappucci

Quando la chiave di spostamento è attiva, la tastiera dovrebbe visualizzare le varianti maiuscole. Per i caratteri speciali che hanno caso (come le lettere greche), fornire entrambi. Per i simboli senza caso, lo stato di spostamento può essere ignorato o utilizzato per visualizzare simboli alternativi (ad esempio, spostamento + numero chiave mostra spesso il simbolo sopra il numero).

Quando l'utente tocca il tasto di spostamento, lo si attiva e ricarica le chiavi. Per i tappi di bloccaggio, rilevare un doppio tocco sul tasto di spostamento; abilitare uno stato di cappuccio persistente e mostrare un indicatore (ad esempio, tasto di spostamento sottolineato).

Controllo Elimina e Cursor

Per una tastiera caratteri speciali, gli utenti possono avere bisogno di eliminare intere parole rapidamente. È possibile implementare un'azione "di cancellare parola" chiamando `deleteBackward()` in un loop o utilizzando il metodo `adjustTextPosition` per spostare il cursore indietro rispetto ai limiti di parola, quindi eliminando. Tuttavia, Apple limita quanto è possibile manipolare il cursore tramite `adjust `text `just `

Per spostare il cursore in avanti o indietro, utilizzare `proxy.adjustTextPosition (daCharacterOffset: 1)` e `-1`. Questo viene utilizzato per un “spazio necessario” o “spazio precedente” pulsante se si sceglie di includere uno.

Attivazione e test dell'estensione tastiera

Test di simulazione

In Xcode, eseguire l'app contenitore su un simulatore. Quindi vai a Impostazioni > Generali > Tastiera > Aggiungi nuova tastiera e selezionare l'estensione tastiera personalizzata sotto la sezione "Third-Party Tastiere" .

Test di dispositivo fisico

Il test del dispositivo è essenziale perché il simulatore non emula completamente tutti i comportamenti iOS (ad esempio, vincoli di altezza della tastiera, correzione automatica). Installare l'app del contenitore su un dispositivo tramite un profilo di provisioning dello sviluppo. Quindi abilitare la tastiera da Impostazioni.

Questioni comuni

  • Keyboard non appare[[]: Assicurare che l'estensione sia correttamente abilitata e il diritto `RequestOpenAccess` corrisponde alle vostre esigenze. Verificare inoltre che la classe `Principal` nei punti `Info.plist` al `KeyboardViewController`.
  • Non si può dimensionare correttamente[[]: Override `viewWillLayoutSubviews` nel vostro `KeyboardViewController` e aggiornare il vincolo di altezza della vista. La tastiera deve essere conforme all'altezza prevista del sistema (solitamente tra 216 e 330 punti su iPhone, e più grande su iPad).
  • Input not recording[[]: Verificare che si sta chiamando `insertText` sul corretto oggetto proxy. Il proxy è disponibile non appena la tastiera è attiva.

Privacy e autorizzazioni utente

Apple richiede che le tastiere non raccolgano, trasmettono o memorizzano i dati di tasti di interruzione senza il consenso esplicito dell'utente.

  • Nessuna chiamata di rete[[]: A meno che non si dispone di `RequestOpenAccess` abilitato e l'utente concede il permesso, la vostra estensione non può fare richieste di rete. Anche con accesso aperto, è necessario rivelare la raccolta di dati in una politica sulla privacy.
  • Nessun accesso al blocco[[[]: La tastiera non può leggere il sistema di blocco. Solo l'app host può accedere al clipboard, e solo quando l'applicazione è attiva.
  • Non è possibile effettuare analisi di tasti[]: non è possibile registrare quali tasti sono stati premuti. Se è necessario imparare le preferenze dell'utente (ad esempio, simboli usati frequentemente), memorizzare che i dati solo localmente con una chiara spiegazione e un'opzione opt-out.
  • Provi una funzione di controllo per la raccolta dei dati[[[]: Se la tastiera utilizza il networking per gli aggiornamenti dei caratteri speciali, includere un interruttore nell'app del contenitore per abilitare/disattivarlo e rispettare la scelta dell'utente.

Quando gli utenti abilitano la tastiera, iOS visualizza un avviso che la tastiera potrebbe raccogliere tutte le tastiere. Le recensioni e le valutazioni della tua app soffriranno se gli utenti sentono i loro dati è a rischio.

Consigli di progettazione per l'accesso speciale ai caratteri

Organizzare simboli per la legge di Fitts

Posizionare i caratteri speciali più frequentemente utilizzati vicino al centro della tastiera o sulla riga inferiore per una maggiore portata del pollice. Ad esempio, se il pubblico di destinazione spesso tipi di valuta, mettere $, € e £ sulla fila di casa dello strato dei simboli.

Utilizzare Feedback visivo

Quando viene premuto un tasto, mostra un breve popup (come l'anteprima del carattere della tastiera di sistema) per confermare l'ingresso. Questo è particolarmente utile per i piccoli simboli.

Includere una funzione di auto-avanzamento per i simboli

Dopo aver inserito un carattere speciale, molti utenti si aspettano che la tastiera ritorni automaticamente allo strato di lettere. È possibile attivare questo comportamento con un'opzione nell'app contenitore. Questo rende la digitazione di una miscela di lettere e simboli più veloce.

Accessibilità del supporto

Impostare `accessibilityLabel` su ogni tasto chiave al personaggio o al suo nome (ad esempio, "asterisco" per *). Per chiavi simboliche dove il glifo non è evidente, fornire una descrizione parlata.

Considerazioni aggiuntive

Ottimizzazione delle prestazioni

Evitate di caricare immagini pesanti o animazioni complesse. Utilizzare sottoclassi "UIButton" leggere o "UICollectionView" per un riutilizzo efficiente. Su dispositivi più vecchi, rendere una griglia completa di 30+ tasti dovrebbe essere liscia.

Localizzazione

Se la tastiera supporta più lingue, considera di fornire set di simboli localizzati. Ad esempio, un utente francese potrebbe aver bisogno di « », mentre un utente tedesco ha bisogno di ß e Ä, Ö, Ü. Utilizzare il tasto `PrimaryLanguage` in `Info.plist` per indicare la lingua predefinita, ma lasciare che gli utenti si commutano tramite l'app contenitore. Conservare il layout selezionato in `UserDefaults` con una suite condivisa (utilizzando gruppi di estensione può leggere).

Recensione dell'App Store

Assicurarsi che la tastiera non si schianta, non include contenuti offensivi, e non aggira le restrizioni di sistema. Evitare banner pubblicitari o sovrapposizioni promozionali sulla tastiera stessa. Se la tastiera richiede l'accesso alla rete per qualsiasi motivo, essere preparati a giustificarlo durante il processo di revisione.

Aggiornamenti e Manutenzione

Le nuove versioni iOS possono cambiare come le estensioni della tastiera interagiscono con il sistema. Testa la tua estensione su beta rilascia e aggiorna le implementazioni del metodo `UIInputViewController`, ad esempio, iOS 16 ha introdotto nuove API di layout della tastiera per le tastiere più alte su iPad.

Conclusioni

L'implementazione di una tastiera personalizzata con caratteri speciali su iOS è un modo potente per migliorare l'efficienza di digitazione per gli utenti che hanno bisogno di simboli, lettere accentate, o emoji che la tastiera di sistema non si espongono immediatamente.

Per ulteriori informazioni, consultare la documentazione ufficiale di Apple su ]Creazione di una tastiera personalizzata[], [] Guida di programmazione dell'applicazione[], e Linee guida di interfaccia umana per tasti.