Xcode14.2编译Kivy-iOS应用报错:ImportError模块导出函数未定义
Kivy iOS编译错误排查与解决
问题背景
升级Xcode14.2后,在iPhone14模拟器编译Kivy应用时触发ImportError: dynamic module does not define module export function错误,错误指向kivy_event模块。环境配置:
- Kivy 2.2.0
- Python 3.10.10
- 通过
git clone https://github.com/kivy/kivy-ios.git安装kivy-ios
错误日志
2023-06-23 23:06:45.874539+1000 myappname[89840:3192006] Available orientation: KIVY_ORIENTATION=Portrait 2023-06-23 23:06:45.874682+1000 myappname[89840:3192006] Initializing python <string>:1: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses 2023-06-23 23:06:46.043803+1000 myappname[89840:3192006] Running main.py: /Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Bundle/Application/ABCEC6A7-2BCA-4E5F-A077-D1631BAEC3AD/myappname.app/YourApp/main.pyc [INFO ] [Logger ] Record log in /Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Data/Application/E0192F8C-4FE3-49D1-9459-17501C810541/Documents/.kivy/logs/kivy_23-06-23_1.txt [INFO ] [Kivy ] v2.2.1 [INFO ] [Kivy ] Installed at "/Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Bundle/Application/ABCEC6A7-2BCA-4E5F-A077-D1631BAEC3AD/myappname.app/lib/python3.10/site-packages/kivy/__init__.py" [INFO ] [Python ] v3.10.10 (main, Jun 21 2023, 13:10:16) [Clang 14.0.0 (clang-1400.0.29.202)] [INFO ] [Python ] Interpreter at "/Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Bundle/Application/ABCEC6A7-2BCA-4E5F-A077-D1631BAEC3AD/myappname.app/myappname" [INFO ] [Logger ] Purge log fired. Processing... [INFO ] [Logger ] Purge finished! Traceback (most recent call last): File "<string>", line 45, in load_module File "/Users/xxxx/myappnameApp/kivy-ios/dist/root/python3/lib/python3.10/imp.py", line 343, in load_dynamic File "<frozen importlib._bootstrap>", line 719, in _load File "<frozen importlib._bootstrap>", line 674, in _load_unlocked File "<frozen importlib._bootstrap>", line 571, in module_from_spec File "<frozen importlib._bootstrap_external>", line 1176, in create_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed ImportError: dynamic module does not define module export function (PyInit_kivy__event) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/xxxx/myappnameApp/kivy-ios/myappname-ios/YourApp/main.py", line 1, in <module> File "/Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Bundle/Application/ABCEC6A7-2BCA-4E5F-A077-D1631BAEC3AD/myappname.app/lib/python3.10/site-packages/kivy/uix/screenmanager.py", line 195, in <module> from kivy.event import EventDispatcher File "/Users/xxxx/Library/Developer/CoreSimulator/Devices/D942FE25-9538-4E1C-993C-9905F9B4E7EC/data/Containers/Bundle/Application/ABCEC6A7-2BCA-4E5F-A077-D1631BAEC3AD/myappname.app/lib/python3.10/site-packages/kivy/event.py", line 8, in <module> import kivy._event File "<string>", line 49, in load_module File "/Users/xxxx/myappnameApp/kivy-ios/dist/root/python3/lib/python3.10/imp.py", line 343, in load_dynamic ImportError: dynamic module does not define module export function (PyInit__event) 2023-06-23 23:06:46.220093+1000 myappname[89840:3192006] Application quit abnormally! 2023-06-23 23:06:46.232625+1000 myappname[89840:3192006] Leaving
原因分析
该错误属于版本兼容问题,核心诱因:
- Xcode14.2自带的Clang 14.0.0编译器与kivy-ios默认编译配置不兼容,导致Kivy的C扩展模块(如kivy.event)无法生成正确的Python模块导出符号(PyInit*)
- 日志显示运行时Kivy版本为2.2.1,但本地环境指定的是2.2.0,说明kivy-ios自动拉取了更高版本的Kivy,引发版本不一致
解决办法
1. 清理旧构建产物并重新初始化
cd kivy-ios rm -rf dist build python3 toolchain.py build kivy
2. 强制指定匹配的Kivy版本
构建时明确指定与本地环境一致的Kivy 2.2.0版本:
python3 toolchain.py build kivy==2.2.0
3. 适配Xcode14.2编译参数
修改kivy-ios的toolchain.py文件,在编译C扩展的参数列表中添加:
'-Wno-error=implicit-function-declaration', '-Wno-error=incompatible-function-pointer-types'
添加后重新构建所有依赖:
python3 toolchain.py build all
4. 重新打包应用
打开Xcode项目,执行Product > Clean Build Folder清理缓存,选择iPhone14模拟器重新运行。
内容的提问来源于stack exchange,提问作者Jesscralett
相关产品推荐
相关产品推荐

