Tuesday, September 20, 2011

App Store Approval Process +iphone app










this is from ......
 https://developer.apple.com/appstore/resources/approval/


App Store Approval Process

Ensure your app is ready for the approval process

Read the App Store Review Guidelines

Before you submit your app for approval, ensure that it follows the technical, design, and content specifications detailed in the App Store Review Guidelines and Human Interface Guidelines. Apps that do not follow these guidelines will be returned for modification before they can be posted to the App Store. Read the Guidelines       View additional app review resources
App Store Review Guidelines

Test on Devices

Test your app thoroughly on iPad, iPhone, and iPod touch before uploading it to iTunes Connect. The iPhone Simulator is ideal for prototyping your ideas, debugging memory leaks, simulating memory warnings, and getting a good feel for how your app is going to work. However, since the iPhone Simulator simulates iOS, not hardware, it is not a replacement for testing on an actual device.

What to expect during the review of your app

App Store Review Status

iOS submissions reviewed within the last 7 days:

97%
New Apps

99%
App Updates

The App Review Team checks every app submitted in order to protect consumer privacy, safeguard children from inappropriate content, and avoid applications that degrade the core experience of iPad, iPhone, and iPod touch. All aspects of your app must comply with the criteria outlined in the App Store Review Guidelines and should conform to the iPhone and iPad Human Interface Guidelines.
After your app has been reviewed and approved, it will be set to the Ready for Sale state (or Pending Contract if your contracts are not yet in effect). If an issue is discovered during the review of your app, you will receive an email detailing the reason why the application cannot be approved as submitted. This email will provide you with a description of the issue and in many cases also provide instructions and related technical documentation to help you resolve the issue. We encourage you to modify your app and resubmit it for review.
If you have any questions about the information you receive from the App Review Team, you can send an email to appreview@apple.com. In addition, you may appeal the rejection of your app to the App Review Board. Should you need code-level assistance in making modifications to your app, you can contact Apple Developer Technical Support. Visit the Support Center for details about requesting technical support.

Check the status of your app in iTunes Connect

Once youʼve reviewed and submitted your app, you will be taken back to the Manage your Applications page. Here youʼll find the application name, version, date submitted, Apple ID, as well as the status of your application. There are 16 colored status indicators that can appear on the Manage Your Applications page after submitting an app. Log in to iTunes Connect
Waiting for Upload (Yellow)
Appears when you've completed entering your metadata, however, you have not finished uploading your binary or have chosen to upload your binary at a later time. Your app must be in the Waiting For Upload state before you can deliver your binary through Application Loader.



Prepare for Upload (Yellow)
Appears when you have created a new version, but you have not yet clicked the Ready to Submit Binary button. This state also indicates that you can now deliver your binary through Application Loader.



Upload Received (Yellow)
Appears when your binary has been received through Application Loader, but is still being processed by the iTunes Connect system.


Invalid Binary (Red)
Appears when a binary is received through Application Loader, has been processed, but your binary is invalid.  Examples of an invalid binary are: your binary icon does not meet our requirements, you have placed the payload directory at the wrong level in the .app wrapper, you attempted to use a non-increasing CFBundleVersion, etc.



Missing Screenshot (Red)
Appears when your app is missing a required screenshot for iPhone and iPod touch or iPad for your default language app or for your added localizations. At least one screenshot is required for both iPhone and iPod touch and for iPad if you are submitting a universal app.


Waiting for Review (Yellow)
Appears after you submit a new application or update and prior to the application being reviewed by Apple. This status means that your app has been added to the app review queue, but has not yet started the review process.



Waiting For Export Compliance (Yellow)

Appears when your CCATS is in review with Export Compliance.


In Review (Yellow)
Appears when we are reviewing your app prior to the application being approved or rejected. It takes time to review binaries so we appreciate your patience and ask that you allow sufficient time for the processing of your application.  When the status of your application is in review, you have the option to reject the binary you have submitted by clicking Reject Binary. This will remove your binary from the review queue and will allow for another update to be submitted. If you reject your binary, the status of your app will change to Developer Rejected and when your binary is re-submitted, the review process will start over from the beginning.



