C'est ma première application Mac.
Je voudrais envoyer des e-mails en comparant la date actuelle et la date enregistrée des clients par l'utilisateur dans sqlite une seule fois - chaque jour en fonction de la condition, de manière asynchrone.
C'est ma première application Mac.
Je voudrais envoyer des e-mails en comparant la date actuelle et la date enregistrée des clients par l'utilisateur dans sqlite une seule fois - chaque jour en fonction de la condition, de manière asynchrone.
Note : Je suppose que par "asynchrone", vous voulez dire "faire ceci que l'utilisateur soit connecté ou non et que l'application tourne à 9h30 du matin".
La bonne façon de faire cela est de enregistrer un appel avec launchd qui gère le travail approprié pour votre application. Quand et comment vous le faites est quelque peu flexible. Si vous utilisez un script d'installation de type .pkg
, vous pouvez enregistrer l'assistant à l'installation. Ou vous pouvez enregistrer lors de la première exécution de votre application, peut-être après que l'utilisateur ait fourni suffisamment d'informations de configuration pour que l'application auxiliaire puisse faire son travail.
Le guide Daemons and Services entre dans les détails pour expliquer comment faire cela en grande détail. Je recommande la lecture. Et pour une description des propriétés de plist sur lesquelles launchd se concentre, consultez cette page manuelle.
À titre d'exemple très général, supposons que votre application auxiliaire se trouve dans votre package sous MyPackage.app/Contents/SharedSupport/bin/myhelper
. Voici un fichier plist
qui le lancera tous les jours à 9h30 et 21h30 sur la machine :
Label
com.mycompany.mypackage.myhelper
Disabled
Program
/Applications/MyPackage.app/Contents/SharedSupport/bin/myhelper
ProgramArguments
--daemon
StartCalendarInterval
Minute
30
Hour
9
Minute
30
Hour
21
Enregistrez ce fichier dans /Library/LaunchAgents/com.mycompany.mypackage.myhelper.plist
sur votre machine et ensuite tapez :
sudo launchctl load /Library/LaunchAgents/com.mycompany.mypackage.myhelper.plist
Pour l'enregistrer immédiatement avec launchd
. Au redémarrage, il devrait s'enregistrer automatiquement. Consultez la page man de launchctl pour plus d'informations sur son utilisation pour interagir avec launchd.
(En supposant que vous utilisez Objective-C/Cocoa)
La démarche que je suivrais :
Calculer le temps restant avant l'événement
Utiliser performSelector:withObject:afterDelay:
(disponible sur NSObject
)
Inclure toute logique supplémentaire (comme des appels à d'autres méthodes, ou votre logique d'email) dans la méthode indiquée dans la méthode ci-dessus.
LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.