Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting Xcode Build Settings Terminal

I want to change build settings of a .xcodeproj without using Xcode IDE but through terminal commands (Codesigning Identity and Provisioning Profile to be exact).

I have searched all over but only found commands to build/archive the project from terminal, which I Do Not Want. What I want is to just change the settings, so that when I open the project in Xcode, it has the signing identities and provisioning profile set to what I had set in Terminal.

Xcodebuild command just builds/archives the project using what I pass as parameters, it doesn't set them as values in build settings of project.

Running xcodebuild -target <target-name> -showBuildSettings in terminal, where my project resides, gives me complete build settings of the project but I didn't get any method to set them.

Also I read here about using -setObject, but that also didn't help me as it also builds the code using parameters values I gave instead of actually setting them.

Currently using Xcode 6.3 and Xcode 7.

Any kind of help will be appreciated.

like image 923
Rishi Joshi Avatar asked Sep 23 '15 14:09

Rishi Joshi


1 Answers

All Xcode settings is actually store in <project-name>.xcodeproj/project.pbxproj . It looks like

buildSettings = {
    CODE_SIGN_ENTITLEMENTS = "";
    CODE_SIGN_IDENTITY = "iPhone Developer";
    "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";

    ...

    PRODUCT_NAME = "$(TARGET_NAME)";
    PROVISIONING_PROFILE = "";
    SKIP_INSTALL = YES;
};

Code Signing Identity is controlled by CODE_SIGN_IDENTITY key and Provisioning Profile is controlled by PROVISIONING_PROFILE key.

The project.pbxproj is a text file that can be edited by traditional text processing tools in CLI, such as sed with

sed -ie 's/CODE_SIGN_IDENTITY = "iPhone Developer"/CODE_SIGN_IDENTITY = ""/g' <project-name>.xcodeproj/project.pbxproj
sed -ie 's/PROVISIONING_PROFILE = ""/PROVISIONING_PROFILE = "1c28c979-6bef-4917-aa34-92aecd91315c";/g' <project-name>.xcodeproj/project.pbxproj

You can get the list of available Signing Identities with

security find-identity -v -p codesigning

For PROVISIONING_PROFILE, it's a UUID of provisioning file, it can be fetched with

grep -aA1 UUID /path/to/mobileprovision
like image 200
Quanlong Avatar answered Oct 09 '22 12:10

Quanlong