Profile
Back to NewsBack
GitHub Trending 3 min
Reader Mode
fcitx-contrib/fcitx5-ios: Fcitx5 iOS edition, currently developer beta. 小企鹅输入法 iOS 开发者公测 https://t.me/fcitx5macos/16126

fcitx-contrib/fcitx5-ios: Fcitx5 iOS edition, currently developer beta. 小企鹅输入法 iOS 开发者公测 https://t.me/fcitx5macos/16126

12 hours ago

English | 中文

Fcitx5 iOS

Fcitx5 input method framework ported to iOS ≥ 16.3.

Currently developer beta. Please download IPA and install with SideStore.

Note: Without developer account, App Group can't be used, so please

  • grant full access to keyboards;
  • click Sync config after making changes to configuration or data.

Build for simulator

This project is NOT managed by Xcode, but Xcode is needed for iOS SDK.

Below assumes Apple Silicon. For Intel, replace all SIMULATORARM64 with SIMULATOR64.

Install dependencies

brew install cmake ninja gettext pkg-config
./scripts/install-deps.sh SIMULATORARM64

Apply patches

./scripts/patch.sh

Build with CMake

cmake -B build/SIMULATORARM64 -G Ninja -DCMAKE_BUILD_TYPE=Debug -DPLATFORM=SIMULATORARM64
cmake --build build/SIMULATORARM64 && ./scripts/code-sign.sh SIMULATORARM64

You can also use Cmd+Shift+B in VSCode to execute a task.

Play with simulator

xcrun simctl list devices
xcrun simctl boot UUID
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app
xcrun simctl install booted build/SIMULATORARM64/src/Fcitx5.app
After the first time you execute xcrun simctl install, you need to add Fcitx5 in Settings -> General -> Keyboard -> Keyboards -> Add New Keyboard.
  • Simulator is not emulator (virtual machine). Simulator file system is mapped from host filesystem. A process in simulator is a process in macOS.
  • App and input method (custom keyboard extension) are different programs. They share a directory (via App Group) in ~/Library/Developer/CoreSimulator/Devices/UUID/data/Containers/Shared/AppGroup.

Test

E2E test

npm i -g appium
appium driver install xcuitest
pip install -r appium/requirements.txt
pytest appium
Use /Applications/Xcode.app/Contents/Applications/Accessibility Inspector.app to check identifier of UI elements.

Build for iOS device

Generate an unsigned IPA and install it with SideStore.

Below assumes you've already done with simulator.

./scripts/install-deps.sh OS64
cmake -B build/OS64 -G Ninja -DCMAKE_BUILD_TYPE=Release -DPLATFORM=OS64
cmake --build build/OS64
cd build/OS64/src && rm -rf Payload Fcitx5.ipa && mkdir Payload
cp -r Fcitx5.app Payload && zip -r Fcitx5.ipa Payload

Real device debug

OOM

There is a 77 MB memory limit for keyboard extension. When memory approaches the limit, you will see in Console.app like Received memory warning. for the process. Later if memory exceeds the limit, you will see
memorystatus: keyboard [14871] exceeded mem limit: ActiveHard 77 MB (fatal)
memorystatus: killing process 14871 [keyboard] in high band FOREGROUND (100) - memorystatus_available_pages: 121469
keyboard[14871] Corpse allowed 1 of 5
1817600.392 memorystatus: killing_specific_process pid 14871 [keyboard] (per-process-limit 100 16s rf:-) 78848KB - memorystatus_available_pages: 121472

See Keyboard extension memory profiling for a repeatable investigation procedure and the September 2026 Chinese keyboard investigation for a worked example.

Memory monitor

Use /Applications/Xcode.app/Contents/Applications/Instruments.app's Activity Monitor. If Instruments cannot see a connected phone, follow the real-device Instruments setup and DDI troubleshooting procedure.

Crash

Crash reports are available in Settings -> Privacy & Security -> Analytics & Improvements -> Analytics Data. Send them to mac and open with Console.app.

Credits

Thanks to these 3rd-party Open Source projects.
Chat with me