Существует ли стандартный способ проверки обновлений в виджете Dashboard? - PullRequest
0 голосов
/ 06 декабря 2010

Я пишу виджет Dashboard в Dashcode, и я хотел бы добавить какую-то функциональность для проверки обновлений. Я уже изучал Sparkle, но, к сожалению, он не применим к таким виджетам. Есть ли обычно используемая библиотека для проверки обновлений, или мне придется разрабатывать собственную систему?

Мне нужна только очень простая настройка ... автоматическая проверка новых версий была бы плюсом, но если бы пользователю пришлось нажимать кнопку, чтобы проверить, что со мной все будет в порядке.

1 Ответ

0 голосов
/ 11 декабря 2010

Поскольку «есть функция, которая будет ...», то я не сталкивался с ней.

То, что я сделал, было следующим:

В plist есть версия виджета, и вы поместили туда число, скажем, 1.0.Который вы должны иметь возможность доступа и использования.(см. код) По причине, которую я не сделал и добавил это глобальное var widget_version = "1.4";и затем обновляется, когда обновляется виджет.

Затем на сервере, доступном через Интернет, вы создаете файл php (или любой другой), который имеет номер текущей версии виджета.Снова допустим, скажем, 1.1.

Затем вы пишете функцию javascript, которая проверяет текущую версию виджета на соответствие версии сервера и отображает графическое изображение или сообщение, чтобы сообщить пользователю.Лучше позволить пользователю решить, хотят ли они обновить его, а не делать его автоматическим.

Ниже приведен код, который я использовал.Пожалуйста, скопируйте и / или взломайте, как хотите.

function getSoftwareUpdate() {

// so use the built in CURL to do a REST call n.b. in widget preference you will need to check 'allow network access'
var softwareUpdate = widget.system("/usr/bin/curl  'http://api.yourserver.com/widget/wfccupdate.php'", null).outputString;

//alert(softwareUpdate); // tells you the function has been called
//alert("the update number from the REST " + softwareUpdate); // for debugging will show the key

// in main.js add this line
// var widget_version = "1.4"; // this is changed when you update the widget code for  new release
// yes it's a global variable and bad but i was in a hurry
// the following line should get the widget number but for some reason i didn't do it
// localVersion = widget.preferenceForKey(preferenceForKey);
//alert("the internal preference key " + widget_version);

// then check to see if they match
    if(softwareUpdate == widget_version)
    { hide_update('softwareupdate')
    }
    else
    {show_update('softwareupdate')
    }
}

function hide_update(el) { // hide the update graphic
    if(document.getElementById(el)) 
    {
        if(document.getElementById(el).style.display != "none") 
        document.getElementById(el).style.display = "none";
    }
}
function show_update(el) { // show the update graphic
    if(document.getElementById(el)) {
        if(document.getElementById(el).style.display == "none") 
        document.getElementById(el).style.display = "block"; 
        }
    }



// this is the php that is called by curl and acts as REST

<?php
// data
$UPDATE_database = <<<_UPDATE_
<?xml version="1.0" encoding="utf-8" ?>
<update>
    <widgetversion>1.1</widgetversion>
</update>
_UPDATE_;

// load data
$xml = simplexml_load_string($UPDATE_database);
$result = $xml->xpath("widgetversion");
print $result[0];
?>

Надеюсь, это поможет

...