Parsing mobileprovision files in bash?

后端 未结 6 576
一个人的身影
一个人的身影 2020-12-02 14:32

I am tying building a php/bash/mysql system for automating adhoc distribution for iPhone apps. But I want to read the application-identifier key in mobileprovision file of p

相关标签:
6条回答
  • 2020-12-02 15:18

    If you want to extract the plist from the mobileprovision in a proper way and not rely on grepping/sedding/etc., you can use OpenSSL as follow:

    openssl smime -inform der -verify -noverify -in file.mobileprovision
    

    A complete example in your case could be:

    openssl smime -inform der -verify -noverify -in file.mobileprovision > tmp.plist
    /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' tmp.plist
    

    The OpenSSL part should work on any platform, although I've only done that on a Mac so far. PlistBuddy is only on Mac, but other utilities can be found to read/write property list files.

    0 讨论(0)
  • 2020-12-02 15:24

    It is mildly tedious, since a .mobileprovision is "PKCS #7 signed data" or so.

    Fortunately, you can probably get away with using grep :)

    0 讨论(0)
  • 2020-12-02 15:26

    One solution among many...

    Use egrep with the -a option, which treats binary files like text files and '-A 2' which will display the two lines after the string you want to match: ApplicationIdentifierPrefix.

    After that, trim the line of brackets and whitespace using sed.

    Using a series of pipes:

    egrep -a -A 2 ApplicationIdentifierPrefix file.mobileprovision | grep string | sed -e 's/<string>//' -e 's/<\/string>//' -e 's/ //'
    
    0 讨论(0)
  • 2020-12-02 15:28

    If your running this on a machine with mac os x, you can use the following:

    /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin <<< $(security cms -D -i path_to_mobileprovision)
    
    0 讨论(0)
  • 2020-12-02 15:28

    I used the code from mobileprovision-read repository to be able to pull information from the mobileprovision file. This uses macOS APIs to read the file.

    Here is the usage from running the generated program:

    mobileprovision-read -- mobileprovision files querying tool.
    
    USAGE
    mobileprovision-read -f fileName [-o option]
    
    OPTIONS
        type – prints mobileprovision profile type (debug, ad-hoc, enterprise, appstore)
        appid – prints application identifier
    Will print raw provision's plist if option is not specified.
    You can also use key path as an option.
    
    EXAMPLES
    mobileprovision-read -f test.mobileprovision -o type
        Prints profile type
    
    mobileprovision-read -f test.mobileprovision -o UUID
        Prints profile UUID
    
    mobileprovision-read -f test.mobileprovision -o ProvisionedDevices
        Prints provisioned devices UDIDs
    
    mobileprovision-read -f test.mobileprovision -o Entitlements.get-task-allow
        Prints 0 if profile doesn't allow debugging 1 otherwise
    
    0 讨论(0)
  • 2020-12-02 15:31

    I created a bash function based on jlawrie's answer to list all .mobileprovision's bundle IDs from the ~/Library/MobileDevice/Provisioning Profiles folder.

    Save this into your .bash_profile and just call it with list_xcode_provisioning_profiles from a terminal.

    list_xcode_provisioning_profiles() {
        while IFS= read -rd '' f; do
            2> /dev/null /usr/libexec/PlistBuddy -c 'Print :Entitlements:application-identifier' /dev/stdin \
                <<< $(security cms -D -i "$f")
    
        done < <(find "$HOME/Library/MobileDevice/Provisioning Profiles" -name '*.mobileprovision' -print0)
    }
    
    0 讨论(0)
提交回复
热议问题