Create Vcard File / Create .vcf

Contacts, NSDocumentDirectory

#import <Contacts/Contacts.h>

– (IBAction)btnCreatevcfFileClicked:(id)sender

{

    NSString *vcard = @”BEGIN:VCARDnVERSION:3.0n”;

    

    // Name

    vcard = [vcard stringByAppendingFormat:@”N:%@;%@;%@;%@;%@n”,

             @”lastname”, //lastname

             @”firstname”, //firstname

             @”middlename”, //middlename

             @”prefix”, //prefix

             @”suffix” //suffix

             ];

    

    vcard = [vcard stringByAppendingFormat:@”FN:%@n”,@”compositeName”]; //compositeName

    vcard = [vcard stringByAppendingFormat:@”NICKNAME:%@n”,@”nickname”]; //nickname

    vcard = [vcard stringByAppendingFormat:@”X-PHONETIC-FIRST-NAME:%@n”,@”firstnamephonetic”]; //firstnamephonetic

    vcard = [vcard stringByAppendingFormat:@”X-PHONETIC-LAST-NAME:%@n”,@”lastnamephonetic”]; //lastnamephonetic

    

    

    // Work

    vcard = [vcard stringByAppendingFormat:@”ORG:%@;%@n”,@”organization”,@”department”]; //organization, department

    vcard = [vcard stringByAppendingFormat:@”TITLE:%@n”,@”jobtitle”]; //jobtitle

    

    // Mail

    vcard = [self emailToVcardFieldEmail:@”email1@gmail.com” label:@”HOME” emailCounter:1 vCard:vcard]; //email, emailLabel

    vcard = [self emailToVcardFieldEmail:@”email2@gmail.com” label:@”WORK” emailCounter:2 vCard:vcard]; //email, emailLabel

    

    // Tel

    vcard = [self phoneToVcardFieldPhoneNo:@”1111111111″ label:@”MOBILE” phoneCounter:1 vCard:vcard]; //phone no, phoneLabel

    vcard = [self phoneToVcardFieldPhoneNo:@”2222222222″ label:@”MAIL” phoneCounter:2 vCard:vcard]; //phone no, phoneLabel

    vcard = [self phoneToVcardFieldPhoneNo:@”3333333333″ label:@”IPHONE” phoneCounter:3 vCard:vcard]; //phone no, phoneLabel

    vcard = [self phoneToVcardFieldPhoneNo:@”4444444444″ label:@”WORKFAX” phoneCounter:4 vCard:vcard]; //phone no, phoneLabel

    

    

   //  Adress

    NSDictionary *address1 = [[NSDictionary alloc]initWithObjectsAndKeys:

                             @”St Jhons”, @”Street”,

                             @”San Fransisco”, @”City”,

                             @”California”, @”State”,

                             @”27105″, @”ZIP”,

                             @”USA”, @”Country”,

                             @”1″, @”CountryCode”, nil];

    

    vcard = [self addressToVcardFieldAddress:address1 label:@”HOME” AddressCounter:1 vCard:vcard];

    

    NSDictionary *address2 = [[NSDictionary alloc]initWithObjectsAndKeys:

                             @”St Jhons”, @”Street”,

                             @”San Fransisco”, @”City”,

                             @”California”, @”State”,

                             @”27105″, @”ZIP”,

                             @”USA”, @”Country”,

                             @”1″, @”CountryCode”, nil];

     vcard = [self addressToVcardFieldAddress:address2 label:@”WORK” AddressCounter:2 vCard:vcard];

    

    // url

    vcard = [self urlToVcardFieldURL:@”www.apple.com” label:@”HOME” URLCounter:1 vCard:vcard]; //url, urlLabel

    vcard = [self urlToVcardFieldURL:@”www.google.com” label:@”WORK” URLCounter:2 vCard:vcard]; //url, urlLabel

    

    

    

    // IM SMS

    NSDictionary *im = [[NSDictionary alloc]initWithObjectsAndKeys:

                        @”Apple Service”, @”service”,

                        @”Apple User Name”, @”username”, nil];

    

    vcard = [self imToVcardFieldIm:im label:@”HOME” IMCounter:1 vCard:vcard]; //sms, smsLabel

    

    

    

    // birthday

    NSDate *birthday = @”1/1/2011″; //birthday

    if (birthday)

    {

        NSString *bday = [NSString stringWithFormat:@”%@”,birthday];

        NSArray *bdayArr = [bday componentsSeparatedByString:@” “];

        bday = [bdayArr objectAtIndex:0];

        

        vcard = [vcard stringByAppendingFormat:@”BDAY;value=date:%@n”,bday];

    }

    // Photo

    NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@”Own_Selected”], 0.0);//imageData;

    if (imageData)

    {

        vcard = [vcard stringByAppendingFormat:@”PHOTO;BASE64:%@n”,[imageData base64Encoding]];

    }

    

    

    

    

    // end

    vcard = [vcard stringByAppendingString:@”END:VCARD”];

    

        NSLog(@”%@”,vcard);

    

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

        NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory

        NSLog(@”%@”,documentsDirectory);

        NSError *error;

        BOOL succeed = [vcard writeToFile:[documentsDirectory stringByAppendingPathComponent:@”contact.vcf”]

                                      atomically:YES encoding:NSUTF8StringEncoding error:&error];

        if (!succeed){

            // Handle error here

            NSLog(@”Error”);

        }

    

    

    

    

    

}

– (NSString *)emailToVcardFieldEmail:(NSString *)email label:(NSString *)label emailCounter:(NSInteger)counter vCard:(NSString*)vcard

