"找不到 CFBundle 的可执行文件",同时仅加载包含资源的bundle



我正在使用NSBundle将本地化文件加载到我的iOS应用程序中。

由于我使用 Xcode 11 进行构建,因此一切仍按预期工作,但每次我从该捆绑包中读取本地化时,我都会收到警告:

Cannot find executable for CFBundle [...] (not loaded)

问题是捆绑包中没有可执行文件。它只包含本地化文件和一个如下所示的Info.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSPrincipalClass</key>
<string></string>
</dict>
</plist>

捆绑包加载了

NSBundle *bundle = [NSBundle bundleWithPath:path];
if (![bundle isLoaded]) {
[bundle load];
}

和本地化阅读

NSString *string = [bundle localizedStringForKey:key value:defaultValue table:nil];

显然- load来自NSBundle只是为了从捆绑包中加载可执行文件。 从文档中:

捆绑包的可执行代码动态加载到正在运行的程序中(如果尚未加载代码(。

对于仅包含资源的捆绑包,无需调用- load