首页 > 解决方案 > 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/I6fixBYaAgAJhttps://discord.com/channels/423249981340778496/713442856190083094https:// /developer.apple.com/forums/thread/675071https://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 .

标签: pythoniosxcodekivy

解决方案


解决了!

事实证明,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.

推荐阅读