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

use*_*687 11 xcode ios

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

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

目前我#define ENV @"PROD"App-Prefix.pch文件中使用这样做,但是在将pkg发送给苹果进行审核时有机会错过这个:(

Dav*_*ess 27

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

因此,在黑客攻击Xcode几个小时之后,这就是我提出的:

步骤1:使用类型字符串将关键字"SchemeName"添加到Info.plist.

步骤2:编辑默认方案,然后在Build - > Pre-actions上添加一个新的Run Script,其中包含以下内容:

/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$PROJECT_DIR/$INFOPLIST_FILE"
Run Code Online (Sandbox Code Playgroud)

确保并从"提供构建设置"下选择目标.

步骤3:现在可以根据需要多次复制该方案(管理方案... - >选择现有方案 - >点击齿轮图标 - >复制)例如,您可以创建开发,分段,生产,App Store等.如果您希望在版本控制中携带这些方案,请不要忘记单击"共享".

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

NSString *schemeName = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SchemeName"];
Run Code Online (Sandbox Code Playgroud)

现在,代码可以在运行时正确配置.没有令人讨厌的预处理器宏来处理,也没有脆弱的配置来维护.

  • 这太棒了.感谢您分享这一点. (2认同)
  • 对于 swift 4.2 使用: Bundle.main.infoDictionary?["SchemeName"] as? 细绳 ??“” (2认同)
  • 在 XCode 11.4 中,我必须删除脚本中的 `$PROJECT_DIR/` 部分,因此它变为: `/usr/libexec/PlistBuddy -c "Set :SchemeName \"$SCHEME_NAME\"" "$INFOPLIST_FILE"` (2认同)

ldi*_*ual 6

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

#ifdef DEBUG
    // Something
#else
    // Something else
#endif
Run Code Online (Sandbox Code Playgroud)

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

一旦RunDebug(产品 -> 方案 -> 编辑方案)上设置配置,此变量将被设置:

在此处输入图片说明