是否有办法找出运行时使用的方案?可能有更好的方法来实现这一点,我尝试使用方案名称来设置访问环境(生产与开发)。目前我使用App-Prefix.pch文件中的#define ENV @"PROD"来完成此操作,但在将pkg发送到苹果进行审查时,有可能会错过此操作:(
App-Prefix.pch
#define ENV @"PROD"
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在项目中的位置。
$PROJECT_DIR
1yjd4xko2#
在模拟器或您的设备上运行应用时,DEBUG变量已设置,允许您从代码中使用它:
DEBUG
#ifdef DEBUG // Something #else // Something else #endif
您可以从目标的构建设置中看到此变量:
在Debug上设置Run配置(产品-〉方案-〉编辑方案)后,将设置此变量:
Debug
Run
2条答案
按热度按时间tjvv9vkg1#
我到处寻找这个问题的答案,因为我真的不喜欢创建额外的目标或额外的配置集的想法,这两个选项只会产生一个巨大的配置同步问题。
在破解Xcode几个小时后,我得出了以下结论:
第1步:将键“SchemeName”添加到类型为string的Info.plist中。
第2步:编辑默认方案,并在Build -〉Pre-actions中添加一个新的运行脚本:
确保并从“提供生成设置自”下选择目标。
第3步:现在,您可以根据需要多次 * 复制 * 该方案(管理方案... -〉选择现有方案-〉单击齿轮图标-〉复制)例如,您可以创建开发、试运行、生产、应用程序商店等。如果您希望在版本控制中携带这些方案,请不要忘记单击“共享”。
第4步:在代码中,您可以按如下方式检索值:
或在Swift中:
现在,代码可以在运行时正确地配置自己,没有讨厌的预处理器宏需要处理,也没有脆弱的配置混乱需要维护。
更新:根据下面的评论,
$PROJECT_DIR
可能需要删除,这取决于Info.plist在项目中的位置。1yjd4xko2#
在模拟器或您的设备上运行应用时,
DEBUG
变量已设置,允许您从代码中使用它:您可以从目标的构建设置中看到此变量:
在
Debug
上设置Run
配置(产品-〉方案-〉编辑方案)后,将设置此变量: