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

标签 ios xcode

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

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

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

最佳答案

我广泛搜索了这个问题的答案,因为我真的不喜欢创建额外目标或额外配置集的想法。这两个选项只会产生一个巨大的配置同步问题。

所以,在破解 Xcode 几个小时之后,这就是我想出的:

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

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

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

确保并从“提供build设置来自”下选择一个目标。

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

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

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

或者在 Swift 中:

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

现在,代码可以在运行时正确配置自身。无需处理讨厌的预处理器宏,也无需维护脆弱的配置困惑。

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

关于ios - 在运行时查找 Xcode 构建方案名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15857285/

相关文章:

ios - 我希望图像在 imageview 上反复淡入淡出

iphone - 在 iPhone 应用程序中嵌入谷歌日历

ios - Lame - 将比特率增加到 320

javascript - 来自 iOS 的 POST 请求(AJAX、https)

iphone - iOS 应用程序泄漏

iphone - 如何使用 UIPickerView 在一个 View 中填充不同的文本字段?

ios - 显示应用程序首次打开的日期

ios - Xcode 7.1 在归档 swift ios 应用程序时挂起

ios - 添加 Swift 文件 : <unknown>:0: error: could not build Objective-C module 后构建 Swift Cocoa Touch Framework 时出错

ios - Xcode 7.1 : Simulator can't be opened because the identity of developer cannot be confirmed