iOS Basic DevelopmentUser Selection Designby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturd...
Social Shareby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
UIActionSheetby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
- (IBAction)shareSocial:(id)sender {UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:@"Social Network"delegate:...
Social FrameworkFacebookby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
- (IBAction)directShareFacebook:(id)sender {if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])...
Social FrameworkTwitterby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
- (IBAction)directShareTwitter:(id)sender {if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]){S...
UIDocumentInteractionControllerby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15...
- (IBAction)openDocumentAction:(id)sender {NSURL *url = [[NSBundle mainBundle] URLForResource:@"mac_pro" withExtension:@"j...
- (IBAction)directShareInstagram:(id)sender {NSURL *instagramURL = [NSURL URLWithString:@"instagram://location?id=1"];if (...
UIAlertViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
-(void)showAlertView:(NSString*)title{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titlemessage:@""delegate:nil...
MFMailComposeViewControllerby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
- (IBAction)directSendMail:(id)sender {if ([MFMailComposeViewController canSendMail]){MFMailComposeViewController *mailVC ...
UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
Class : UIPickerViewFramework : UIKitSample Code : UICatalogInit : initWithFrame : (CGRect) or Interface BuilderDatasource...
การเรียกใช้งาน1. Init UIPickerView2. bind Datasouce / Delegate3. กําหนดคอลัมน์numberOfComponentsInPickerView4. กําหนดจํานว...
1. Init UIPickerView (.h)IBOutlet UIPickerView *myPV ;2. bind Datasouce / Delegate (.m)[myPV setDataSource:self];[myPV set...
3. กําหนดคอลัมน์ (.m)- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;{return 3 ;}4. กําหนดจํานวนแถว...
5. กําหนดการแสดงค่าเป็น Text หรือView ได้ (.m)#pragma แสดงค&าเป*น Text- (NSString *)pickerView:(UIPickerView *)pickerView ...
5. กําหนดการแสดงค่าเป็น Text หรือView ได้ (.m)#pragma แสดงค&าเป*นรูปภาพ- (UIView *)pickerView:(UIPickerView *)pickerViewvi...
6. ใช้ Delegate เมื่อเลือกข้อมูลเสร็จ- (void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)rowinComponent:(...
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Top SecretSaturday, June 15, 13
Workshop : Top SecretTask : สร้างหน้าจอ Login Passwordโดย User ต้องทําการเลือก Password =246จาก UIPickerView จากนั้นจึงเข้...
iOS Basic DevelopmentSubmit App Storeby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, J...
Course Outline1. Introduction & Xcode2. Objective-C & Frameworks3. View &ViewController4. View &ViewController (2)5. Submi...
Developing iOS Apps :App StoreAdd New Application ( iTunes Connect )Upload required icon and screenshotsUpload Application...
หลังจากที่นักเรียนได้เรียนรู้การพื้นฐานการเขียนโปรแกรมบน iPhone และการใช้Tool ต่าง ๆ ไปเรียบร้อยแล้วนักเรียนก็ทําการเขียนโ...
หลังจากที่นักเรียนได้เรียนรู้การพื้นฐานการเขียนโปรแกรมบน iPhone และการใช้Tool ต่าง ๆ ไปเรียบร้อยแล้วนักเรียนก็ทําการเขียนโ...
โดยปกติแล้วขั้นตอนการเขียนโปรแกรมระหว่างที่ ทําการ Build & Run จะเป็นเช่นนี้1. Error ! (ไม่สามารถ ทําการ Build ได้)2.Warni...
เนื่องจากเราไม่สามารถเขียนโปรแกรมเพียงครั้งเดียวให้ทํางานได้ถูกต้องสมบูรณ์ได้ ดังนั้นจึงต้องมีวิธีการตรวจสอบการทํางานของโป...
Debuggingคือโหมดการ Run Application ไปทีละขั้นเพื่อดูทํางานของApplication ในจุดที่เราสนใจว่าทํางานได้ถูกต้องตามที่เราต้องก...
Debugging- เพิ่ม-ลบ breakpoints เพื่อหยุดโปรแกรมในจุดที่เราสนใจ- ดูค่าในตัวแปรต่าง ๆ ได้โดยการเอา Mouse ไปชี้- Run แบบ Ste...
Understanding Errorsby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
Understanding Errorsบทนี้จะอธิบายความหมายของ Error ต่าง ๆ ที่มักเจอบ่อยซึ่งจะช่วยให้เราแก้ปัญหาได้รวดเร็วขึ้น และสามารถทํา...
Understanding ErrorsExpected ‘;’ before ...สาเหตุ :- ลืมใส่ ; ปิดประโยคby Eakapong Kattiya www.ibluecode.com eak.k@iblueco...
Understanding Errors‘Something’ Undeclaredไม่สามารถหาที่มาของ Class Something ที่เราเรียกใช้ได้สาเหตุ :- เขียนชื่อ Class ผ...
Understanding ErrorsStatically allocated instance of Objective-C classสาเหตุ :- ลืมใส่ * ให้กับ Object ที่เป็นประเภท Dynam...
Understanding Crash Problemby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
Understanding Crash Problemหลังจากที่เราแก้ Error และสามารถ Run โปรแกรมได้แล้วจะพบว่าโปรแกรมเกิดการ Crash ในระหว่างที่ทําง...
Understanding Crash Problem“EXC_BAD_ACCESS”สาเหตุ :- ทําการเรียก Object ที่ถูก release ไปแล้วเช่นNSString *myString ;[mySt...
Understanding Crash Problem“SIGABRT” = SIGNAL ABORTเป็นคําสั่งให้หยุดการทํางานของโปรแกรมเนื่องจากพบ Errorสาเหตุ :- ทําการเ...
Understanding Interface Builder Errorby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, J...
Understanding Interface Builder Error:บางครั้งการ Crash โปรแกรมเกิดจากการที่เราแก้ไข fileXIB ใน Interface Builder ได้เช่นกั...
Workshopให้นักเรียนทํา Project ของตัวเองแล้วทดลอง Debug และแก้ไข Error ต่าง ๆ ที่เกิดขึ้นby Eakapong Kattiya www.ibluecode...
PerformanceToolby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
PerformanceTool- Clang Analyzer- Instrumentsby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Satu...
Clang Analyzerเป็นเครื่องมือในการวิเคราะห์ Code ของเราก่อนทําการ Runว่าเขียนได้มีประสิทธิภาพหรือไม่ เช่น- ตรวจสอบจุดที่น่า...
Instrumentsเป็นเครื่องมือในการทดสอบ Performance ขณะที่ Runโปรแกรม- ตรวจสอบจุดที่เกิด Memory Leaked- ตรวจสอบการจองหน่วยความ...
Workshopให้นักเรียนทําการTest Performance Project ของตัวเองด้วยเครื่องมือ Analyzer และ Instrumentsby Eakapong Kattiya www....
Submit AppStore- เปิดตัววันที่ 10 July 2008- เป็นครั้งแรกและเป็นช่องทางที่ง่ายที่สุดที่จะทําให้นักพัฒนาสามารถขาย Applicati...
Submit AppStore5-March-2012- จํานวน App รวม (iPhone/iPad/iPodTouch) คือ 550,000+- จํานวน App บน iPad คือ 170,000 +- ยอด Ap...
Submit AppStoreby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
In-App Purchases (Freemium Model)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June ...
In-App Purchases (TinyTower)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
In-App PurchasesOrder and Chaos NBA Jamby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday,...
In-App Purchases (The SmurfsVillage)8-Year-Old Girl Racks Up $1400 Bill Buying Smurfberries in SmurfsVillageby Eakapong Ka...
In-App Purchases (Restrictions)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15...
by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
Upcoming SlideShare
Loading in …5
×

(1 July 2013) iOS Basic Development Day 5 - Submit to App Store

966 views

Published on

iOS Development Basic Debugging & Performance
by Eakapong Kattiya
eakkattiya@gmail.ccom
www.ibluecode.com
+66 086-673-2111

Published in: Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
966
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
56
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

(1 July 2013) iOS Basic Development Day 5 - Submit to App Store

  1. 1. iOS Basic DevelopmentUser Selection Designby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  2. 2. Social Shareby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  3. 3. UIActionSheetby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  4. 4. - (IBAction)shareSocial:(id)sender {UIActionSheet *action = [[UIActionSheet alloc]initWithTitle:@"Social Network"delegate:selfcancelButtonTitle:@"Cancel"destructiveButtonTitle:nilotherButtonTitles:@"Facebook",@"Twitter",@"Instagram",@"Email", nil];[action showInView:self.view];}-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{if(buttonIndex == 0){[self directShareFacebook:nil];}if(buttonIndex == 1){[self directShareTwitter:nil];}if(buttonIndex == 2){[self directShareInstagram:nil];}if(buttonIndex == 3){[self directSendMail:nil];}}UIActionSheetby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  5. 5. Social FrameworkFacebookby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  6. 6. - (IBAction)directShareFacebook:(id)sender {if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]){SLComposeViewController *composeVC =[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];[composeVC setInitialText:self.myTextView.text];UIImage *image = self.myImageView.image;[composeVC addImage:image];NSURL *url = [NSURL URLWithString:@"http://www.ibluecode.com"];[composeVC addURL:url];[self presentViewController:composeVCanimated:YEScompletion:nil];}}SLComposeViewController : Facebookby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  7. 7. Social FrameworkTwitterby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  8. 8. - (IBAction)directShareTwitter:(id)sender {if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]){SLComposeViewController *composeVC =[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];[composeVC setInitialText:self.myTextView.text];UIImage *image = self.myImageView.image;[composeVC addImage:image];NSURL *url = [NSURL URLWithString:@"http://www.ibluecode.com"];[composeVC addURL:url];[self presentViewController:composeVCanimated:YEScompletion:nil];}}SLComposeViewController :Twitterby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  9. 9. UIDocumentInteractionControllerby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  10. 10. - (IBAction)openDocumentAction:(id)sender {NSURL *url = [[NSBundle mainBundle] URLForResource:@"mac_pro" withExtension:@"jpg"];self.docController = [UIDocumentInteractionController interactionControllerWithURL:url];self.docController.delegate = self ;BOOL isValid = [[UIApplication sharedApplication] canOpenURL:url];NSLog(@"uti: %@", [self.docController UTI]);if(isValid){[self.docController presentOptionsMenuFromRect:self.view.frameinView:self.viewanimated:YES];}}UIDocumentInteractionController :Allby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  11. 11. - (IBAction)directShareInstagram:(id)sender {NSURL *instagramURL = [NSURL URLWithString:@"instagram://location?id=1"];if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"Image.igo"];NSData *imageData = UIImagePNGRepresentation(self.myImageView.image);[imageData writeToFile:savedImagePath atomically:YES];NSURL *imageUrl = [NSURL fileURLWithPath:savedImagePath];NSLog(@"%@",imageUrl);UIDocumentInteractionController *docController = [UIDocumentInteractionController new];docController.delegate = self;docController.UTI = @"com.instagram.exclusivegram";docController.URL = imageUrl;[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];}else{[self showAlertView:@"Please install Instagram before share."];}}UIDocumentInteractionController : Instagramby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  12. 12. UIAlertViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  13. 13. -(void)showAlertView:(NSString*)title{UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titlemessage:@""delegate:nilcancelButtonTitle:@"OK"otherButtonTitles: nil];[alert show];}UIAlertViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  14. 14. MFMailComposeViewControllerby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  15. 15. - (IBAction)directSendMail:(id)sender {if ([MFMailComposeViewController canSendMail]){MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init];mailVC.mailComposeDelegate = self;[mailVC setSubject:@"Subject"];NSArray *toRecipients = [NSArray arrayWithObjects:@"eak.k@ibluecode.com",@"eakkattiya@gmail.com", nil];[mailVC setToRecipients:toRecipients];UIImage *myImage = self.myImageView.image ;NSData *imageData = UIImagePNGRepresentation(myImage);[mailVC addAttachmentData:imageData mimeType:@"image/png" fileName:@"attachment"];NSString *emailBody = self.myTextView.text;[mailVC setMessageBody:emailBody isHTML:NO];//iOS 5//[self presentModalViewController:mailer animated:YES];//iOS 6[self presentViewController:mailVC animated:YES completion:nil];}}MFMailComposeViewControllerby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  16. 16. UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  17. 17. Class : UIPickerViewFramework : UIKitSample Code : UICatalogInit : initWithFrame : (CGRect) or Interface BuilderDatasource : – numberOfComponentsInPickerView:– pickerView:numberOfRowsInComponent:Delegate : – pickerView:titleForRow:forComponent:– pickerView:viewForRow:forComponent:reusingView:– pickerView:didSelectRow:inComponent:UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  18. 18. การเรียกใช้งาน1. Init UIPickerView2. bind Datasouce / Delegate3. กําหนดคอลัมน์numberOfComponentsInPickerView4. กําหนดจํานวนแถวpickerView:numberOfRowsInComponent:5. กําหนดการแสดงค่าเป็น Text หรือView ได้pickerView:titleForRow:forComponent:pickerView:viewForRow:forComponent:reusingView:6. ใช้ Delegate เมื่อเลือกข้อมูลเสร็จpickerView:didSelectRow:inComponentUIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  19. 19. 1. Init UIPickerView (.h)IBOutlet UIPickerView *myPV ;2. bind Datasouce / Delegate (.m)[myPV setDataSource:self];[myPV setDelegate:self];[myPV selectRow:0 inComponent:0 animated:NO];[myPV selectRow:0 inComponent:1 animated:NO];[myPV selectRow:0 inComponent:2 animated:NO];UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  20. 20. 3. กําหนดคอลัมน์ (.m)- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;{return 3 ;}4. กําหนดจํานวนแถว (.m)- (NSInteger)pickerView:(UIPickerView *)pickerViewnumberOfRowsInComponent:(NSInteger)component;{if(component == 1){return 20 ;}if(component == 0){return 30 ;}return 10 ;}UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  21. 21. 5. กําหนดการแสดงค่าเป็น Text หรือView ได้ (.m)#pragma แสดงค&าเป*น Text- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;{NSMutableArray *arrayNo1 = [[NSMutableArray alloc] init];[arrayNo1 addObject:@"0"];[arrayNo1 addObject:@"1"];[arrayNo1 addObject:@"2"];[arrayNo1 addObject:@"3"];[arrayNo1 addObject:@"4"];[arrayNo1 addObject:@"5"];[arrayNo1 addObject:@"6"];[arrayNo1 addObject:@"7"];[arrayNo1 addObject:@"8"];[arrayNo1 addObject:@"9"];return [arrayNo1 objectAtIndex:row];}UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  22. 22. 5. กําหนดการแสดงค่าเป็น Text หรือView ได้ (.m)#pragma แสดงค&าเป*นรูปภาพ- (UIView *)pickerView:(UIPickerView *)pickerViewviewForRow:(NSInteger)rowforComponent:(NSInteger)componentreusingView:(UIView *)view{NSString *imageName = [NSString stringWithFormat:@"%d.png",row];UIImageView *bgImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:imageName]];[bgImageView setFrame:CGRectMake(0, 0, 50, 50)];[bgImageView setContentMode:UIViewContentModeScaleAspectFit];return bgImageView;}UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  23. 23. 6. ใช้ Delegate เมื่อเลือกข้อมูลเสร็จ- (void)pickerView:(UIPickerView *)pickerViewdidSelectRow:(NSInteger)rowinComponent:(NSInteger)component{if(component == 0){inputCol1 = [arrayNo1 objectAtIndex:row];}else if(component == 1){inputCol2 = [arrayNo2 objectAtIndex:row];}else if(component == 2){inputCol3 = [arrayNo3 objectAtIndex:row];}}UIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  24. 24. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Top SecretSaturday, June 15, 13
  25. 25. Workshop : Top SecretTask : สร้างหน้าจอ Login Passwordโดย User ต้องทําการเลือก Password =246จาก UIPickerView จากนั้นจึงเข้าสู่หน้าจอต่อไปสามารถ Reset ค่าได้จากปุ่ม RESET BUTTONObjective : นักเรียนมีความเข้าใจในเรื่องUIViewControllerUser Interface และ IBOutletAction-TargetDatasouceDelegateUIPickerViewby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  26. 26. iOS Basic DevelopmentSubmit App Storeby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  27. 27. Course Outline1. Introduction & Xcode2. Objective-C & Frameworks3. View &ViewController4. View &ViewController (2)5. Submit App StoreCourse Outlineby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  28. 28. Developing iOS Apps :App StoreAdd New Application ( iTunes Connect )Upload required icon and screenshotsUpload Application Binary ( IPA File )Waiting for app review by apple ( 7 days - Few months)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  29. 29. หลังจากที่นักเรียนได้เรียนรู้การพื้นฐานการเขียนโปรแกรมบน iPhone และการใช้Tool ต่าง ๆ ไปเรียบร้อยแล้วนักเรียนก็ทําการเขียนโปรแกรมได้อย่างราบรื่น ระหว่างที่เขียน Code นั้นก็ไม่มี Error อะไร สามารถ Compile และRun Application ได้โดยไม่มีการ Crash ของโปรแกรมและการทํางานต่าง ๆ นั้นรวดเร็วถูกต้องตามที่ออกแบบไว้ทุกประการ.....by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  30. 30. หลังจากที่นักเรียนได้เรียนรู้การพื้นฐานการเขียนโปรแกรมบน iPhone และการใช้Tool ต่าง ๆ ไปเรียบร้อยแล้วนักเรียนก็ทําการเขียนโปรแกรมได้อย่างราบรื่น ระหว่างที่เขียน Code นั้นก็ไม่มี Error อะไร สามารถ Compile และRun Application ได้โดยไม่มีการ Crash ของโปรแกรมและการทํางานต่าง ๆ นั้นรวดเร็วถูกต้องตามที่ออกแบบไว้ทุกประการ.....ใช่หรือไม่ ?by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  31. 31. โดยปกติแล้วขั้นตอนการเขียนโปรแกรมระหว่างที่ ทําการ Build & Run จะเป็นเช่นนี้1. Error ! (ไม่สามารถ ทําการ Build ได้)2.Warning ! (ไม่ Error แต่มีการเตือน)3. Crash ! (Build ได้แต่ Run ไม่ได้)4.Wrong ! (Run ได้แต่ทํางานผิด)5. Slow ! (ทํางานถูกแต่ช้า ไม่ลื่น)6.Work ! (ทํางานได้ถูกและเร็ว)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  32. 32. เนื่องจากเราไม่สามารถเขียนโปรแกรมเพียงครั้งเดียวให้ทํางานได้ถูกต้องสมบูรณ์ได้ ดังนั้นจึงต้องมีวิธีการตรวจสอบการทํางานของโปรแกรมไปทีละขั้น ซึ่งเราเรียกว่าการDebuggingby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  33. 33. Debuggingคือโหมดการ Run Application ไปทีละขั้นเพื่อดูทํางานของApplication ในจุดที่เราสนใจว่าทํางานได้ถูกต้องตามที่เราต้องการหรือไม่ โดยขั้นตอนดังนี้by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  34. 34. Debugging- เพิ่ม-ลบ breakpoints เพื่อหยุดโปรแกรมในจุดที่เราสนใจ- ดูค่าในตัวแปรต่าง ๆ ได้โดยการเอา Mouse ไปชี้- Run แบบ Step in ,Step Out เพื่อตรวจสอบขั้นตอนการทํางานของโปรแกรม- NSLog เพื่อแสดงข้อมูลต่าง ๆ บนหน้าต่าง Consoleby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  35. 35. Understanding Errorsby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  36. 36. Understanding Errorsบทนี้จะอธิบายความหมายของ Error ต่าง ๆ ที่มักเจอบ่อยซึ่งจะช่วยให้เราแก้ปัญหาได้รวดเร็วขึ้น และสามารถทําการBuild โปรแกรมได้by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  37. 37. Understanding ErrorsExpected ‘;’ before ...สาเหตุ :- ลืมใส่ ; ปิดประโยคby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  38. 38. Understanding Errors‘Something’ Undeclaredไม่สามารถหาที่มาของ Class Something ที่เราเรียกใช้ได้สาเหตุ :- เขียนชื่อ Class ผิด เช่น ตัวเล็ก–ใหญ่- ไม่ได้ import file หรือ import file ผิด- ไม่ได้ทําการ import Framework , libraryby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  39. 39. Understanding ErrorsStatically allocated instance of Objective-C classสาเหตุ :- ลืมใส่ * ให้กับ Object ที่เป็นประเภท Dynamicเช่นNSString myString ;ที่ถูกคือNSString *myString ;by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  40. 40. Understanding Crash Problemby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  41. 41. Understanding Crash Problemหลังจากที่เราแก้ Error และสามารถ Run โปรแกรมได้แล้วจะพบว่าโปรแกรมเกิดการ Crash ในระหว่างที่ทํางาน โดยบทนี้จะอธิบายการเกิด Crash ที่มักเจอได้บ่อยby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  42. 42. Understanding Crash Problem“EXC_BAD_ACCESS”สาเหตุ :- ทําการเรียก Object ที่ถูก release ไปแล้วเช่นNSString *myString ;[myString release] ; // ไม่มี object แล้วmyString = @”Test” ;การแก้ไข :- Debug ทีละขั้น หรือ ใช้เครื่องมือ Instruments ตรวจหาZombies Objectby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  43. 43. Understanding Crash Problem“SIGABRT” = SIGNAL ABORTเป็นคําสั่งให้หยุดการทํางานของโปรแกรมเนื่องจากพบ Errorสาเหตุ :- ทําการเรียก Method ที่ไม่มีอยู่ หรือ เรียกผิด เช่นNSString *myString ;myString = @”Test” ;[myString releasee] ;// Method releasee นั้นไม่มีใน Classการแก้ไข :- Debug ทีละขั้น และตรวจสอบ Warningby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  44. 44. Understanding Interface Builder Errorby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  45. 45. Understanding Interface Builder Error:บางครั้งการ Crash โปรแกรมเกิดจากการที่เราแก้ไข fileXIB ใน Interface Builder ได้เช่นกันสาเหตุ :- กําหนด Class ผิดประเภทวิธีแก้ไข :- เปิดหน้าต่าง Console แล้วดูบรรทัดล่าสุดจะบอกรายละเอียดของ Class ที่ Error อยู่แล้วทําการแก้ไขให้ถูกต้องby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  46. 46. Workshopให้นักเรียนทํา Project ของตัวเองแล้วทดลอง Debug และแก้ไข Error ต่าง ๆ ที่เกิดขึ้นby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  47. 47. PerformanceToolby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  48. 48. PerformanceTool- Clang Analyzer- Instrumentsby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  49. 49. Clang Analyzerเป็นเครื่องมือในการวิเคราะห์ Code ของเราก่อนทําการ Runว่าเขียนได้มีประสิทธิภาพหรือไม่ เช่น- ตรวจสอบจุดที่น่าจะเกิด Memory Leaked ได้- ตรวจสอบตัวแปรที่ไม่ถูกเรียกใช้- เรียกใช้ได้จาก menu Build and Analyzeby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  50. 50. Instrumentsเป็นเครื่องมือในการทดสอบ Performance ขณะที่ Runโปรแกรม- ตรวจสอบจุดที่เกิด Memory Leaked- ตรวจสอบการจองหน่วยความจํา- ตรวจสอบ Zombie Object(Object ที่ตายหรือถูก Release ไปแล้วแต่มีการเรียกใช้อีกเปรียบเสมือน Zombie ที่ตายแล้วถูกเรียกปลุกขึ้นมาใหม่)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  51. 51. Workshopให้นักเรียนทําการTest Performance Project ของตัวเองด้วยเครื่องมือ Analyzer และ Instrumentsby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  52. 52. Submit AppStore- เปิดตัววันที่ 10 July 2008- เป็นครั้งแรกและเป็นช่องทางที่ง่ายที่สุดที่จะทําให้นักพัฒนาสามารถขาย Application ให้กับคน 155 ประเทศทั่วโลก- ผู้ใช้ 400 ล้านคนที่ีมีบัตร Creditby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  53. 53. Submit AppStore5-March-2012- จํานวน App รวม (iPhone/iPad/iPodTouch) คือ 550,000+- จํานวน App บน iPad คือ 170,000 +- ยอด AppStore Download 25,000 ล้านครั้ง12-June-2012- ปัจจุบันจํานวน App รวม (iPhone/iPad/iPodTouch) คือ 650,000+- จํานวน App บน iPad คือ 225,000 +- ยอด AppStore Download 30,000 ล้านครั้งby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  54. 54. Submit AppStoreby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  55. 55. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  56. 56. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  57. 57. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  58. 58. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  59. 59. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  60. 60. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  61. 61. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  62. 62. In-App Purchases (Freemium Model)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  63. 63. In-App Purchases (TinyTower)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  64. 64. In-App PurchasesOrder and Chaos NBA Jamby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  65. 65. In-App Purchases (The SmurfsVillage)8-Year-Old Girl Racks Up $1400 Bill Buying Smurfberries in SmurfsVillageby Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  66. 66. In-App Purchases (Restrictions)by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13
  67. 67. by Eakapong Kattiya www.ibluecode.com eak.k@ibluecode.com +66 086-673-2111Saturday, June 15, 13

×