Verstehen von iOS Custom Keyboard Extensions

iOS bietet ein robustes Framework für die Erstellung benutzerdefinierter Tastaturerweiterungen, die die Systemtastatur ersetzen oder ergänzen können. Diese Erweiterungen laufen als separate Prozesse und sind sandboxed, was bedeutet, dass sie nur begrenzten Zugriff auf Systemressourcen und Benutzerdaten haben. Die Klasse "UIInputViewController" ist die Grundlage für jede benutzerdefinierte Tastatur, die Verwaltung der Eingabehandhabung, das Ansichtslayout und die Kommunikation mit der Host-App.

Benutzerdefinierte Tastaturen können jedes Layout enthalten, einschließlich Sonderzeichen, akzentuierte Buchstaben, Emojis oder sogar gestenbasierte Eingaben. Apple legt jedoch strenge Regeln fest: Die Tastatur kann ohne ausdrückliche Benutzererlaubnis nicht auf Netzwerkressourcen zugreifen und darf keine Tastenanschlagdaten für Analysen ohne klare Zustimmung sammeln. Dies gewährleistet die Privatsphäre der Benutzer und ermöglicht Entwicklern dennoch Flexibilität.

Wenn Sie eine benutzerdefinierte Tastatur erstellen, erstellen Sie im Wesentlichen eine App-Erweiterung. Die Erweiterung ist in einer Host-App verpackt, und die Benutzer müssen diese App installieren und dann die Erweiterung über Einstellungen > Allgemein > Tastatur > Tastaturen aktivieren. Im Gegensatz zu Android erlaubt iOS kein vollständiges Ersetzen der Systemtastatur; Benutzer müssen manuell zu Ihrer Tastatur wechseln.

Bei Sonderzeichen liegt die wahre Macht darin, effiziente Zugriffsmuster zu entwerfen. Viele Entwickler erstellen Tastaturen, die Symbole logisch gruppieren, lange Druck-Popups für zusätzliche Varianten anbieten oder eine spezielle Symbolschicht bereitstellen. Die folgenden Abschnitte durchlaufen jede Phase der Erstellung einer produktionsbereiten benutzerdefinierten Tastatur mit Sonderzeichen.

Aufbau des Keyboard Extension Project

Das Erstellen einer benutzerdefinierten Tastatur beginnt mit Xcode. Sie benötigen sowohl eine Container-App als auch das Ziel für die Tastaturerweiterung.

Hinzufügen eines neuen Ziels in Xcode

Öffnen Sie Ihr bestehendes iOS-Projekt oder erstellen Sie ein neues. Gehen Sie zu File > New > Target, wählen Sie Custom Keyboard Extension unter der Kategorie Application Extension. Geben Sie ihm einen Produktnamen wie “SpecialCharKeyboard.” Xcode generiert eine Vorlage mit einer `KeyboardViewController`-Unterklasse von `UIInputViewController`.

Konfigurieren Sie Info.plist

Der `Info.plist` der Erweiterung enthält zwei kritische Schlüssel unter `NSExtension`:

  • IsASCIICapable: Setzen Sie auf `JA`, wenn Ihre Tastatur nur ASCII-Zeichen verwendet; andernfalls setzen Sie `NEIN`.
  • PrefersRightToLeft: Passen Sie an, ob Ihre Sprache rechts nach links gelesen wird.
  • PrimaryLanguage: Definieren Sie einen Sprachcode (z.B. `en-US`).

Fügen Sie auch die "Datenschutz - Kamera-Nutzungsbeschreibung" nur hinzu, wenn Sie kamerabasierte Eingabefunktionen (selten für eine Tastatur) einfügen.

Verstehen Sie den RequestOpenAccess-Berechtigung

Standardmäßig haben benutzerdefinierte Tastaturen keinen Netzwerkzugriff. Wenn Sie spezielle Zeichensätze herunterladen oder eine Cloud-Synchronisierung bereitstellen müssen, müssen Sie die Taste `RequestOpenAccess` unter `NSExtensionAttributes` in `Info.plist` hinzufügen und auf `JA` setzen. Apple überprüft jedoch Apps, die einen offenen Zugang anfordern. Wenn sich eine Tastatur auf Offline-Sonderzeichen konzentriert, überspringen Sie diese Taste, um Vertrauensprobleme der Benutzer zu vermeiden.

Erstellen Sie die Basic UI

Die `viewDidLoad`-Methode im `KeyboardViewController` ist der Ort, an dem Sie Ihr Tastaturlayout einrichten. Sie können ein Storyboard verwenden oder die Benutzeroberfläche programmgesteuert erstellen. Für ein komplexes Layout mit vielen Sonderzeichen bietet die programmatische Benutzeroberfläche eine bessere Kontrolle über dynamische Größen und Auto-Layout-Einschränkungen.

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)
 ])
}

Diese minimale Einrichtung erzeugt einen vertikalen Stapel, der Reihen von Schlüsseln hält.

Gestaltung des Tastaturlayouts für Sonderzeichen

Die Benutzer müssen schnell Symbole finden, ohne endlose Schlüsselseiten zu durchsuchen.

  • Währungssymbole: $, €, £, ¥, ₩, ❤
  • Mathematische Zeichen: +, -, ×, ÷, =, ≠, ≈, ±, √, ∞, ∫
  • Abrechnungsvarianten: ..., —, –, •, ‹, ›, «, »
  • Zugepasste Buchstaben: á, é, í, ó, ú, ü, ñ, ç
  • Pfeile und Richtungs: ←, →, ↑, ↓, ↔, ↕

Implementieren Sie zwei oder drei Layoutebenen: eine Hauptalphabetebene mit einem Umschalter zum Wechseln zu einer Symbolebene und möglicherweise eine sekundäre Ebene mit weniger gemeinsamen Zeichen. Verwenden Sie einen dedizierten Schlüssel (z. B. "123" oder "# + ="), um zwischen den Ebenen zu wechseln. Jede Ebene ist eine separate Sammlung von Zeilenansichten, die Sie über die "inputView" -Eigenschaft austauschen können oder indem Sie Ansichten ausblenden / anzeigen.

Long-Press-Gesten für zusätzliche Charaktere

Wenn Ihre Tastatur ein Standard-QWERTY-Layout anzeigt, erwarten die Benutzer, dass lange Drücke Zeichenvarianten anzeigt. Zum Beispiel zeigt langes Drücken der "E" -Taste "é", "è", "ê", "ë". Implementieren Sie dies, indem Sie jeder Taste einen "UILongPressGestureRecognizer" hinzufügen. Wenn Sie ausgelöst werden, präsentieren Sie eine Popup-Ansicht über der Taste mit den verfügbaren Varianten. Das Popup sollte entlassen werden, wenn der Benutzer den Finger hebt oder eine der Varianten tippt.

Die Systemtastatur von Apple verwendet einen internen Mechanismus, aber für Ihre Erweiterung können Sie eine "UIView" verwenden, die als schwimmende Blase erscheint. Stellen Sie sicher, dass das Popup nicht über den sicheren Bereich hinausreicht und die Ausrichtung des Geräts respektiert.

Code Snippet: Hinzufügen von Long Press zu einem Key

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

Verfolgen Sie im Handler den Zustand `.began`, `.changed` und `.ended`, um anzuzeigen, zu aktualisieren und aus dem Popup auszuwählen.

Key Size und Abstand

iOS-Geräte unterscheiden sich in der Bildschirmbreite. Verwenden Sie proportionale Größen: 10-12 Tasten pro Zeile auf iPhones und etwas mehr auf iPads. Jeder Schlüssel sollte mindestens 28 Punkte groß sein, um die Apple-Richtlinien für die menschliche Benutzeroberfläche für Touch-Ziele zu erfüllen. Legen Sie Einschränkungen fest, damit Tasten auf kleineren Bildschirmen entsprechend schrumpfen. Stellen Sie bei Sonderzeichen sicher, dass Symbole deutlich sichtbar sind; Verwenden Sie eine Schriftgröße von 16-18 Punkten für die Tastenetiketten.

Umgang mit Input mit dem Text Document Proxy

