python - iOS(Xcode)上的 Python-Kivy:Foundation 上出现 dlopen 错误:(...):找不到图像
问题描述
我是 Xcode 和 iOS 的新手,但我设法在 iPhone 8 模拟器中构建和测试了我的 Python-Kivy 应用程序。
我将我的 Apple ID 用作“开发团队”。我已经在我的 iPhone (5s) 上批准了这一点。
当我在我的 iPhone 5s(运行 iOS 12.5.1)上部署我的应用程序时,它构建没有问题,但是当我尝试通过按图标运行它时,调试日志显示此错误:
Foundation 出现 dlopen 错误:dlopen(/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
Foundation 出现后备 dlopen 错误:dlopen(/Groups/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
2021-02-28 23:09:59.023510+0100 geo-esp-training[457:91731] XPC 连接中断
任何人都可以告诉我有什么问题吗?
我可以补充一点,我使用的是运行 MacOS Catalina 10.15.7 和 Xcode 版本 12.4 的 MacBook Pro(2012 年中)。
我还在 Xcode 中的 iPhone 5s 模拟器上运行了我的 Kivy 应用程序。这给出了一个稍微不同的错误,但应用程序确实运行没有任何实际问题。所以问题是:这些“dlopen”错误有多严重?这是与模拟器略有不同的错误:
在 Foundation 上出现 dlopen 错误:dlopen(/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1):找不到合适的图像。确实找到了:/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation: mach-o,但不是为 iOS 模拟器构建的
Foundation 出现后备 dlopen 错误:dlopen(/Groups/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
请注意,我在模拟器中没有收到此错误:
2021-02-28 23:09:59.023510+0100 geo-esp-training[457:91731] XPC 连接中断
请注意,我的 Mac 有 29 个“Foundation.framework”文件夹和总共 672 个“*Foundation.framework”文件夹......那么我怎么知道要指向哪个文件夹而不是“图像”所在的文件夹成立?
谢谢!亨利克·R。
PS:我已经尝试在https://groups.google.com/g/kivy-users/c/2kA4Gcr1czE/m/I6fixBYaAgAJ和https://discord.com/channels/423249981340778496/713442856190083094和https:// /developer.apple.com/forums/thread/675071和https://github.com/kivy/kivy-ios/issues/592 - 但没有结果。
这是在物理 iPhone 5s 上运行应用程序时 Xcode 的整个日志输出:
2021-02-28 23:09:53.270436+0100 geo-esp-training[457:91714] [DYMTLInitPlatform] 平台初始化成功
2021-02-28 23:09:53.757600+0100 geo-esp-training[457:91293] [框架] CUIThemeStore:没有主题注册为 id=0
2021-02-28 23:09:54.007960+0100 geo-esp-training[457:91293] 可用方向:KIVY_ORIENTATION=LandscapeLeft LandscapeRight PortraitUpsideDown
2021-02-28 23:09:54.008907+0100 geo-esp-training[457:91293] 初始化 python
2021-02-28 23:09:54.536792+0100 geo-esp-training[457:91293] 运行 main.py: /var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp- training.app/YourApp/main.pyc
[信息] [基维] v2.1.0.dev0
[信息] [Kivy] 安装在“/var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp-training.app/lib/python3.8/site-packages/kivy/init. py"
[INFO] [Python] v3.8.2(默认,2021 年 2 月 26 日,22:00:00)
[Clang 12.0.0 (clang-1200.0.32.29)]
[信息] [Python] 解释器位于“/var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp-training.app/geo-esp-training”
[INFO] [Factory] 186 个符号已加载
[信息] [图像] 提供者:img_imageio、img_tex(img_dds、img_sdl2、img_ffpyplayer、img_pil 被忽略)
[信息] [文本] 提供者:sdl2
[INFO] [Video] 提供者:null(['video_ffmpeg', 'video_ffpyplayer'] 被忽略)
Foundation 出现 dlopen 错误:dlopen(/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
Foundation 出现后备 dlopen 错误:dlopen(/Groups/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
2021-02-28 23:09:59.023510+0100 geo-esp-training[457:91731] XPC 连接中断
[警告] [工厂] 忽略类“ScalableLabel”重新声明。当前 - 模块:无,cls:<class 'sharebox_ubuntu.ScalableLabel'>,基类:无,文件名:无。忽略 - 模块:无,cls:无,基类:标签,文件名:/private/var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp-training.app/YourApp/MyTabbedPanel.kv .
回溯(最近一次通话最后):
文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 252 行,在 <模块>
文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 180 行,在 __ init __
PermissionError:[Errno 1] 不允许操作:'geo-esp-train.cfg'
2021-02-28 23:09:59.085006+0100 geo-esp-training[457:91293] 应用程序异常退出!
2021-02-28 23:09:59.294003+0100 geo-esp-training[457:91293] 离开
编辑(添加)- 3 月 10 日:
我仍然没有找到解决方案,也没有在我发布此“dlopen”问题的论坛上收到任何答复。有人让我尝试更新的 iPhone,所以我买了 iPhone 7。我的 Python-Kivy 应用程序在 iPhone 7 模拟器(在 Xcode 中)上运行没有任何实际问题。但是物理 iPhone 7 给出了与 iPhone 5s 相同的错误。以下是 Xcode 日志输出的相关部分:
Foundation 出现 dlopen 错误:dlopen(/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
Foundation 出现后备 dlopen 错误:dlopen(/Groups/System/Library/Frameworks/Foundation.framework/Versions/Current/Foundation, 1): image not found
回溯(最近一次通话最后):
文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 252 行,在
文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 180 行,在 init
PermissionError:[Errno 1] 不允许操作:'geo-esp-train.cfg'
2021-03-10 14:18:50.105679+0100 geo-esp-training[448:20514] 应用程序异常退出!
2021-03-10 14:18:50.161136+0100 geo-esp-training[448:20514] 离开
请帮忙!让这个应用程序在 iOS 上运行非常重要!
PS:我从上面删除了以下内容!它与当前的问题并不真正相关:
[警告] [工厂] 忽略类“ScalableLabel”重新声明。当前 - 模块:无,cls:<class 'sharebox_ubuntu.ScalableLabel'>,基类:无,文件名:无。忽略 - 模块:无,cls:无,基类:标签,文件名:/private/var/containers/Bundle/Application/60A4A07E-4A81-49E0-A0CC-4497809CC40A/geo-esp-training.app/YourApp/MyTabbedPanel.kv .
解决方案
解决了!
事实证明,Xcode 和 iOS 以及 dlopen 找不到 'Foundation.framework' 'image' 并不是真正的问题。
Python给出了这个错误日志:
Traceback (most recent call last):
File "/Users/henrik/geo-esp-training-ios/YourApp/main.py", line 252, in < module >
File "/Users/henrik/geo-esp-training-ios/YourApp/main.py", line 180, in __ init __
PermissionError: [Errno 1] Operation not permitted: 'geo-esp-train.cfg'
2021-03-10 14:18:50.105679+0100 geo-esp-training[448:20514] Application quit abnormally!
2021-03-10 14:18:50.161136+0100 geo-esp-training[448:20514] Leaving
解决方案是在 Python-Kivy 中主动指定我的数据文件必须写入应用程序用户数据目录:
class RootLayout(FloatLayout): # This is the root widget of my Kivy app
def __init__(self, **kwargs):
super().__init__(**kwargs)
app = App.get_running_app()
print("app.directory = ", app.directory)
print("app.user_data_dir = ", app.user_data_dir)
global configfilename, user_data_dir_path
configfilename = os.path.join(app.user_data_dir, 'geo-esp-train.cfg')
user_data_dir_path = app.user_data_dir # Used for other data files.
推荐阅读
- javascript - 将整数转换为 HH:MM:SS
- css - 如何解决搜索框的 CSS 宽度问题
- javascript - 如何从区间回调中访问创建区间的对象?
- javascript - 如何在另一个文件的函数中使用这个值
- flutter - 是否可以创建一个泛型类型,它是 Flutter 中某个类型的后代?
- hazelcast - 使用索引时 hazelcast 迁移缓慢
- java - Spring web mvc + Thymeleaf ModelAttribute 编辑对象中的列表
- java - 如何在已弃用的 Gradle 方法上找到替代方法?
- javascript - nodejs 默认情况下会阻止目录/路径遍历吗?
- laravel - 如何在laravel中重定向到客户登录页面