Pending Contract (Yellow)
Appears when your application has been reviewed and is Ready for Sale but your contracts are not yet in effect. You may check the progress of your contracts in iTunes Connect by clicking on the Contracts, Tax & Banking information module.



Pending Developer Release (Yellow)
Appears when the version of your app has been approved by Apple and you have turned on the Version Release Control, but have not yet clicked Send Version Live. You should also see a pending action symbol on the version. Your version will remain in this state, and thus will not be live on the App Store until you click Send Version Live.



Processing for App Store (Yellow)
Appears when the version is being processed to go live on the App Store. Once the processing is complete, the version state will change to "Ready for Sale." This is a temporary state (approx. 1 - 2 hours). 



Ready for Sale (Green)
Appears once your application been approved and posted to the App Store. When your application is in this status, you have the option to remove it from the store by going to the Rights and Pricing page and removing all App Store territories.



Rejected (Red)
Appears when the binary has been rejected.


Removed from Sale (Red)
Appears when the binary has been removed from the App Store.



Developer Rejected (Red)
Appears when youʼve rejected the binary from the review process. Existing versions of your application on the App Store will not be affected by self-rejecting binaries in review.


Important: When you self-reject your binary, you lose your place in the review queue. Your binary will be placed at the end of the queue when you resubmit.
Developer Removed from Sale (Red)
Appears when you’ve removed your application from the App Store.

Status Update notification email

You can opt-in to receive email notifications alerting you to a change in the status of your applications. Visit the Manage Users section of iTunes Connect, click Edit Profile, select the Notifications tab and click the Status Update box(es).

App Status History

You can view a log with the status history of your app within iTunes Connect.  Once a change has been made to your app, a link titled "Status History" will appear with your app details in the Manage Your Applications section. Click the link to view a history of the status changes your app has gone through. You will also be able to see which user on your iTunes Connect account made the change, if the change was initiated by Apple, and the date and time the change was made.
Determine the availability date of your app

Determine the availability date of your app

You can set the date your application will be available for purchase on the App Store when you submit your binary. If your application has not been approved by Apple prior to this date, your application will go live as soon as it has been approved. This is a global date, and applies to all territories selected. If you change this date, it will apply to all versions of your application, not just the version where you are making the change. In addition, if you set this date in the future for the release of an update that is in review, you will remove any existing versions of this app from the App Store.

Monday, September 19, 2011

List of All countries into UIPicker View +iphone

- (void)ViewDidLoad{

cityPicker = [[[UIPickerView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height+44, 320, 216)] autorelease];
    cityPicker.tag = 10;
    cityPicker.showsSelectionIndicator = YES;
    cityPicker.delegate = self;
    cityPicker.dataSource = self;
   
    pickerToolBar = [[[UIToolbar alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height, 320, 44)] autorelease];
    pickerToolBar.tag = 11;
    pickerToolBar.barStyle = UIBarStyleBlackTranslucent;
   
    canclePikerBtn = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismisscityPicker:)] autorelease];
    spacer = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil] autorelease];
    doneBtn = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(donecityPicker:)] autorelease];
   
    [pickerToolBar setItems:[NSArray arrayWithObjects:canclePikerBtn, spacer, doneBtn, nil]];
    [self.view addSubview:pickerToolBar];
   
       
    [self.view addSubview:cityPicker];
   
countriesArray = [[NSMutableArray alloc] init];
    NSMutableDictionary *countriesDict = [[NSMutableDictionary alloc] init];
    NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];
   
    NSArray *countryArray = [NSLocale ISOCountryCodes];
    for (NSString *countryCode in countryArray)
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
       
        NSString *displayNameString = [locale displayNameForKey:NSLocaleCountryCode value:countryCode];
        [countriesArray addObject:displayNameString];
        [countriesDict setObject:countryCode forKey: displayNameString];
        [pool release];
       
    }
    NSLog(@"countriesDict..%@",countriesDict);
    NSLog(@"countriesArray..%@",countriesArray);
   
    [countriesArray sortUsingSelector:@selector(compare:)];
    }




   
 }

