Localiza entrada em plist usando PlistBuddy (osx)

1

Estou tentando encontrar em um computador Mac se o usuário atual tiver o iCloud Documents ativado. Eu encontrei o plist onde este está localizado (MobileMeAccounts.plist), mas eu poderia usar alguma ajuda com a sintaxe plistbuddy para direcionar para baixo na árvore.

Aqui está parte do script que eu tenho até agora:

#!/bin/bash

# Purpose: Grab iCloud Document Status

plistBud="/usr/libexec/PlistBuddy"

if [[ -e "/Users/*loggedInUser*/Library/Preferences/MobileMeAccounts.plist" ]]; then

iCloudStatus='$plistBud -c "print :Accounts:Services:MOBILE_DOCUMENTS" /Users/$loggedInUser/Library/Preferences/MobileMeAccounts.plist'
else

iCloudDocuments="Not Enabled"

fi

echo "$iCloudStatus"

Estou procurando especificamente o seguinte código:

<key>Enabled</key>
<true/>

Aqui está o plist. Se você rolar para baixo, verá o "MOBILE_DOCUMENTS" sendo ativado:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Accounts</key>
<array>
    <dict>
        <key>AccountAlternateDSID</key>
        <string>99999999</string>
        <key>AccountDSID</key>
        <string>999999</string>
        <key>AccountDescription</key>
        <string>iCloud</string>
        <key>AccountID</key>
        <string>*****@gmail.com</string>
        <key>AccountUUID</key>
        <string>9999999</string>
        <key>DisplayName</key>
        <string>User Name</string>
        <key>LoggedIn</key>
        <true/>
        <key>Services</key>
        <array>
            <dict>
                <key>Name</key>
                <string>CLOUDDESKTOP</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.CloudDesktop</string>
                <key>status</key>
                <string>active</string>
            </dict>
            <dict>
                <key>Name</key>
                <string>FAMILY</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.Family</string>
                <key>showManageFamily</key>
                <true/>
            </dict>
            <dict>
                <key>Enabled</key>
                <true/>
                <key>Name</key>
                <string>MOBILE_DOCUMENTS</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.Ubiquity</string>
                <key>apsEnv</key>
                <string>production</string>
                <key>authMechanism</key>
                <string>token</string>
                <key>url</key>
                <string>https://p48-ubiquity.icloud.com:443</string>
                <key>wsUrl</key>
                <string>https://p48-ubiquityws.icloud.com:443</string>
            </dict>
    
por Dan 31.10.2016 / 22:49

1 resposta

0

Você está quase lá.

O truque é que você tem que especificar qual objeto você quer em cada array. Adicione este índice no caminho XML e você está bem.

Para obter a lista de itens na matriz:

/usr/libexec/PlistBuddy -c "print :Accounts:0:Services" ~/Library/Preferences/MobileMeAccounts.plist

No meu caso MOBILE_DOCUMENTS é o primeiro item, então é do índice 0 (o segundo item seria o índice 1, o terceiro índice do item 2, etc.).

Isso funciona para mim:

/usr/libexec/PlistBuddy -c "print :Accounts:0:Services:0:Enabled" ~/Library/Preferences/MobileMeAccounts.plist

fornecerá "falso" ou "verdadeiro".

    
por 18.11.2016 / 15:02

Tags