Application android / ios avec cordova

== installer cordova + android ==

installer nodejs : http://nodejs.org/
npm install -g cordova
ou npm install -g cordova@3.6.3-0.2.13
jdk android: http://www.oracle.com/technetwork/java/javase/downloads/index.html
dans l'environnement :
- créer JAVA_HOME pointant vers la racine du dossier jdk.
- ajouter dans path : %JAVA_HOME%;%JAVA_HOME%\bin;

SDK Android http://developer.android.com/sdk/index.html
ajouter les dossiers tools et platform-tools dans le PATH

apache ant : http://ant.apache.org/bindownload.cgi
ajouter le dossier bin dans le path

lancer android et installer toutes les libs necessaires
(les tools + les sdk de la version 19 par exemple : cordova veut la 19)

tester les binaires en console : java, ant et android
la commande android ne marche que dans la console cmd
sur mac :
sudo npm install -g ios-deploy
sudo npm install -g ios-sim
dans ~/.bashrc et ~/.profile
export PATH=/Users/irina/Downloads/adt-bundle-mac-x86_64-20140702/sdk/platform-tools:/Users/irina/Downloads/adt-bundle-mac-x86_64-20140702/sdk/platform:/Users/irina/Downloads/adt-bundle-mac-x86_64-20140702/sdk/tools:$PATH

homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew update
brew install ant

== créer un projet ==

cordova create ecni fr.domaine.app "ECNi.fr"
aller dans le dossier

== pour android ==

cordova platform add android
cordova build android
cordova run android
cordova emulate android

== pour ios ==

cordova platform add ios
pour compiler et executer :
cordova build ios
cordova run ios

== pour générer les icônes ==
sudo npm install cordova-icon -g
sur mac:
brew install imagemagick

sur windows:
http://www.imagemagick.org
lancer avec cordova-icon

== pour installer des pluggins ==

npm install -g plugman
sur windows il faut faire ca pour que ca plante pas
mkdir -p C:/Users/raf/AppData/Local/Temp/plugman/git

pushplugin : cordova plugin add https://github.com/phonegap-build/PushPlugin
device : cordova plugin add org.apache.cordova.dialogs
dialogs : cordova plugin add org.apache.cordova.device

== pour tester direct sur le telephone android ==

sur le telephone il faut activer le debogage USB.
Settings > Applications > Development
ou
Settings > Developer options
ou
si il y a rien commencer par aller dans « a propos » et cliquer 7 fois sur build version.

== publier application android ==

# genere l'apk non signé
cordova build --release android

# 1 seule fois pour obtenir le fichier keystore
keytool -genkey -v -keystore ecni.keystore -alias ecni -keyalg RSA -keysize 2048 -validity 10000

# signe l'apk
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ecni.keystore platforms/android/ant-build/ECNi-release-unsigned.apk ecni

# aligne (optimise) l'apk
rm ECNi.apk
zipalign -v 4 platforms/android/ant-build/ECNi-release-unsigned.apk ECNi.apk

== publier application iphone ==

# build je sais pas quoi
cordova build ios --release

ouvrir le projet xcode généré et à cote du bouton play en haut a gauche choisir target ios device
cliquer sur le projet dans l'explorateur en haut a gauche,
aller dans l'onglet build settings,
code signing : iphone distribution (K8GF3C6H5N)
provisionning profile : xc.net.gextra.app (provisionning de distribution)
team : "2i inter investissements" en minuscules

ensuite faire product > archive / export

dans la fenêtre qui s'ouvre il doit y avoir une application
faire distribution puis "entreprise or ad hoc"
et on obtient un fichier ipa de merde qui devrait pouvoir se foutre sur un iphone.

ps: si on veut faire un ad hoc il faut a tout prix mettre ad hoc dans signing et dans archive.

telecharger Application loader
mettre le compte itunes store

== vider les mobile provision de xcode ==

si on a trop de mobile provision installés dans xcode ou qu'on comprends plus rien