Wenn ein Benutzer auf eine Taste tippt, muss die Tastatur das Zeichen in das aktuell fokussierte Textfeld einfügen. Dies geschieht über das `textDocumentProxy`-Objekt, eine Instanz von `UITextDocumentProxy`. Der Proxy bietet Methoden wie `insertText( :)`, `deleteBackward()` und `adjustTextPosition(byCharacterOffset:)`.

Für Sonderzeichen müssen Sie oft Multibyte-Glyphen einfügen (wie Emojis oder Kombination von Diakritischen). Diese werden korrekt von `insertText` behandelt, solange Sie die richtige Unicode-Zeichenfolge übergeben. Zum Beispiel, um das akzentuierte Zeichen "é" einzufügen, rufen Sie "proxy.insertText("é")" auf. Für eine Kombination von Akzent wie "e" mit einem Kombination von akutem Akzent (U + 0301), würden Sie beide Zeichen einfügen: "proxy.insertText("e\u{0301}"). Es ist jedoch einfacher, die vorkomponierte Form zu verwenden: ""\u{00E9}"" .

Handhabung von Shift und Caps Lock

Schaltzustandsverwaltung implementieren, um zwischen Groß- und Kleinbuchstaben und optional Großbuchstabensymbolen umzuschalten. Wenn die Schalttaste aktiv ist, sollte Ihre Tastatur Großbuchstabenvarianten anzeigen. Bei Sonderzeichen mit Fall (wie griechischen Buchstaben) beides angeben. Bei Symbolen ohne Fall kann der Schaltzustand ignoriert oder zur Anzeige alternativer Symbole verwendet werden (z. B. zeigt die Schalttaste + Zahlentaste oft das Symbol über der Zahl).

Wenn der Benutzer auf die Schalttaste tippt, schaltet er sie um und lädt die Tasten neu. Wenn die Schalttasten gesperrt sind, erkennen Sie einen Doppeltipp auf die Schalttaste; aktivieren Sie einen persistenten Schalttastenzustand und zeigen Sie einen Indikator an (z. B. unterstrichene Schalttaste).

Löschen und Cursor-Kontrolle

Fügen Sie eine Löschtaste hinzu, die `proxy.deleteBackward()` aufruft. Für eine Sonderzeichentastatur müssen Benutzer möglicherweise ganze Wörter schnell löschen. Sie können eine Aktion "Wort löschen" implementieren, indem Sie `deleteBackward()` in einer Schleife aufrufen oder indem Sie die `adjustTextPosition`-Methode verwenden, um den Cursor rückwärts über Wortgrenzen zu bewegen und dann zu löschen. Apple begrenzt jedoch, wie viel Sie den Cursor über `adjustTextPosition` aus Datenschutzgründen manipulieren können; Sie können den Text nicht lesen um den Cursor herum.

Um den Cursor vorwärts oder rückwärts zu bewegen, verwenden Sie `proxy.adjustTextPosition(byCharacterOffset: 1)` und `-1`. Dies wird für eine Schaltfläche "nächster Speicherplatz" oder "früherer Speicherplatz" verwendet, wenn Sie eine einfügen möchten.

Aktivieren und Testen der Tastaturerweiterung

Simulatorprüfung

Führen Sie in Xcode die Container-App auf einem Simulator aus. Gehen Sie dann zu Einstellungen > Allgemein > Tastatur > Tastaturen > Neue Tastatur hinzufügen und wählen Sie Ihre benutzerdefinierte Tastaturerweiterung unter dem Abschnitt “Third-Party Keyboards” aus. Möglicherweise müssen Sie auf Ihre Tastatur wechseln, indem Sie auf das Globussymbol tippen, wenn ein Textfeld aktiv ist. Debuggen von Tastaturerweiterungen im Simulator kann schwierig sein, da Haltepunkte nicht immer ausgelöst werden. Verwenden Sie `NSLog` oder `print`-Anweisungen und überprüfen Sie die Konsolenausgabe.

Physische Geräteprüfung

Gerätetests sind wichtig, da der Simulator nicht alle iOS-Verhalten vollständig emuliert (z. B. Tastaturhöhenbeschränkungen, Autokorrektur). Installieren Sie die Container-App über ein Entwicklungsbereitstellungsprofil auf einem Gerät. Aktivieren Sie dann die Tastatur über Einstellungen. Verwenden Sie die Funktion "FLT:0" von Xcode zum Anbringen von Prozess, um die Erweiterung zu debuggen: Wählen Sie im Debug-Navigator den Prozessnamen Ihrer Erweiterung (z. B. "SpecialCharKeyboard").

