在运行时查找Xcode构建方案名称

wr98u20j  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(102)

是否有办法找出运行时使用的方案?
可能有更好的方法来实现这一点,我尝试使用方案名称来设置访问环境(生产与开发)。
目前我使用App-Prefix.pch文件中的#define ENV @"PROD"来完成此操作,但在将pkg发送到苹果进行审查时,有可能会错过此操作:(

tjvv9vkg

tjvv9vkg1#

我到处寻找这个问题的答案,因为我真的不喜欢创建额外的目标或额外的配置集的想法,这两个选项只会产生一个巨大的配置同步问题。
在破解Xcode几个小时后,我得出了以下结论:

第1步:将键“SchemeName”添加到类型为string的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在项目中的位置。

1yjd4xko

1yjd4xko2#

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

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

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

Debug上设置Run配置(产品-〉方案-〉编辑方案)后,将设置此变量:

相关问题