rm -rf /Library/MobileDevice/Provisioning Profiles/*

== reparer l'erreur “Failed to locate or generate matching signing assets” when publishing ==
In keychain access, -> Show Expired Certificates, then in your login keychain click on expired certificate and delete it. I also had the same expired certificate in my System keychain, so I deleted it from there too.

Download https://developer.apple.com/certificationauthority/AppleWWDRCA.cer and add it to Keychain access

== check icons for ios ==

57 x 57 --> Icon.png (iPhone)
114 x 114 --> Icon@2x.png (iPhone Retina)
72 x 72 --> Icon-72.png (iPad)
144 x 144 --> Icon-72@2x.png (iPad Retina)
+ a partir d'ios 7
120 x 120 --> Icon-60@2x.png (iPhone Retina)
76 x 76 --> Icon-76.png (iPad)
152 x 152 --> Icon-76@2x.png (iPad Retina)

open ProjectName-Info.plist and check icon list

bloquer ipad

METHODE 1

mode guidé:
réglages>accessibilité>activer le mode guidé
trois clic sur le bouton home pour activer sur une appli
re cliquer home pour gérer
entourer les zones de l'ecran a verouiller
METHODE 2

Etape #1 :
Ajout de balise meta dans le code de la page d'accueil
<meta name="apple-mobile-web-app-capable" content="yes">
(une petite "apple-touch-icon" peu être un petit plus...)
Etape #2 :
Sur l'iPad dans Safari utiliser le bouton "utilitaire" et ajout de la page en raccourci sur le homescreen
Etape #3 :
Activation de Accès guidé dans les reglages, et dans le nouveau raccourci du site tripple clique sur le home pour commencer l'acces guidé et donc desactivé le bouton home de l'iphone/iPad
Resultat :
Le site du client en grand écran, pas de champ url et impossible de sortir de l'app

https ssl vhost

CREATE KEY
openssl genrsa -des3 -out <private key file name>.key 2048
openssl req -new -key <private key file name>.key -out <csr file name>.csr

ACTIVER MOD SSL
a2enmod ssl

SSL PASSWORD
emacs /etc/apache2/mods-enabled/ssl.conf
SSLPassPhraseDialog exec:/etc/ssl/certs/passphrase

emacs /etc/ssl/certs/passphrase
#!/bin/sh
echo "passphrase"

chmod +x /etc/ssl/certs/passphrase

VHOSTS
emacs /etc/apache2/ports.conf
NameVirtualHost *:443
Listen 443

emacs /etc/apache2/sites-enabled/allsites

<VirtualHost *:443>
ServerName domaine.net
DocumentRoot /home/user/site/web

AssignUserId user user

SSLEngine on
# "A" GRADE SSL : https://www.ssllabs.com/ssltest/analyze.html
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !S\
RP !DSS"
# end
SSLCertificateFile /etc/ssl/certs/user_public.crt
SSLCertificateChainFile /etc/ssl/certs/user_intermediate.crt
SSLCertificateKeyFile /etc/ssl/private/user.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>

FORCER REDIRECTION VERS HTTPS
RewriteEngine on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]

rsync

Se placer sur le serveur qui contiendra les sauvegardes et se connecter a l'autre en ssh

copie de gauche a droite:
si un fichier est modifé a gauche il est envoyé a droite.
si un fichier est supprimé a gauche il n'est pas envoyé a droite. (pour supprimer il faut ajouter --delete et --delete-after)
ajouter --partial pour pouvoir reprendre un transfert qui a coupé
ajouter --progress pour afficher la progression du transfert
ou -P pour faire --partial et --progress d'un coup

-n pour tester sans executer le transfert

rsync -az 'ecni_prod@ecni.fr:/home/sql/ecni_prod_*.sql' /home/ecni/save/

pour rendre la sauvegarde incrémentale :

rsync --link-dest /home/ecni/save/ /home/ecni/save-date-du-jour/

pour exclure des fichiers ou chemins

rsync -az --exclude file1.txt --exclude dir3/file4.txt ecni_prod@ecni.fr:/home/sql/ /home/ecni/save/

cron

Recevoir les rapports de cron (par defaut envoyé à root en mail local)

MAILTO=email@server.fr

lister les crons de tous les utilisateurs

awk -F: '{print $1}' /etc/passwd | xargs -l1 crontab -lu 2>/dev/null

lancer un programme au boot

@reboot cmd

@reboot /usr/local/bin/forever -c /usr/local/bin/node start /your/path/to/your/app.js

@reboot screen -d -m /usr/bin/rtorrent

en général c'est un env minimaliste, qui ne trouve pas tous les binaires

on peut forcer le path avec ça :
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

et voir le env minimaliste avec ça :
* * * * * env > /tmp/env.output