I'd like to write a script that can read info like Bundle Identifier or maybe version number from the Info.plist of the app. Xcode doesn't seem to give that information in it's environment variables. Is there any other way to get them in sh/bash?
The defaults
command can read/write to any plist file, just give it a path minus the .plist
extension:
$ defaults read /Applications/Preview.app/Contents/Info CFBundleIdentifier
com.apple.Preview
This pulls the CFBundleIdentifier
value directly from the application bundle's Info.plist
file.
Defaults also works with binary plists without any extra steps.
BUNDLEID=$(defaults read $(dirname $PWD)/Info CFBundleIdentifier)
. This is because the Info.plist is in the parent folder above the Resources folder. –
Iniquitous man defaults
says: WARNING: The defaults command will be changed in an upcoming major release to only operate on preferences domains. General plist manipulation utilities will be folded into a different command-line program. –
Featherston $PATH
, but one can always use the full path in the script. –
Epochal /System/Application
and NOT just /Application
as it is shown in the original answer. Here is an example for Apple Mail app: defaults read /System/Applications/Mail.app/Contents/Info CFBundleIdentifier
. This way it works without a problem. –
Unpack Using PlistBuddy, an app by Apple it is possible to assign the string to var like this:
#!/bin/sh
BUNDLE_ID=$(/usr/libexec/PlistBuddy -c "Print :CFBundleIdentifier" "${BUILD_ROOT}/${INFOPLIST_PATH}")
Where BUILD_ROOT and INFOPLIST_PATH are variables set by Xcode if you run this script in a "Run Script" build phase.
This command worked for me:
/usr/libexec/PlistBuddy -c 'print ":CFBundleIdentifier"' Info.plist
You can just read the file directly from the built product. However, if you look at the info.plist file itself in the editor you will see the shell variables themselves. E.g. the Bundle ID is has the following shell command:
com.yourcompany.${PRODUCT_NAME:rfc1034identifier}
You can call ${PRODUCT_NAME:rfc1034identifier}
in any shell script that Xcode runs and it should populate.
There is a command line program installed on the Mac called PlistBuddy that can read/write values in a plist. Type 'man PlistBuddy' in Terminal to get more info.
© 2022 - 2024 — McMap. All rights reserved.