2012 TIM.Production sur support - Épreuve synthèse Réalisation d une application ios TIM Météo média Devis préparé par Alain Boudreault 31/12/2012
2 Épreuve synthèse (90%) Produire une application ios 6.x Devis préparé par Alain Boudreault Pour les étudiants et étudiantes du cours Production multimédia sur support Aut.2012 Version préliminaire
3 Contenu Description Pondération Livrables
4 Description Résumé Vous devez réaliser, à l aide d un ordinateur, de MAC OS X, de XCode, du framework cocoa touch (NS, UI, ), de services de données Internet et d ObjectiveC, une application ios qui permet de consulter la météo des grandes villes du monde ainsi que la météo en cours à la position GPS de l appareil. Détails Vous devez programmer une application ios qui : A) Utilise le storyboard suivant
5 B) Affiche une page de démarrage Titre pendant 5 secondes Astuce Utiliser un NSTimer [NSTimer scheduledtimerwithtimeinterval:duree_intro target:self selector:@selector(entrer) userinfo:nil repeats:no]; Ou bien [self performselector:@selector(uneméthode) withobject:self afterdelay:5];
6 C) Passe à l écran principal de l application suite à l exécution d un segue par programmation. Astuce [self performseguewithidentifier: @"villesdumonde" sender: self];
7 D) Propose un TabBarController comme moyen de navigation Astuce Le menu TabBar donne accès à trois pages ViewController 1. La météo des villes du monde 2. La météo selon la position GPS actuelle 3. La page À propos
8 1 La météo des villes du monde Cette page écran affiche la météo actuelle de toutes les villes du tableau des villes grâce à : a) un NSTimer de 5 minutes, b) un NSMutableArray de villes renseigné par le fichier lesvilles.plist, c) au résultat JSON d une requête SQL sur la base de données de Yahoo, d) un UICollectionView, e) une cellule perso de type UICollectionViewCell, f) au principe de délégation, g) des images locales, et h) la sélection d éléments dans un NSDictionary selon la syntaxe _resultatsmeteo [@"query"][@"results"][@"channel"]. La sélection d une ville, à l écran, va lancer un déplacement (segue) vers la page de détails. Éléments requis Heure de la dernière lecture de la météo des grandes villes UICollectionView Détails Aux cinq minutes. Astuces : NSTimer + - (void)actualiserlesdonneesecran { [self lirelameteo]; [self.uicollectiondesvilles reloaddata]; } // *** fin - actualiserlesdonneesecran Avec une cellule (UICollectionViewCell) par ville
9 Astuce 1 Au chargement de la view, créer un tableau modifiable à partir du fichier «lesvilles.plist» NSString *nomfichierdesdonnees = [[NSBundle mainbundle] pathforresource:@"lesvilles" oftype:@"plist"]; _tableaudesdonnees = [[NSMutableArray alloc]initwithcontentsoffile:nomfichierdesdonnees]; Puis, construire la requête SQL à partir du tableau. for (int i=0; i<infovilles.count;i++){ [ensemblelocalisations appendformat:@"'%@'", infovilles[i][@"localisation"]]; if (i < infovilles.count - 1){ [ensemblelocalisations appendstring:@","]; } } Astuce 2 Placer les informations reçues de Yahoo dans le même tableau. Il sera plus facile ainsi de renseigner les UICollectionViewCell. _lameteo = [self convertirjson:url_requete]; NSString * resultat = _lameteo[@"query"][@"results"]; if ([resultat isequal:[nsnull null]]){ NSLog(@"Erreur: La requête n'a pas retourné de résultats..."); } else { int nbvilles = ((NSArray *)_lameteo[@"query"][@"results"][@"channel"]).count; for(int i = 0; i < nbvilles; i++) { temperature = _lameteo [@"query"][@"results"][@"channel"] [i] [@"item"][@"condition"][@"temp"]; _tableaudesdonnees[i][@"temperature"] = temperature; } // for nbvilles } // Le résultat contient des données - (UICollectionViewCell *)collectionview:(uicollectionview *)cv cellforitematindexpath:(nsindexpath *)indexpath { CelluleView *cell = [cv dequeuereusablecellwithreuseidentifier:@"unecellule" forindexpath:indexpath]; cell.uitemperature.text = [self formatmeteo:_tableaudesdonnees[indexpath.row][@"temperature"]]; return cell; } // *** fin cellforitematindexpath
10 1.1 Prévisions pour la ville sélectionnée Une sélection sur une cellule du UICollectionView de la page précédente va afficher : Éléments requis Nom de la ville dans la barre titre du NavigationController L image correspondante au code météo Le taux d humidité relative Température actuelle La pression atmosphérique L heure de lever du soleil L heure de coucher du soleil Aujourd hui : Prévision des températures maximum et minimum de la journée ainsi que l image selon le code Demain : Prévision des températures maximum et minimum de la journée suivante ainsi que l image selon le code Détails
11 Astuce Les prévisions météo de toutes les villes sont dans le tableau créé par NSJSONSerialization. Il est donc possible de passer la ville sélectionnée à la classe du «view» de détails Météo. - (void)prepareforsegue:(uistoryboardsegue *)segue sender:(id)sender { // indexpathsforselecteditems.lastobject > Indique la cellule sélectionnée NSIndexPath * elementcourant = _UICollectionDesVilles.indexPathsForSelectedItems.lastObject; if ([[segue identifier] isequaltostring:@"details"]) { DetailsVilleCouranteViewController *vc = [segue destinationviewcontroller]; vc.title = _tableaudesdonnees[elementcourant.row][@"nomville"]; vc.codeville = _tableaudesdonnees[elementcourant.row][@"localisation"]; vc.villecourante = _lameteo [@"query"][@"results"][@"channel"] [elementcourant.row]; } // if segue=""details" } Dans DetailsVilleCouranteViewController.h // =========================================================== @property (strong, nonatomic) NSDictionary * villecourante; @property (strong, nonatomic) NSString * codeville; // =========================================================== 1.2 Page web de la ville sélectionnée Le bouton suivant va afficher la page web météo de la ville courante :
12 Astuce Passer le code de la ville (prepareforsegue) à la classe de la view qui affiche la page web. Le codede ville va servir à construire l URL. NSString * URL = [NSString stringwithformat:@"%@%@%@",@"http://cf.weather.yahoo.com/forecast/", _codeville, @".html"]; NSURLRequest *requestobj = [NSURLRequest requestwithurl:url]; [_UIPageWeb loadrequest:requestobj];
13 2 Météo selon la position GPS Cette page écran affiche la météo selon la position actuelle du téléphone. Éléments requis Nom de la ville selon la position GPS actuelle Latitude et Longitude de la position GPS Température actuelle Température avec le facteur vent L image correspondante au code météo La température maximum et minimum de la journée Le taux d humidité relative La vitesse du vent Détails [@"wind"][@"chill"] [@"item"][@"condition"][@"code"] [@"item"][@"forecast"][0][@"high"] [@"atmosphere"][@"humidity"]
14 Astuce 1 Ajouter les frameworks Astuce 2 Obtenir la latitude et la longitude avec : - (void)mapview:(mkmapview *)mapview didupdateuserlocation:(mkuserlocation *)userlocation { NSString * latitudelongitude= [NSString stringwithformat:@"'%f,%f'", userlocation.coordinate.latitude, userlocation.coordinate.longitude]; Astuce 3 Utiliser la requête SQL select * from weather.forecast where woeid in (select woeid from geo.placefinder where text='%@' and gflags='r') and u='c' Note: maximum de 100 requêtes par jour. Astuce 4
15 3 La page À propos' Éléments requis Votre nom Votre matricule Une courte vidéo de présentation du projet Détails Pour la remise des notes Vidéo originale Astuce -(void) viewdidappear:(bool)animated { [mavideo play]; } -(void) viewdiddisappear:(bool)animated { [mavideo stop]; }
16 Pondération StoryBoard et navigation entre les pages 16 Utilisation correct des contraintes de positionnement des éléments visuels 4 Apparence visuelle 8 Programmation de la requête SQL - Météo des villes 2 Lecture des infos météo sur Yahoo à partir du code des villes 2 Programmation de la conversion du format JSON en NSDictionary 2 Création d'un tableau des villes à partir du fichier plist 2 Écriture de la température et du code de l'image dans le tableau des villes 3 Afficher l'écran d'accueil pendant 5 secondes 3 Construction visuelle du UICollectionViewCell 5 Classe perso pour UICollectionViewCell 2 Classe perso pour le 'view' de la page des détails de la ville courante 2 Programmation des méthodes de délégation du UICollectionView 5 Préparation du segue vers l'écran de détails et passage des infos de la ville courante 3 Préparation du segue vers l'écran de la page web et passage du code la ville courante 1 Justesse des informations de la page des détails 6 Justesse des informations de la page des villes 4 Justesse des informations de la page web 2 Programmation d'une méthode pour l'ajout des symboles C, % et km/h 2 Utilisation correcte d'un MKMapView avec affichage de la position actuelle 2 Lecture de la position GPS courante 2 Lecture des infos météo sur yahoo à partir de la latitude et de la longitude 3 Présentation d'une vidéo perso sur la page 'À propos' 5 Afficher l'image correspondante au code météo 2 Mise à jour des informations aux 5 minutes 2 Vérification d'une éventuelle erreur de connexion réseau + arrêt du NSTimer 2 Icône de l'application 2 Organisation des fichiers dans le projet 3 Normalisation du code par l'utilisation de méthodes 3 Total 100
17 Note: Un visuel correct (storyboard complet) et une navigation fonctionnelle entre les 'view's donne la note de passage. Au besoin, il faudra programmer des éléments en dur pour le UICollectionView pour tester la navigation. Même chose pour l écran de la page WEB. Livrables Le dossier du projet en format.zip (à partir de Mac OSX) sur remise.