AirSensor
Bonjour !!
Elle est validée par Apple, il a même déjà une mise à jour (validée hier; 3 jours seulement après son upload). Mais le forum ne m'autorise pas à publier dans la section des apps terminées et validées, je ne sais pas pourquoi.
Donc voilà :
https://itunes.apple.com/fr/app/id949621529
Air Sensor est ma toute première Appli. Elle est gratuite, destinée aux pilotes de loisir (avion, ULM,..). Elle fournit à ces pilotes une fonction bien pratique qui n'existe que sur des avions plus gros : la surveillance de l'altitude. J'y ai ajouté la surveillance de cap. L'intérêt : avertir l'utilisateur, lorsqu'il pilote à la main, s'il fait des écarts de cap ou d'altitude au delà des marges admissibles (2° en cap, 200 pieds en altitude) par des indications visuelles et sonores.
L'appli est "sensée" être multilingue français / anglais mais j'ai tellement eu de difficultés à mettre ça en place que des bugs sont possibles, ne pas hésiter à me les remonter le cas échéant.
C'est donc une toute petite appli, très peu de fonctionnalités pour l'instant, bien travaillée tout de même au niveau graphique sur conseils d'un ami graphiste. D'autres idées d'applis plus complexes commencent à bourgeonner...
Merci pour vos retours !!!
Réponses
Bravo !
Je crois qu'il faut au moins 10 messages pour pouvoir publier un message dans la section "Applications validées" pour éviter que les gens ne s'inscrivent que pour faire de la pub...
Un peu de patience
PS : sinon, c'est pas un peu juste 2° de précision de cap pour les pilotes privés ? Ce serait peut-être pas mal de pouvoir régler les seuils, via un menu "réglages"...
Merci Cathy.
Actuellement le seuil d'alerte de cap est de 5° (enfin ça devrait être ainsi), mais le rendre configurable est une des idées d'évolution. Je vais aussi rentre l'alerte d'altitude progressive, avec un marquage coloré de l'altitude qui dépendra de l'écart (+/- 50ft : jaune, +/-100ft : orange, +/-200ft : rouge).
Ceci dit j'ai un gros soucis à régler avant tout ça : elle plante au chargement sous iOS 7
Problème d'image d'accueil apparemment. Je ne veux pas d'image d'accueil mais apparemment sous iOS 7 on n'a pas le choix.
Certains utilisateurs sous iOS7 me disent que l'image d'accueil s'affiche puis l'appli plante.
Par contre, ton lien fonctionne sur mon MacBookPro (Yosemite). Curieux ce truc ..
à‰dit : je l'ai finalement trouvé sur l'iPhone 4 en passant par la fonction "Recherche" de l'AppStore. Effectivement ça plante systématiquement au démarrage !
Ma machine : iPhone 4 - 16 Go - iOS 7.1.2
Pourquoi ne voulais tu pas d'image d'accueil ? Et avais tu testé sur iOS7 justement (avec le simulateur au moins) ?
C'est vrai ça ! Tu as dû tomber sur un lutin pressé !!!
Un volontaire pour tester l'application avec un 4S/5/5C/5S/6 sous iOS 7 ?
Ou que tu as une division par zéro, ce qui passe sur simulateur en i386 (et retourne un nombre dénormalisé) mais crash sur iOS en armv7/armv7s/arm64 (enfin je crois que c'est dans ce sens-là et pas l'inverse) ? (bon zut en fait si c'est justement l'inverse, donc c'est pas ça sinon ça aurait crashé sur simu mais marché sur device)
Bref, ça peut être un bug dû à iOS7 (ce qui est qd mm le plus probable, par exemple utilisation d'une méthode qui n'est apparue que dans le SDK iOS8 et n'existait pas en iOS7), mais ça peut aussi être un problème dû à autre chose (architecture), faut se méfier des conclusions hâtives.
Je suis d'accord avec Draken.. bon ce n'est pas à nous de nous reposer sur Apple pour tester nos applis, mais je suis étonné qu'elle ait été validée si vite avec en plus ce bug.
Alf, je viens de découvrir que l'on pouvait installer un simulateur iOS 7. Je pense avoir trouvé le problème.. un petit warning que je ne comprenais pas et que j'ai donc laissé trainer en me disant que ce n'était surement pas grave.. problème d'autolayout incompatible iOS 7. Vais essayer de changer ça mais c'est pénible.. car je ne sais pas comment faire tenir les éléments de ma vue sur un écran d'iPhone 4 sans utiliser ces fonction d'autolayout (tailles proportionnelles, etc..)
Pourquoi je ne voulais pas d'image d'accueil ? Et bien c'est juste un choix.. il y a bien des applis sur mon iPhone qui démarrent direct sans passer par un écran d'accueil, et je voulais la même chose.
Malheureusement le problème n'est pas là où je le croyais. Le simulateur plante iOS 7 et.. je n'y comprends pas grand chose. I'm not fluent in stack.
Si vous y voyez une piste, ça m'intéresse :
2014-12-22 14:50:37.556 AirSensor[9492:607] -[__NSCFString containsString:]: unrecognized selector sent to instance 0x7a67a570
2014-12-22 14:50:37.610 AirSensor[9492:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString containsString:]: unrecognized selector sent to instance 0x7a67a570'
*** First throw call stack:
(
0 CoreFoundation 0x00c431e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x009bf8e5 objc_exception_throw + 44
2 CoreFoundation 0x00ce0243 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
3 CoreFoundation 0x00c3350b ___forwarding___ + 1019
4 CoreFoundation 0x00c330ee _CF_forwarding_prep_0 + 14
5 AirSensor 0x0008619d -[ViewController viewDidLoad] + 229
6 UIKit 0x011da33d -[UIViewController loadViewIfRequired] + 696
7 UIKit 0x011da5d9 -[UIViewController view] + 35
8 UIKit 0x010fa267 -[UIWindow addRootViewControllerViewIfPossible] + 66
9 UIKit 0x010fa5ef -[UIWindow _setHidden:forced:] + 312
10 UIKit 0x010fa86b -[UIWindow _orderFrontWithoutMakingKey] + 49
11 UIKit 0x011053c8 -[UIWindow makeKeyAndVisible] + 65
12 UIKit 0x010b5bc0 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 2097
13 UIKit 0x010ba667 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824
14 UIKit 0x010cef92 -[UIApplication handleEvent:withNewEvent:] + 3517
15 UIKit 0x010cf555 -[UIApplication sendEvent:] + 85
16 UIKit 0x010bc250 _UIApplicationHandleEvent + 683
17 GraphicsServices 0x033a2f02 _PurpleEventCallback + 776
18 GraphicsServices 0x033a2a0d PurpleEventCallback + 46
19 CoreFoundation 0x00bbeca5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
20 CoreFoundation 0x00bbe9db __CFRunLoopDoSource1 + 523
21 CoreFoundation 0x00be968c __CFRunLoopRun + 2156
22 CoreFoundation 0x00be89d3 CFRunLoopRunSpecific + 467
23 CoreFoundation 0x00be87eb CFRunLoopRunInMode + 123
24 UIKit 0x010b9d9c -[UIApplication _run] + 840
25 UIKit 0x010bbf9b UIApplicationMain + 1225
26 AirSensor 0x00088b46 main + 94
27 libdyld.dylib 0x02ad46d9 start + 1
28 ??? 0x00000007 0x0 + 7
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
Ca plante dans mon ViewDidLoad sur la ligne suivante :
if([language containsString:@fr]) isLanguageFrench = YES;
isLanguageFrench est un booléen que j'utilise plus loin pour adapter les alarmes vocales selon la langue utilisée par l'iPhone.
Bon, vu le code erreur, il semblerait que language ne soit pas un NSString, donc, il est probablement nil.
Par contre, je ne connais pas encore l'utilisation des sons (je n'ai pas lu la doc.), mais je pense que tu dois avoir des fichier sons, et tu dois pouvoir les internationaliser au même titre que les strings, donc pas besoin de booléen isLanguageFrench.
Il te suffit de mettre les fichiers soit dans en.lproj, soit dans fr.lproj, et Xcode se débrouille tout seul. Comme tu as dû le faire pour les textes internalisés, je suppose.
Parce que bon, l'erreur dit clairement dès la première ligne du crash qu'il ne connait pas cette méthode, qu'une méthode avec ce nom n'existe pas dans NSString. Donc la raison du crash me parait on ne peut plus clair.
Et effectivement la méthode n'existe que depuis iOS8, et encore, elle apparaà®t dans les headers de NSString.h (et est bien annotée comme n'était available que depuis 10.10 et 8.0) mais pas dans la documentation...
C'est vrai c'est la méthode qu'il ne connaà®t pas, j'ai lu la stack trop vite ! Cela dit, je ne suis pas sûre que l'utilisation d'un booléen pour tester la langue soit la bonne façon de faire...
Utilises -rangeOfString
- Non seulement c'est bizarre de n'avoir qu'un booléen (quid si demain t'as 5 langues dans tes alarmes vocales ?) plutôt que d'indexer tes alarmes par locale
- En plus ça me fait peur ce code, pourquoi as-tu besoin de tester cela ? Si tu embarques tes sons qui servent à tes alarmes locales dans ton application, tu n'as certainement pas besoin de bidouiller des trucs comme cela toi-même. Je t'invite à aller lire les Programming Guides concernant l'internationalisation et la localisation de ton application et la gestion du multi-langue. En particulier il suffit de mettre tes sons de différentes langues dans les dossiers ".lproj" adéquat (autrement dit, de localiser tes ressources de type fichiers sonores " comme tu le ferais pour n'importe quelle autre ressource) et iOS ira chercher le son dans la bonne langue tout seul.
- Enfin, si vraiment tu veux tester des choses sur la locale, c'est avec NSLocale qu'il faut le faire (genre avec le countryCode) et pas directement sur le localeIdentifier.
Mais bon encore une fois je le répète, avoir une condition booléenne pour cela plutôt que d'indexer tes sons par langue est une mauvaise idée. Pour l'instant peut être que tu n'auras que "fr.lproj" pour les sons français et "Base.lproj" pour toutes les autres langues " pour lesquelles il n'y a pas de traduction spécifique et donc pour lesquelles tu as fourni des sons par défaut " mais il faut en tous les cas utiliser la localization de ressources prévue par iOS et tous les systèmes et méthodes qui tournent autour.A bidouiller les choses toi-même tu risques d'avoir des surprises.
D'une part parce qu'il y a tout ce qu'il faut de prévu déjà pour ça dans l'OS, et qu'il le gère très bien, et parce que la localization ce n'est pas un sujet simple (y'a plein de cas tordus, de régions dans les locales, de réglages possibles, ...) et que tu ne feras jamais mieux que iOS lui-même en essayant de réinventer la roue.
Je crois qu'exeptionnellement je t'ai grillé Ali !!!
Pour être un peu plus complet dans la réponse de Joanna, si tu veux tester la présence d'une chaine de caractères dans une autre pour un projet <iOS8, tu dois faire ceci (indépendamment du fait que dans ton cas, ce n'est pas la bonne solution) :
Et dans le cas d'une méthode qui ne fonctionne pas sur tous les iOS, on ne teste pas l'iOS lui même, mais l'existence de la méthode :
Hello,
J'ai été un peu occupé hier, mais que de réponses à mon retour ! Vais essayer de répondre à tout. Déjà merci à tous, je vois que j'ai encore beaucoup à apprendre. Pour info de base, bien avant d'être pilote, j'étais développeur de logiciels embarqués dans l'électronique automobile, donc du language C très bas niveau (en terme de couches physiques), un OS temps réel très rudimentaire (OSEK) et donc l'habitude de tout faire soit même... Et pour le développement iOS il m'a fallut me mettre à la POO, ça a été violent pour mon cerveau ramolli, mais c'est bien, ça stimule !!!
D'où vient containsString ? Et bien je n'ai effectivement rien trouvé dans la doc, mais la méthode est bien implémentée dans NSString.h
Donc NS_AVAILABLE(10_10, 8_0) je suppose que ça signifie que la méthode n'est disponible qu'à partir d'OS X 10.10 et iOS 8.0, ce qui explique effectivement mes soucis.
NB : Je viens de découvrir comment on insère un bout de code dans les messages du forum, mais je ne vois aucun choix de language C ou dérivés.. vous mettez "Auto Detect" ?
Pour mes choix concernant l'internationalisation, voilà comme dit précédemment, ça a été un peu fait à l'arrache. Je ne savais pas comment internationaliser les sons.
Mon appli devait n'être qu'en anglais (langue que tous les pilotes sont sensés maitriser... hum...). Bref, donc pour certains qui ont des soucis avec la langue de Shakespeare, j'ai finalement ajouté le français. Et puis ça ne marchait pas comme je le voulais, donc je l'ai retiré. Et puis quand j'ai eu un peu plus de temps à accorder à l'internationalisation, je l'ai remis. Beau merdier au final... tu avais raison d'avoir peur AliGator !!
Donc un booléen me semblait très convenable pour une variable qui ne pouvait prendre que deux états (français, ou pas français).
Vais essayer de tenir compte de toutes vos remarques, et je reviens vers vous avec de bonnes nouvelles, surement ! Merci encore.
Bon et bien... ça fonctionne nickel, les bons sons dans les bons dossiers, pas mal de lignes de code en moins, c'est propre et ça fonctionne. Y compris sous iOS 7 si j'en crois le simulateur.
Merci encore à tous.
ça y est !
à‰videmment. Du coup... ?
J'ai du mal à vous suivre. Du coup ? Champagne ?