Gemeinsame Fragen

  • Keyboard erscheint nicht: Stellen Sie sicher, dass die Erweiterung ordnungsgemäß aktiviert ist und die Berechtigung `RequestOpenAccess` Ihren Bedürfnissen entspricht.
  • Layout nicht richtig dimensioniert: Überschreiben Sie `viewWillLayoutSubviews` in Ihrem `KeyboardViewController` und aktualisieren Sie die Höheneinschränkung der Ansicht. Die Tastatur muss der erwarteten Höhe des Systems entsprechen (normalerweise zwischen 216 und 330 Punkten auf dem iPhone und größer auf dem iPad).
  • Input not registration: Überprüfen Sie, ob Sie `insertText` auf dem richtigen Proxy-Objekt aufrufen. Der Proxy ist verfügbar, sobald die Tastatur aktiv ist.

Datenschutz und Benutzerberechtigungen

Benutzerdefinierte Tastaturen sind ein Punkt, der die Privatsphäre der Benutzer betrifft. Apple verlangt, dass Tastaturen keine Tastendruckdaten ohne ausdrückliche Zustimmung des Benutzers sammeln, übertragen oder speichern. Folgende Richtlinien sind von entscheidender Bedeutung:

  • Keine Netzwerkaufrufe: Sofern Sie `RequestOpenAccess` nicht aktiviert haben und der Benutzer die Berechtigung erteilt, kann Ihre Erweiterung keine Netzwerkanfragen stellen. Selbst bei offenem Zugriff müssen Sie die Datenerfassung in einer Datenschutzerklärung offenlegen.
  • Kein Zugriff auf die Zwischenablage: Ihre Tastatur kann die Systemzwischenablage nicht lesen.
  • Keine Analyse von Tastenanschlägen: Sie können nicht protokollieren, welche Tasten gedrückt werden. Wenn Sie die Benutzerpräferenzen (z. B. häufig verwendete Symbole) lernen müssen, speichern Sie diese Daten nur lokal mit einer klaren Erklärung und einer Opt-Out-Option.
  • Bieten Sie einen Schalter für die Datenerfassung an: Wenn Ihre Tastatur Netzwerke für spezielle Zeichenaktualisierungen verwendet, fügen Sie einen Schalter in die Container-App ein, um ihn zu aktivieren / zu deaktivieren, und respektieren Sie die Wahl des Benutzers.

Wenn Benutzer Ihre Tastatur aktivieren, zeigt iOS eine Warnung an, dass die Tastatur alle Tastenanschläge sammeln könnte. Die Bewertungen und Bewertungen Ihrer App werden darunter leiden, wenn Benutzer das Gefühl haben, dass ihre Daten gefährdet sind. Seien Sie ehrlich und transparent in Ihrer App Store-Beschreibung und in der Container-App.

Design-Tipps für den Zugriff auf Sonderzeichen

Organisieren Sie Symbole für Fitts’ Gesetz

Platzieren Sie die am häufigsten verwendeten Sonderzeichen in der Mitte der Tastatur oder in der unteren Reihe, um die Daumen zu erreichen. Wenn Ihre Zielgruppe beispielsweise häufig Währung eingibt, legen Sie $, € und £ in die Startzeile der Symbolebene. Gruppieren Sie ähnliche Symbole, um die kognitive Belastung zu reduzieren.

Verwenden Sie visuelles Feedback

Wenn eine Taste gedrückt wird, zeigen Sie ein kurzes Popup (wie die Zeichenvorschau der Systemtastatur), um die Eingabe zu bestätigen. Dies ist besonders hilfreich für kleine Symbole. Implementieren Sie eine benutzerdefinierte "UIControl" für jede Taste, die auf das Touchdown-Ereignis reagiert und eine vergrößerte Version des Zeichens über der Taste anzeigt.

Integrieren Sie eine Auto-Advance-Funktion für Symbole