{

    // label = Home

    // label = WORK

    

    NSString *labelLower = [label lowercaseString];

    

    

    if ([labelLower isEqualToString:@”_$!<home>!$_”]) vcard = [NSString stringWithFormat:@”EMAIL;type=INTERNET;type=HOME:%@n”,email];

    else if ([labelLower isEqualToString:@”_$!<work>!$_”]) vcard = [NSString stringWithFormat:@”EMAIL;type=INTERNET;type=WORK:%@n”,email];

    else

    {

        vcard = [vcard stringByAppendingFormat:@”item%d.EMAIL;type=INTERNET:%@nitem%d.X-ABLabel:%@n”,counter,email,counter,label];

    }

    return vcard;

}

– (NSString *)phoneToVcardFieldPhoneNo:(NSString *)phone label:(NSString *)label phoneCounter:(NSInteger)counter vCard:(NSString*)vcard

{

    //MOBILE

    //IPHONE

    //HOME

    //WORK

    //MAIN

    //HOMEFAX

    //WORKFAX

    //PAGER

    

    

    

    NSString *labelLower = [label lowercaseString];

   

    

    if ([labelLower isEqualToString:@”_$!<mobile>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=CELL:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<iphone!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=IPHONE:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<home>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=HOME:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<work>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=WORK:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<main>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=MAIN:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<homefax>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=HOME;type=FAX:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<workfax>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=WORK;type=FAX:%@n”,phone];

    else if ([labelLower isEqualToString:@”_$!<pager>!$_”]) vcard = [NSString stringWithFormat:@”TEL;type=PAGER:%@n”,phone];

    else

    {

       //        if not showing phone number in outlook express in window use below code

//        vcard = [vcard stringByAppendingFormat:@”TEL;TYPE=%@,VOICE:%@n”,label,phone];

        vcard = [vcard stringByAppendingFormat:@”item%d.TEL:%@nitem%d.X-ABLabel:%@n”,counter,phone,counter,label];

        

    }

    

    return vcard;

}

– (NSString *)addressToVcardFieldAddress:(NSDictionary *)address label:(NSString *)label AddressCounter:(NSInteger)counter vCard:(NSString*)vcard

{

    //WORK

    //HOME

    

    NSString *labelField = @””;

    NSString *labelLower = [label lowercaseString];

    NSString *type = @”HOME”;

    

    //

    if([labelLower isEqualToString:@”_$!<work>!$_”]) type = @”WORK”;

    else if([labelLower isEqualToString:@”_$!<home>!$_”]) {}

    else if( label && [label length] > 0 )

    {

        labelField = [NSString stringWithFormat:@”item%d.X-ABLabel:%@n”,counter,label];

    }

    

    //

    NSString *street = [address objectForKey:@”Street”] ? [address objectForKey:@”Street”] : @””;

    if ([street rangeOfString:@”n”].location != NSNotFound)

    {

        NSArray *arr = [street componentsSeparatedByString:@”n”];

        street = [arr componentsJoinedByString:@”n”];

    }

    

    NSString *City = [address objectForKey:@”City”] ? [address objectForKey:@”City”] : @””;

    NSString *State = [address objectForKey:@”State”] ? [address objectForKey:@”State”] : @””;

    NSString *ZIP = [address objectForKey:@”ZIP”] ? [address objectForKey:@”ZIP”] : @””;

    NSString *Country = [address objectForKey:@”Country”] ? [address objectForKey:@”Country”] : @””;

    NSString *CountryCode = [address objectForKey:@”CountryCode”] ? [address objectForKey:@”CountryCode”] : @””;

    

    

    //

    vcard = [vcard stringByAppendingFormat:@”item%d.ADR;type=%@:;;%@;%@;%@;%@;%@n%@item%d.X-ABADR:%@n”,

             counter,

             type,

             street,

             City,

             State,

             ZIP,

             Country,

             labelField,

             counter,

             CountryCode

             ];

    

    //

   

    return vcard;

}

– (NSString *)urlToVcardFieldURL:(NSString *)url label:(NSString *)label URLCounter:(NSInteger)counter vCard:(NSString*)vcard

{

    //HOME

    //WORK

    

    NSString *labelLower = [label lowercaseString];

    

    if ([labelLower isEqualToString:@”_$!<home>!$_”]) vcard = [NSString stringWithFormat:@”URL;type=HOME:%@n”,url];

    else if ([labelLower isEqualToString:@”_$!<work>!$_”]) vcard = [NSString stringWithFormat:@”URL;type=WORK:%@n”,url];

    else

    {

        

        vcard = [vcard stringByAppendingFormat:@”item%d.URL:%@nitem%d.X-ABLabel:%@n”,counter,url,counter,label];

    }

    

    return vcard;

}

– (NSString *)imToVcardFieldIm:(NSDictionary *)im label:(NSString *)label IMCounter:(NSInteger)counter vCard:(NSString*)vcard

{

    

    //HOME

    //WORK

    

    

    NSString *labelLower = [label lowercaseString];

    

    NSString *service = [im objectForKey:@”service”] ? [im objectForKey:@”service”] : @””;

    service = [service uppercaseString];

    

    NSString *username = [im objectForKey:@”username”] ? [im objectForKey:@”username”] : @””;

    

    //

    if ([labelLower isEqualToString:@”_$!<home>!$_”] || [labelLower isEqualToString:@”_$!<work>!$_”])

    {

        NSString *type = [labelLower isEqualToString:@”_$!<home>!$_”] ? @”HOME” : @”WORK”;

        vcard = [NSString stringWithFormat:@”X-%@;type=%@:%@n”,service,type,username];

    }

    

    else

    {

        vcard = [vcard stringByAppendingFormat:@”item%d.X-%@:%@nitem%d.X-ABLabel:%@n”,counter,service,username,counter,label];

    }

    

    return vcard;

}

Leave a comment