Find the Xcode Build scheme name at run time

前端 未结 2 1335
盖世英雄少女心
盖世英雄少女心 2020-12-15 07:18

Is there a way to find out the Scheme used at the run time ?

May be there is a better way to do this, I\'m trying to set the Access Environment (Production vs Develo

相关标签:
2条回答
  • 2020-12-15 08:00

    I searched far and wide for an answer to this because I really don't like the idea of creating extra Targets nor extra Configuration sets. Both of those options just create a huge Configuration synchronization problem.

    So, after hacking Xcode for a couple of hours, this is what I came up with:

    Step 1: Add the key "SchemeName" to your Info.plist with type string.

    Step 2: Edit your default scheme and on Build -> Pre-actions add a new Run Script with the following:

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

    Make sure and select a target from under "Provide build settings from".

    Step 3: Now duplicate that scheme as many times as you like (Manage Schemes... -> Select existing scheme -> Click gear icon -> Duplicate) For instance, you can create Development, Staging, Production, App Store, etc. Don't forget to click "shared" if you want these schemes carried around in version control.

    Step 4: In the code, you can retrieve the value like this:

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

    Or in Swift:

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

    Now, the code can configure itself correctly at runtime. No nasty preprocessor macros to deal with and no brittle configuration mess to maintain.

    UPDATE: According to @JAHelia, $PROJECT_DIR needs to be removed for Xcode 11.4. See their comment below.

    0 讨论(0)
  • 2020-12-15 08:09

    When running an app on the simulator or on your device, the DEBUG variable is set, allowing you to use it from your code:

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

    You can see this variable from your target's build settings:

    As soon as the Run configuration is set on Debug (Product -> Scheme -> Edit Scheme), this variable will be set:

    enter image description here

    0 讨论(0)
提交回复
热议问题