Az utóbbi időben két komolyabb nyiltforráskódú program, az XLD és a Transmission magyar lokalizációját is elkészítettem. Mindkettőn a lehető legkevesebb változtatást végeztem el, gyakorlatilag csakis a stringeket és az elrendezés változott. Elég sokat tanultam belőlük, valamint kezd összeállni, hogyan is épül fel egy-egy project.

Mint valószínűleg mindenki más, én is folyamatosan gondolkozom, hogy tehetem a munkafolyamatokat könnyebbé, gördülékenyebbé, automatizálhatóvá.
Korábban, már sikeresen utána jártam, hogyan fésülhetem össze a régebbi nyelvi fájlokat az újabb verziókéval, hogy csak a hiányzó szövegeket keljen lefordítanom.

A héten azonban egy újabb dolog jutott eszembe.
Mind szép és jó, hogy elérhető a dolog, de ha frissítés érkezik – mivel a beállításokon nem változtattam – a hivatalos oldalról töltődik le a lokalizáció mentes frissített verzió.
Tehát, megkellene oldani, hogy a szoftverfrissítés az én fájljaimmal történjen meg.

Valamikor ősszel találkoztam előszőr a Sparkle framework névvel, így mikor a magyarításokat készítettem, már tudtam miért is van a forráskódban.

Ez egy ingyenes keretrendszer, melyel a szoftverünk frissítését tehetjük egyszerűbbé, automatizálhatóvá, és megúszhatjuk a programfrissítés menetének leprogramozását.

Felépítése egyszerű, és gyakorlatilag néhány paraméterrel tökéletesen beállítható, minden művelet az oldalukon szépen dokumentálva van.

Az ötlet megvalósítása:

Módosítások a programban

A készítők, az XLD és a Transmission esetében is már integrálták a keretrendszert, nem véletlenül használják ők is. Nekem a forráskódban, csakis a frissítési-lista elérési útját és a publikus kulcsot kellett megváltoztatnom.

  • A Sparkle letölthető csomagjában megtalálható generate_keys.rb-vel legeneráltam a publikus és a privát kulcsomat, (dsa_pub.pem és dsa_priv.pem).
    ruby generate_keys.rb
    Majd bemásoltam a forráskódba a publikus kulcsot.
    Ezek segítenek a biztonságban, ugyanis csak akkor telepíti a frissítést a program, ha a privát kulccsal helyesen megjelölt fájlt találja a megadott elérési úton.
  • Megadtam a frissítési-lista elérési útját az Info.plist-ben
    https://oandras.hu/softupdates/transmission.xml

Ezután a program már a megadott címen ellenőrizte, hogy elérhető e frissítés.

Az RSS létrehozása

A keretrendszer egy rss folyamot figyel, és ott ellenőrzi a “sparkle:version” stringet, alapértelmezetten naponta, tehát 86400 másodpercenként. A logika egyszerű, ha a folyamon a sparkle:version string magasabb értékű mint a programban, frissítés érhető el.

A saját rss létrehozásával nem bíbelődtem sokat: lementettem az eredeti rss-t, eltávolítottam a régebbi Tiger, és Leopard kiadások linkjeit, majd feltöltöttem a fájlt a helyére. A helyes értékekkel, az első frissítés során töltöttem ki a fájlt. Az eredeti angol kiadási megjegyzéseket meghagytam.

Teendők új programverzió megjelentetés esetén

Miután a programot sikerrel összeállítattam az Xcode-al, teszteltem, becsomagolom .zip formátumba, majd átnevezem a kiadást tükröző fájlnévvel. A Sparkle több fájlformátumot is kezel, úgysmint a .zip, a .dmg, a .tar.gz, vagy a .tar.bz2, azonban a .zip számomra a legkényelmesebb, így ezentúl ezt használom.

A privát kulcs segítségével létrehozom az állomány aláírását (sparkle:dsaSignature).
ruby sign_update.rb Transmission_2_60_hun.zip dsa_priv.pem

Feltöltöm a csomagot a szerverre.

Majd kitöltöm az rss paramétereit:

  • pubDate: rss frissítésének ideje
  • item title: Programnév, verzió
  • sparkle:releaseNotesLink: a kiadási megjegyzések (ez marad az eredeti útvonal)
  • item pubDate: verzió kiadásának ideje
  • url: a frissítési fájl elérési útvonala
  • sparkle:version: a build száma
  • sparkle:shortVersionString: főverziószám
  • sparkle:dsaSignature: az állomány aláírása

Ezután, ellenőrzöm, hogy minden rendben van.
A leírás kicsit hosszú talán, de körülbellül az egész 3 perc.
A következő verziókat már az én frissítési útvonalammal fogom összeállítani.