// now calling button methods




- (IBAction)countrysupportBtnclicked :(id)sender{
    scroll.frame = CGRectMake(0, 0, 320, scroll.frame.size.height - (cityPicker.frame.size.height + 70) );
    [scroll scrollRectToVisible:countrysupportBtn.frame animated:YES];
    CGRect cityPickerTargetFrame = CGRectMake(0, self.view.bounds.size.height-216, 320, 216);
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height-216-44, 320, 44);
    [UIView beginAnimations:@"MoveIn" context:nil];
    [self.view viewWithTag:10].frame = cityPickerTargetFrame;
    [self.view viewWithTag:11].frame = toolbarTargetFrame;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];

}
-(IBAction)dismisscityPicker:(id)sender{
    scroll.frame = CGRectMake(0, 0, 320, 480);
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height, 320, 44);
    CGRect cityPickerTargetFrame = CGRectMake(0, self.view.bounds.size.height+44, 320, 216);
    [UIView beginAnimations:@"MoveOut" context:nil];
    [self.view viewWithTag:9].alpha = 0;
    [self.view viewWithTag:10].frame = cityPickerTargetFrame;
    [self.view viewWithTag:11].frame = toolbarTargetFrame;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
}
-(IBAction)donecityPicker:(id)sender{
   
   
    scroll.frame = CGRectMake(0, 0, 320, 480);
   
    CGRect toolbarTargetFrame = CGRectMake(0, self.view.bounds.size.height, 320, 44);
    CGRect cityPickerTargetFrame = CGRectMake(0, self.view.bounds.size.height+44, 320, 216);
    [UIView beginAnimations:@"MoveOut" context:nil];
    [self.view viewWithTag:9].alpha = 0;
    [self.view viewWithTag:10].frame = cityPickerTargetFrame;
    [self.view viewWithTag:11].frame = toolbarTargetFrame;
    [UIView setAnimationDelegate:self];
    [UIView commitAnimations];
   
   
}


#pragma mark -
#pragma mark UIPickerView delegate

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    return  self.countriesArray.count;
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    NSLog(@"countriesArray..%@",countriesArray);
    return [self.countriesArray objectAtIndex:row];
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    countryNameLbl.text = [self.countriesArray objectAtIndex:row];
    [registerInfoDic setObject:countryNameLbl.text forKey:COUNTRY_SUPPORT];
}
//pickerview

eMail validation on iphone

- (BOOL) validateEmail:(NSString*)email
{
    if( (0 != [email rangeOfString:@"@"].length) &&  (0 != [email rangeOfString:@"."].length) )
    {
        NSMutableCharacterSet *invalidCharSet = [[[[NSCharacterSet alphanumericCharacterSet] invertedSet]mutableCopy]autorelease];
        [invalidCharSet removeCharactersInString:@"_-"];
       
        NSRange range1 = [email rangeOfString:@"@" options:NSCaseInsensitiveSearch];
       
        // If username part contains any character other than "."  "_" "-"
       
        NSString *usernamePart = [email substringToIndex:range1.location];
        NSArray *stringsArray1 = [usernamePart componentsSeparatedByString:@"."];
        for (NSString *string in stringsArray1) {
            NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet: invalidCharSet];
            if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
                return NO;
        }
       
        NSString *domainPart = [email substringFromIndex:range1.location+1];
        NSArray *stringsArray2 = [domainPart componentsSeparatedByString:@"."];
       
        for (NSString *string in stringsArray2) {
            NSRange rangeOfInavlidChars=[string rangeOfCharacterFromSet:invalidCharSet];
            if(rangeOfInavlidChars.length !=0 || [string isEqualToString:@""])
                return NO;
        }
       
        return YES;
    }
    else // no '@' or '.' present
        return NO;
}