iOS(Xcode)上的 Python-Kivy:Foundation 上出现 dlopen 错误:(...):找不到图像

Posted

技术标签:

【中文标题】iOS(Xcode)上的 Python-Kivy:Foundation 上出现 dlopen 错误:(...):找不到图像【英文标题】:Python-Kivy on iOS (Xcode): Got dlopen error on Foundation: (...): image not found 【发布时间】:2021-06-05 17:19:32 【问题描述】:

我是 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] [framework] 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

[INFO] [Kivy] v2.1.0.dev0

[INFO] [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)]

[INFO] [Python] 解释器位于“/var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp-training.app/geo-esp-training”

[INFO] [Factory] ​​已加载 186 个符号

[INFO] [Image] 提供者:img_imageio、img_tex(img_dds、img_sdl2、img_ffpyplayer、img_pil 被忽略)

[INFO] [Text] 提供者:sdl2

[INFO] [Video] Provider: 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 连接中断

[WARNING] [Factory] ​​忽略类“ScalableLabel”重新声明。当前 - 模块:无,cls:,基类:无,文件名:无。忽略 - 模块:无,cls:无,基类:标签,文件名:/private/var/containers/Bundle/Application/2C4A20A0-A9AA-4AC7-B8A7-1A6322B17DD9/geo-esp-training.app/YourApp/MyTabbedPanel.kv .

Traceback(最近一次调用最后一次):

文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 252 行,在

文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 180 行,在 __ init __ 中

PermissionError: [Errno 1] Operation not allowed: '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

Traceback(最近一次调用最后一次):

文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 252 行,在

文件“/Users/henrik/geo-esp-training-ios/YourApp/main.py”,第 180 行,在 init 中

PermissionError: [Errno 1] Operation not allowed: '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:我从上面删除了以下内容!它与当前的问题并不真正相关:

[WARNING] [Factory] ​​忽略类“ScalableLabel”重新声明。当前 - 模块:无,cls:,基类:无,文件名:无。忽略 - 模块:无,cls:无,基类:标签,文件名:/private/var/containers/Bundle/Application/60A4A07E-4A81-49E0-A0CC-4497809CC40A/geo-esp-training.app/YourApp/MyTabbedPanel.kv .

【问题讨论】:

【参考方案1】:

解决了!

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

【讨论】:

以上是关于iOS(Xcode)上的 Python-Kivy:Foundation 上出现 dlopen 错误:(...):找不到图像的主要内容,如果未能解决你的问题,请参考以下文章

由 xcode 4.6 与 xcode 5.0 创建时,iOS 应用程序在 iOS 7.0 设备上的行为不同

用于ios开发的Windows上的Xcode [重复]

IOS 5 上的 Xcode 4.5 错误

iOS 10 / Xcode 8 设备上的 NSLog 似乎被截断了?为啥?

iOS 上的 Firebase 身份验证失败(Unity、Xcode)

Xcode 4.3 和 iOS 3.x 设备上的调试