Nach dem Einfügen eines Sonderzeichens erwarten viele Benutzer, dass die Tastatur automatisch zur Buchstabenschicht zurückkehrt. Sie können dieses Verhalten mit einer Option in der Container-App umschalten.

Unterstützung der Zugänglichkeit

Stellen Sie sicher, dass VoiceOver alle Tasten lesen kann. Legen Sie auf jeder Tastentaste "AccessibilityLabel" auf das Zeichen oder seinen Namen (z. B. "asterisk" für *). Geben Sie für symbolische Tasten, bei denen die Glyphe nicht offensichtlich ist, eine gesprochene Beschreibung an. Unterstützen Sie auch den dynamischen Typ, damit Benutzer mit großen Texteinstellungen die Symbole deutlich sehen können.

Zusätzliche Überlegungen

Leistungsoptimierung

Tastaturerweiterungen laufen in einer speicherbeschränkten Umgebung. Vermeiden Sie das Laden schwerer Bilder oder komplexer Animationen. Verwenden Sie leichte "UIButton"-Unterklassen oder "UICollectionView" für eine effiziente Wiederverwendung. Auf älteren Geräten sollte das Rendern eines vollständigen Rasters mit 30+ Tasten glatt sein. Profilieren Sie Ihre Erweiterung mit Instrumenten, um nach Frame-Drops zu suchen.

Lokalisierung

Wenn Ihre Tastatur mehrere Sprachen unterstützt, sollten Sie lokalisierte Symbolsätze bereitstellen. Zum Beispiel könnte ein französischer Benutzer « » benötigen, während ein deutscher Benutzer ß und Ä, Ö, Ü benötigt. Verwenden Sie die Taste `PrimaryLanguage` in `Info.plist`, um auf die Standardsprache hinzuweisen, aber lassen Sie die Benutzer über die Container-App wechseln. Speichern Sie das ausgewählte Layout in `UserDefaults` mit einer gemeinsamen Suite (über App-Gruppen), damit die Erweiterung die Präferenz lesen kann.

App Store Review

Apple überprüft benutzerdefinierte Tastaturerweiterungen strenger als normale Apps. Stellen Sie sicher, dass Ihre Tastatur nicht abstürzt, keine beleidigenden Inhalte enthält und Systembeschränkungen nicht umgeht. Vermeiden Sie Werbebanner oder Werbe-Overlays auf der Tastatur selbst. Wenn Ihre Tastatur aus irgendeinem Grund Netzwerkzugriff erfordert, seien Sie bereit, dies während des Überprüfungsprozesses zu rechtfertigen.

Updates und Wartung

Neue iOS-Versionen können die Interaktion von Tastaturerweiterungen mit dem System verändern. Testen Sie Ihre Erweiterung auf Beta-Versionen und aktualisieren Sie die Implementierungen der UIInputViewController-Methode nach Bedarf. Zum Beispiel hat iOS 16 neue Tastaturlayout-APIs für größere Tastaturen auf iPads eingeführt. Behalten Sie die Release-Notizen von Apple im Auge.

Schlussfolgerung

Die Implementierung einer benutzerdefinierten Tastatur mit Sonderzeichen unter iOS ist eine leistungsstarke Möglichkeit, die Tippeffizienz für Benutzer zu verbessern, die Symbole, akzentuierte Buchstaben oder Emojis benötigen, die die Systemtastatur nicht sofort auftaucht. Durch den Aufbau einer Tastaturerweiterung mit sorgfältig gestalteten Layouts, intuitivem Zugriff auf lange Druckgeräte und robuster Eingabeverarbeitung können Sie ein nahtloses Erlebnis bieten. Priorisieren Sie die Privatsphäre, halten Sie sich an Apples Richtlinien und testen Sie gründlich auf echten Geräten, um Zuverlässigkeit zu gewährleisten. Mit dem richtigen Design kann Ihre benutzerdefinierte Tastatur ein wesentliches Werkzeug für mehrsprachige Benutzer werden, Entwickler, Autoren und jeder, der häufig Nicht-Standard-Zeichen eingibt.

Für weitere Informationen lesen Sie die offizielle Apple-Dokumentation zum Erstellen einer benutzerdefinierten Tastatur, den App Extension Programming Guide und die Human Interface Guidelines für Tastaturen.