19

有没有办法找出运行时使用的方案?

可能有更好的方法来做到这一点,我正在尝试使用方案名称来设置访问环境(生产与开发)。

目前我#define ENV @"PROD"App-Prefix.pch文件中使用它来执行此操作,但是在将 pkg 发送到苹果进行审查时有机会错过这个:(

4

2 回答 2

36

我到处寻找答案,因为我真的不喜欢创建额外目标或额外配置集的想法。这两个选项只会造成巨大的配置同步问题。

因此,在破解 Xcode 几个小时后,我得出了以下结论:

第 1 步:将键“SchemeName”添加到您的 Info.plist 中,类型为字符串。

第 2 步:编辑您的默认方案并在 Build -> Pre-actions 添加一个新的运行脚本,其中包含以下内容:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE"

确保并从“提供构建设置”下选择一个目标。

第 3 步:现在复制该方案任意多次(管理方案... -> 选择现有方案 -> 单击齿轮图标 -> 复制)例如,您可以创建开发、登台、生产、应用商店等。如果您希望在版本控制中携带这些方案,请不要忘记单击“共享”。

第 4 步:在代码中,您可以像这样检索值:

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"];

或者在 Swift 中:

let schemeName = Bundle.main.infoDictionary?["SchemeName"] as? String ?? ""

现在,代码可以在运行时正确配置自身。无需处理讨厌的预处理器宏,也无需维护易碎的配置混乱。

更新:根据下面的评论,$PROJECT_DIR可能需要根据您的 Info.plist 在项目中的位置删除。

于 2014-10-17T21:22:32.880 回答
6

在模拟器或设备上运行应用程序时,DEBUG会设置变量,允许您从代码中使用它:

#ifdef DEBUG
    // Something
#else
    // Something else
#endif

您可以从目标的构建设置中看到此变量:

一旦Run配置设置为Debug(产品 -> 方案 -> 编辑方案),将设置此变量:

在此处输入图像描述

于 2013-04-07T00:00:19.290 回答