只在调试模式下显示设置包。

6
我正在使用这个教程来为我的应用创建一个简单的设置Bundle。 问题是,我想在发布版本中完全隐藏设置,但我找不到方法。我已经阅读了这个问题,但对我来说仍然不清楚。
提前感谢您。
我通过从目标中删除Settings.bundle并将此脚本添加到构建阶段来完成此操作:
if [ ${CONFIGURATION} == "Debug" ]; then
cp -r ${PROJECT_DIR}/HotelZilla/Classes/Settings/Settings.bundle ${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app
fi

但仍然存在一个问题。如果我删除应用程序,然后在Release Scheme模式下启动它,设置包将不会出现。然后,我切换到Debug Scheme并重新构建,设置出现了,但是,如果我再次切换到Release,则设置仍然存在,因此似乎如果我在Release应用程序中添加了一个设置,我无法再次删除该包。这是正确的吗?

2个回答

9
如果您在设置中使用设置捆绑,则需要在发布配置中从应用程序的构建过程中排除它。对于要从编译中排除的代码,#ifdef DEBUG宏只有帮助作用- 它不能帮助排除设置捆绑。

您需要添加一个构建阶段来根据您正在使用的构建配置包括/排除您的设置捆绑。请查看如何根据Xcode中的构建配置有条件地包括文件?以获取帮助。


它起作用了。但我有一个问题。我从目标中删除了设置包,并在我的问题上面添加了脚本。问题是,如果我先在调试模式下构建,然后在发布模式下构建,设置包不会消失,因此,如果我犯了一个错误并将其发布到生产环境中,我将永远无法再次删除设置包? - Chompas
1
构建到模拟器不会从模拟器中删除之前构建的文件。这也适用于设备上的构建。但是,这只影响运行而不是构建本身 - 不同配置的构建存储在~/Library/Developer/Xcode/DerivedData/<Project>/Build/Products/<Configuration-Platform>的不同文件夹中。因此,这个额外的文件不会出现在您构建的任何存档中。存储提交是基于存档的。 - Steven Fisher
你也可以在构建脚本中添加一步骤,根据构建配置来删除该文件。这将解决你的模拟器问题。 - rickerbh

3
这可以通过运行脚本来完成。
  • 选择项目

  • 选择目标

  • 切换到Build Phases选项卡

  • 添加构建阶段(+)按钮

  • 选择添加运行脚本

添加脚本:

if [ "${CONFIGURATION}" == "Debug" ]; then
cp -r "${PROJECT_DIR}/${PRODUCT_NAME}/Settings/Settings_Debug.bundle/Root.plist" "${PROJECT_DIR}/${PRODUCT_NAME}/Settings.bundle/Root.plist"
echo "Debug settings bundle copied"
else
cp -r "${PROJECT_DIR}/${PRODUCT_NAME}/Settings/Settings_Release.bundle/Root.plist" "${PROJECT_DIR}/${PRODUCT_NAME}/Settings.bundle/Root.plist"
echo "Release settings bundle copied"
fi

NB: 你需要创建3个设置包 (Settings.bundle, Settings_Debug.bundle, Settings_Release.bundle)。这样在构建后,你就可以保存实际文件了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接