iOS app megosztása saját webszerverről

Ez nem kérdés, inkább csak leírnám azt, hogy hogyan oldottam meg, mert egy ideje nem működött a megosztás. Valószínűleg az az iOS hiba került befoltozásra, amit kihasználtak bizonyos külső alkalmazásokat telepítő “áruházak”.

Először is itt egy link: http://stackoverflow.com/questions/20276907/enterprise-app-deployment-doesnt-work-on-ios-7-1#answer-22325916
Itt valaki megoldást talált dropbox-szal, de nálam ez nem működött.

Előfeltétel
Saját webszerver és az alkalmazás ellátása aláírással (fizetős iOS Developer fiók, szokásos módon létrehozott alkalmazás…

Első lépés, hogy ki kell exportálni az Xcode-ból az alkalmazást a megfelelő Distribution Profile-lal: Product (menü) → Archive → Export… → Save for Ad Hoc Deployment, majd ekkor ha több Developer fiókunk van hozzáadva az Xcode-hoz, akkor ki kell választani a Developer fiókot, majd a Developer fiókhoz tartozó Distribution Provisioning Profile-t kell kiválasztani

Második lépés, hogy be kell állítani a webszervert ssl fogadására.
Ubuntu 14.04 alatt csináltam, átlagos (tehát szinte friss) apache-csal. A link alatt megtalálható a részletes magyarázat, de mindent egy az egyben ugyanúgy csináltam:
https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04
Itt vannak a lépések, ha netán nem működne a fenti link (vagy valaki lusta megnyitni).

  • ssl mód engedélyezése az apache-nak:

    sudo a2enmod ssl
    sudo service apache2 restart
    .

  • ssl mappa és kulcsok létrehozása:

    sudo mkdir /etc/apache2/ssl
    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt
    .
    Telepítés közben fontos a Common Name beállítás, oda a domain nevet írjuk (vagy az ip címet, ha nincs): pl: valami.homedns.org.

  • Ezután a megfelelő conf fájlt kell módosítani, ahol engedélyezni akarjuk az ssl-t:

    sudo nano /etc/apache2/sites-available/default-ssl.conf
    .

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Itt talán fontos azt megjegyezni, hogy a https használatához a 443-as porthoz kell engedélyezni ezeket a beállításokat. Én csak simán másoltam a 80-as porthoz beállított értékeket és átírtam 443-ra a portot az elején. Valamint pici apróság, de fontos, hogy engedélyezzük a szerverünk számára a 443-as portot (azaz meg kell nyitni).

  • És a vége előtt engedélyezni kell a cert-et az oldalra:

    sudo a2ensite default-ssl.conf

  • És megint újraindítani az apachot a végén:

    sudo service apache2 restart
    Természetesen a kódokban használt mappát, fájl elnevezéseket bátran lehet változtatni, pl én nem a default-ssl.conf fájlt módosítottam, hanem a /etc/apache2/sites-available/000-default.conf fájlban oldottam meg. Egyedül az apache.crt fájl kell még felhasználnunk később.

Harmadik lépés:
Egy ipa fájl megosztásához szükség van egy meghatározott plist fájlra. Erről itt találtam részletes információt: http://www.informit.com/articles/article.aspx?p=1829415&seqNum=16
Konkrétan kihagytam az összes opcionálisnak megjelölt értékeket. Érdemes az ikonokat is megcsinálni és beállítani rendesen, mert volt akinek az ikonok miatt nem működött a megosztás.
Felhívnám a következőkre a figyelmet:

  • bundle-identifier kulcshoz megadott érték mindenképpen az legyen, amit az alkalmazásban használtunk (Bundle-Identifier) azonosítót. Én konkrétan widcard azonosítót használtam a Distribution Profile létrehozásánál és azzal is így is működik. Mármint akkor is az Xcode-ban megadott Bundle Identifier-t kell használni.
  • A másik a konkrét url-nél megadott link, ami az ipa fájlra mutat, itt nagyon fontos, hogy ugyanarról a szerverre mutasson a link és a weboldalon kiírt példával ellentétben fontos, hogy https-sel kezdődjön a link. A cikk megjelenésekor (2012) még tényleg csak http-t kellett megadni és pont hogy https-sel nem működött, és szerintem ez az amit az Apple befoltozott és csak és kizárólag https-sel működik most már a megosztás.
  • Képeknél a példánál jpg is szerepel én eleve mindkettőnél átlátszó (eredeti alkalmazás) ikont adtam meg.

Negyedik lépés:
Fel kell másolni a webszerverünkre (és természetesen megfelelő joggal kell ellátni) a fájlokat:

  • fel kell másolni a fentebbi plist fájlt (és az abban belinkelt képeket és ipa fájlt)

  • kell egy html fájl, ami valahol tartalmaz egy linket. A link a fentebb létrehozott plist fájlra kell, hogy mutasson (és nem az alkalmazásra. A linknek van egy követelménye, hogy mit kell tartalmaznia. Itt egy egyszerű példa (a weboldalról):

    < a href=“itms-services://?action=download-manifest&url=https://example.com/manifest.plist”>Install App< /a>
    (a szóközök azért kerültek be a kacsacsőrök után, mert átkonvertálta a fórum motorja rendes linkké.
    Fontos, hogy itt szintén a weboldaltól eltérően https-sel kell kezdődni a linknek. A protokolból (itms-services) ismeri fel a Safari, hogy ez egy telepíthető alkalmazás linkje. Valamint az is fontos, hogy szintén https-sel osszuk majd meg ezt a html fájlt.

Természetesen a fájlok elnevezése tetszőleges, pl:

  • app1.ipa
  • app1.plist
  • app1.html
  • icon57.png
  • icon512.png

És természetesen ugyanezeket az ikonkat többször is fel lehet a különböző plist fájlokban.

Ötödik lépés: a megosztás menete.

  • A második lépésnél létrehozott apache.crt fájlt és az előbb említett html fájl linkjét kell elküldeni azoknak, akikkel meg akarjuk osztani az alkalmazásunkat.
  • Fontos, hogy először a weboldalunk meglátogatása előtt mindenképpen fel kell telepíteni a felhasználóknak az apache.crt fájlt. Ezt az apache.crt fájlt át lehet másolni és lehet csinálni hozzá egy linket, amit szintén megosztunk a tesztelőkkel. Én konkrétan ezt Dropboxba tettem fel és onnan küldtem át a megosztás linkjét (kicserélve a link elején lévő www.dropbox.com szöveget dl.dropboxusercontent.com szövegre). Ezt a műveletet akkor kell megismételni, ha változtatunk a certificaten.
  • Fontos, hogy ezt certificate fájlt a Safari-ban kell megnyitni. Safariban megnyitás után rá kell kattintani a Trust gombra és telepíteni kell ezt a Certificate-et. És szintén nagyon fontos, hogy először csinálják meg a felhasználók ezt a lépést, mielőtt meglátogatják az SSL-el ellátott oldalunkat, mert a Safari ott becacheli a Certificate-et, és hiába nyomunk rá, hogy megbízunk benne, másolja fel, azzal a módszerrel nem fog működni (legalábbis nekem nem működött).
  • (opcionális) Miután sokadjára sem ment nekem az alkalmazás telepítése, töröltem az összes Safari weboldal tartalmat a beállításokból és újra a Certificate hozzáadásával kezdtem a telepítést. Figyelem: ez a művelet nem csak az eszközről törli a Safari tartalmakat, hanem az összes eszközön (macen is) törli az előzményeket.

(Felhasználók már jeleztek vissza, hogy működik a megosztás, ha először feltelepíti a Certificate-t az előbb leírt módon.)

Szóval nagyjából ennyi lenne. Remélem tudtam valakinek segíteni ezzel.