How to invoke a method at particular time asynchronously every day in Mac application? This is my first Mac application.

I would like to send emails by comparing the current date and saved date of clients by the user in sqlite only one time- every day depending on the condition, asynchronously.
Note: I'm assuming that by "asynchronous" you mean "do this whether or not the user is logged in and running the application at 9:30 am".

The right way to do this is to register a call with launchd that handles the appropriate work for your application. When and how you do this is somewhat flexible. If you're using a .pkg-type installation script you can register the helper on installation. Or you can register on first run of your application, perhaps after the user has provided sufficient configuration information for the helper app to do it's job.

The Daemons and Services guide delves in to how to do this in great detail. I recommend reading that. And for a description of plist properties that launchd looks at see this manual page.

As a very high-level example,  let's assume your helper application can be found in your package under MyPackage.app/Contents/SharedSupport/bin/myhelper. Here's a plist file that would launch it every day at 9:30 am and 9:30 pm on the machine:

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt;
&lt;plist version="1.0"&gt;
&lt;dict&gt;
    &lt;!-- This label needs to be unique to the system --&gt;
    &lt;key&gt;Label&lt;/key&gt;
    &lt;string&gt;com.mycompany.mypackage.myhelper&lt;/string&gt;

    &lt;!-- Toggle to true to prevent it from running --&gt;
    &lt;key&gt;Disabled&lt;/key&gt;
    &lt;false/&gt;

    &lt;!-- This is the full path to the helper application --&gt;
    &lt;key&gt;Program&lt;/key&gt;
    &lt;string&gt;/Applications/MyPackage.app/Contents/SharedSupport/bin/myhelper&lt;/string&gt;

    &lt;!-- This is an array of string arguments to pass in to the app when it's called --&gt;
    &lt;key&gt;ProgramArguments&lt;/key&gt;
    &lt;array&gt;
        &lt;string&gt;--daemon&lt;/string&gt;
    &lt;/array&gt;

    &lt;!-- This works much like cron to state when the job should be run --&gt;
    &lt;key&gt;StartCalendarInterval&lt;/key&gt;
    &lt;array&gt;
        &lt;!-- Run at 9:30 am --&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;30&gt;&lt;/integer&gt;
            &lt;key&gt;Hour&lt;/key&gt;
            &lt;integer&gt;9&lt;/integer&gt;
        &lt;/dict&gt;
        &lt;!-- Run at 9:30 pm --&gt;
        &lt;dict&gt;
            &lt;key&gt;Minute&lt;/key&gt;
            &lt;integer&gt;30&gt;&lt;/integer&gt;
            &lt;key&gt;Hour&lt;/key&gt;
            &lt;integer&gt;21&lt;/integer&gt;
        &lt;/dict&gt;
    &lt;array&gt;
&lt;/dict&gt;
&lt;/plist&gt;


Save that in /Library/LaunchAgents/com.mycompany.mypackage.myhelper.plist on your machine and then type:

sudo launchctl load /Library/LaunchAgents/com.mycompany.mypackage.myhelper.plist


To register it right away with launchd. On reboot it should register automatically. See the launchctl man page for more information on using it to interface with launchd.