SlideShare a Scribd company logo
iPhone
         Objective-C, UIKit




                              bofeng@corp.netease.com
                                             @vonbo
Agenda

• overview
• objective-c
• iPhone UIKit
overview
First iPhone App


• Hello world!
Things we have



• Hello world!
• xcode SDK
•       & test with Simulator

• test with iPhone/iPod touch ($99)
•         appstore

•
iPhone VS Android
objective-c
Objective C
•
•
•   runtime
•   foudation framework: values and collection classes
•
•   category
•   protocol
Sample Code
   hello world
Beginning to iPhone development
objective c
•   @

    •   @interface, @implementation, @class

    •   @property, @synthesize

    •   @protocol

    •   NSString* str = @”hello world”

•                       [receiver message]

•           C                 C++
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Sample Code
  class and message
runtime
•   id
•   class & className
•   respondsToSelector
•   performSelector
•   isKindOfClass (super class included)
•   isMemberOfClass
•   @selector
@selector


• SEL
•       C++
Beginning to iPhone development
Beginning to iPhone development
action
CGRect rect = CGRectMake(20, 20, 100, 30);
UIButton* myButton = [UIButton
buttonWithType:UIButtonTypeRoundedRect];
myButton.frame = rect;
[myButton setTitle:@"my button"
forState:UIControlStateNormal];
[myButton addTarget:self action:@selector(btnClick:)
forControlEvents : UIControlEventTouchUpInside];
[self.view addSubview:myButton];
Sample
runtime & selector
Foundation Framework
• Value and Collection Classes
• User defaults
• Archiving
• Task, timers, thread
• File system, I/0
• etc ...
Value and Collection
           Classes
•   NSString & NSMutableString
•   NSArray & NSMutableArray
•   NSDictionary & NSMutableDictionary
•   NSSet & NSMutableSet
•   NSNumber [a obj-c object wrapper for basic C
    type]
    •   (NSNumber* num = [NSNumber
        numberWithInt:3])
Sample Code
  collection classes
•                   alloc   new

•   alloc&dealloc    C++ new&delete

•   but with ...
•           alloc   new         copy
                                   1.
                                          retain

     release
•                                0
    Obj-C                       dealloc
                      dealloc
                                        dealloc
Sample Code
  “           ”      ...
 memory management
Getter & Setter
  @property & @synthesize
•       new   alloc    copy
                                 1.

    release

•
                      retain release
but how to solve this ?
- (Person*) getChild {
    Person* child = [[Person alloc] init];
    [child setName:@”xxxx”];
    ....
    // will return ... [child release] or not ?
    return child;
}
Autorelease
• NSAutoreleasePool* pool ...
• [object autorelease]
•                     autorelease

  NSAutoreleasePool

  release
That’s why create pool
            first ...
int main(int argc, char* argv[]) {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    // put your own code here ...
    [pool release];
}
how to solve this ?
- (Person*) getChild {
    Person* child = [[Person alloc] init];
    [child setName:@”xxxx”];
    ....
    // will return ... [child release] or not ?
    return [child autorelease];
}
Autorelease Pool
•
    •                    NSMutableArray pool
    •   autorelease             Array
    •             pool            Array
        release

•                             autorelease pool
           autorelease
    pool                          pool
Autorelease Pool Stack
NSAutoreleasePool* poolFirst ..
for (int i=0; i < 10000; i++) {
    NSAutoreleasePool* poolSecond ...
    // have some autorelease object
    // [object autorelease]
    [poolSecond release];
}
// other code
[poolFirst release];
Autorelease Pool
•
    •   NSAutoreleasePool


    •                 alloc            release
    •               Autorelease pool      retain
        autorelease   [pool retain] or [pool autorelease]
    •   AutoreleasePool                                     “
                   ”
    •               pool             pool
                    iphone
          release        autorelease
•   new   alloc    copy
                  1.
                     release autorelease
•
                    1

     [NSString stringWithString:@”objc”]
•
                  retain release
Category
Sample Code
   category
NSString   Class
Cluster ...
Sample Code
something about class cluster ...
Category
•
•
•
Protocol
•   familiar with C++ virtual class
•   familiar with Java’s interface
•

•                          @optional
                     @required
              warning          required
protocol

@protocol TwoMethod
  - (void) oneMethod;
  - (void) anotherMethod;
@end
Class & Protocol
@interface MyClass : NSObject <TwoMethod> {
}
@end


@implementation MyClass
-(void) oneMethod {
    // oneMethod’s implementation
}
- (void) anotherMethod {
    // anotherMethod’s implementation
}
@end
Sample Code
   protocol
Objective C
•
•
•   runtime    id, @selector, respondsToSelector ...
•   foudation framework: values and collection classes
•
•   category                  class cluster “      ”
•   protocol
Using Objective-C Now !

• without mac
• ubuntu:
  • sudo apt-get install gnustep gnustep-devel
  • bash /usr/share/GNUstep/Makefiles/
    GNUstep.sh
  • GNUmakefile
• http://forum.ubuntu.org.cn/viewtopic.php?
  t=190168
iPhone UIKit
iPhone Application
•           &
• MVC
• Views (design & life cycle)
• Navigation based & Tab Bar based application
• very important TableView
•
• Web service
Beginning to iPhone development
UIApplication
•   Every application must have exactly one instance of
    UIApplication (or a subclass of UIApplication). When
    an application is launched, the UIApplicationMain
    function is called; among its other tasks, this
    function create a singleton UIApplication object.

•   The application object is typically assigned a
    delegate, an object that the application informs of
    significant runtime events—for example, application
    launch, low-memory warnings, and application
    termination—giving it an opportunity to respond
    appropriately.
Beginning to iPhone development
Beginning to iPhone development
UIApplicationMain

• delegateClassName
 • Specify nil if you load the delegate object
    from your application’s main nib file.
• from Info.plist get main nib file
• from main nib file get the application’s
  delegate
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
UIControl

• UILabel
• UIButton
• UITableView
• UINavigatorBar
• ...
- design time
Demo
button click
Without IB ?
create a button and bind event by code
Beginning to iPhone development
Beginning to iPhone development
Views
•   View                            view
    superview                   subviews
•       iphone app             window    Views
    window     window                   view (top level)

•   view
    •   - (void)addSubview:(UIView *)view;
    •   - (void)removeFromSuperview;
•   Superviews retain their subviews
•   UIView            CGRect                 CGPoint
      CGSize
View’s life cycle & hook
        function
•   initWithNibName:bundle
•   viewDidLoad
•   viewWillAppear
•   viewWillDisappear
•   ...maybe viewDidUnload
•   hook function
    •   shouldAutorotateToInterfaceOrientation
    •   didReceiveMemoryWarning
Navigation Controller
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
UINavigationController

•   manages the currently displayed screens using the
    navigation stack
•   at the bottom of this stack is the root view controller
•   at the top of the stack is the view controller currently
    being displayed
•   method:
    •   pushViewController:animated:
    •   popViewControllerAnimated:
Demo
UINavigationController
TabBar Controller
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
UITabBarController
• implements a specialized view controller that
  manages a radio-style selection interface
• When the user selects a specific tab, the tab
  bar controller displays the root view of the
  corresponding view controller, replacing any
  previous views
• init with an array (has many view controllers)
Demo
UITabBarController
Combine


•              UI

    • TabBarController Based +
      NavigationController
Beginning to iPhone development
Beginning to iPhone development
Demo
Combine UITabBarController &
   UINavigationController
TableView

• display a list of data
 • Single column, multiple rows
 • Vertical scrolling
• Powerful and ubiquitous in iPhone
  applications
Beginning to iPhone development
Beginning to iPhone development
Display data in Table View
•
    •    Table views display a list of data, so use an array
    •    [myTableView setList:myListOfStuff];
    •
        •   All data is loaded upfront
        •   All data stays in memory
•
    •    Another object provides data to the table view
        •   Not all at once
        •   Just as it’s needed for display
    •    Like a delegate, but purely data-oriented
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Beginning to iPhone development
Demo
UITableView <UITableViewDataSource>
Beginning to iPhone development
Beginning to iPhone development
Selection
Beginning to iPhone development
Demo
UITableView <UITableViewDelegate>
UITabBar + UINavigation + UITableView !

NavigationController

                                 TableViewController




                                 TabBarController
Demo
UITabBar + UINavigation + UITableView
• Propery Lists, NSUserDefaults
• SQLite
• Core Data
SandBox

• Why keep applications separate?
 • Security
 • Privacy
 • Cleanup after deleting an app
Sample: /Users/xxx/library/Application Support/iPhone Simulator/4.0/Applications
Beginning to iPhone development
Beginning to iPhone development
Property Lists
•       Convenient way to store a small amount of data
    •    Arrays, dictionaries, strings, numbers, dates, raw data
    •    Human-readable XML or binary format
•   NSUserDefaults class uses property lists under the hood
•   When Not to Use Property Lists

    •    More than a few hundred KB of data

    •    Custom object types

    •    Multiple writers (e.g. not ACID)
Beginning to iPhone development
Beginning to iPhone development
Demo
Save data with NSUserDefaults
SQLite
•   Complete SQL database in an ordinary file
•   Simple, compact, fast, reliable
•   No server
•   Great for embedded devices
    •   Included on the iPhone platform
•   When Not to Use SQLite
    •   Multi-gigabyte databases
    •   High concurrency (multiple writers)
    •   Client-server applications
Beginning to iPhone development
SQLite Obj-C Wrapper

•   http://code.google.com/p/flycode/source/browse/
    trunk/fmdb

•   A query maybe like this:

    •   [dbconn executeQuery:@"select * from call"]
Beginning to iPhone development
Using Web Service
•   Two Common ways:
•   XML
    •   libxml2
        •   Tree-based: easy to parse, entire tree in memory
        •   Event-driven: less memory, more complex to manage state
    •   NSXMLParser
        •   Event-driven API: simpler but less powerful than libxml2
•   JSON
    •   Open source json-framework wrapper for Objective-C
    •   http://code.google.com/p/json-framework/
NSURLConnection
•   NSMutableURLRequest
•   - connectionWithRequest: delegate
•   delegate method:
    •   – connection:didReceiveResponse:
    •   – connection:didReceiveData:
    •   – connection:didFailWithError:
    •   – connectionDidFinishLoading:
Demo
use json-framework and NSURLConnection with hi-api
iPhone Application

•              &
•   MVC
•   Views (design & life cycle)
•   Navigation based & Tab Bar based application
    & TableView
•                        (sandbox, property list,
    sqlite)
•   Web service
•       Objective-C
•       The iPhone Developer’s Cookbook
•       Programming in Objective-C 2.0
•
•           Stanford iPhone dev course
    •       iTunes iTune Store    cs193p
                       mac windows
Q &A
The End

More Related Content

What's hot (19)

Django at Scale
Django at ScaleDjango at Scale
Django at Scale
bretthoerner
 
iPhone Memory Management
iPhone Memory ManagementiPhone Memory Management
iPhone Memory Management
Vadim Zimin
 
User defined-functions-cassandra-summit-eu-2014
User defined-functions-cassandra-summit-eu-2014User defined-functions-cassandra-summit-eu-2014
User defined-functions-cassandra-summit-eu-2014
Robert Stupp
 
iOS 7 SDK特訓班
iOS 7 SDK特訓班iOS 7 SDK特訓班
iOS 7 SDK特訓班
彼得潘 Pan
 
Memory Management on iOS
Memory Management on iOSMemory Management on iOS
Memory Management on iOS
Make School
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
Satoshi Asano
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective C
Neha Gupta
 
Objective C Memory Management
Objective C Memory ManagementObjective C Memory Management
Objective C Memory Management
Ahmed Magdy Ezzeldin, MSc.
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
RTigger
 
XQuery Design Patterns
XQuery Design PatternsXQuery Design Patterns
XQuery Design Patterns
William Candillon
 
Moving from JFreeChart to JavaFX with JavaFX Chart Extensions
Moving from JFreeChart to JavaFX with JavaFX Chart ExtensionsMoving from JFreeChart to JavaFX with JavaFX Chart Extensions
Moving from JFreeChart to JavaFX with JavaFX Chart Extensions
Bruce Schubert
 
jQuery Objects
jQuery ObjectsjQuery Objects
jQuery Objects
Steve Wells
 
Getting started with jQuery
Getting started with jQueryGetting started with jQuery
Getting started with jQuery
Gill Cleeren
 
Cassandra and materialized views
Cassandra and materialized viewsCassandra and materialized views
Cassandra and materialized views
Grzegorz Duda
 
Multithreading on iOS
Multithreading on iOSMultithreading on iOS
Multithreading on iOS
Make School
 
iOS Memory Management
iOS Memory ManagementiOS Memory Management
iOS Memory Management
Asim Rais Siddiqui
 
Ios - Introduction to memory management
Ios - Introduction to memory managementIos - Introduction to memory management
Ios - Introduction to memory management
Vibrant Technologies & Computers
 
Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012
Anton Arhipov
 
iOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful BackendiOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful Backend
Stefano Zanetti
 
iPhone Memory Management
iPhone Memory ManagementiPhone Memory Management
iPhone Memory Management
Vadim Zimin
 
User defined-functions-cassandra-summit-eu-2014
User defined-functions-cassandra-summit-eu-2014User defined-functions-cassandra-summit-eu-2014
User defined-functions-cassandra-summit-eu-2014
Robert Stupp
 
Memory Management on iOS
Memory Management on iOSMemory Management on iOS
Memory Management on iOS
Make School
 
ARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマーARCでめちゃモテiOSプログラマー
ARCでめちゃモテiOSプログラマー
Satoshi Asano
 
Memory management in Objective C
Memory management in Objective CMemory management in Objective C
Memory management in Objective C
Neha Gupta
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
RTigger
 
Moving from JFreeChart to JavaFX with JavaFX Chart Extensions
Moving from JFreeChart to JavaFX with JavaFX Chart ExtensionsMoving from JFreeChart to JavaFX with JavaFX Chart Extensions
Moving from JFreeChart to JavaFX with JavaFX Chart Extensions
Bruce Schubert
 
Getting started with jQuery
Getting started with jQueryGetting started with jQuery
Getting started with jQuery
Gill Cleeren
 
Cassandra and materialized views
Cassandra and materialized viewsCassandra and materialized views
Cassandra and materialized views
Grzegorz Duda
 
Multithreading on iOS
Multithreading on iOSMultithreading on iOS
Multithreading on iOS
Make School
 
Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012Mastering Java Bytecode With ASM - 33rd degree, 2012
Mastering Java Bytecode With ASM - 33rd degree, 2012
Anton Arhipov
 
iOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful BackendiOS App with Parse.com as RESTful Backend
iOS App with Parse.com as RESTful Backend
Stefano Zanetti
 

Viewers also liked (15)

self and super in objc
self and super in objcself and super in objc
self and super in objc
Vonbo
 
よくわかるオンドゥル語
よくわかるオンドゥル語よくわかるオンドゥル語
よくわかるオンドゥル語
S Akai
 
Defnydd trydan Ysgol y Frenni
Defnydd trydan Ysgol y FrenniDefnydd trydan Ysgol y Frenni
Defnydd trydan Ysgol y Frenni
Mrs Serena Davies
 
Method Shelters : Another Way to Resolve Class Extension Conflicts
Method Shelters : Another Way to Resolve Class Extension Conflicts Method Shelters : Another Way to Resolve Class Extension Conflicts
Method Shelters : Another Way to Resolve Class Extension Conflicts
S Akai
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
Taro Matsuzawa
 
Romafs
RomafsRomafs
Romafs
S Akai
 
Tales@tdc
Tales@tdcTales@tdc
Tales@tdc
Tales Andrade
 
RubyistのためのObjective-C入門
RubyistのためのObjective-C入門RubyistのためのObjective-C入門
RubyistのためのObjective-C入門
S Akai
 
Qcon beijing 2010
Qcon beijing 2010Qcon beijing 2010
Qcon beijing 2010
Vonbo
 
Objective-C Survives
Objective-C SurvivesObjective-C Survives
Objective-C Survives
S Akai
 
Présentation gnireenigne
Présentation   gnireenignePrésentation   gnireenigne
Présentation gnireenigne
CocoaHeads.fr
 
Http Live Streaming Intro
Http Live Streaming IntroHttp Live Streaming Intro
Http Live Streaming Intro
Vonbo
 
Http live streaming technical presentation
Http live streaming technical presentationHttp live streaming technical presentation
Http live streaming technical presentation
Buddhi
 
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Chris Adamson
 
HTTP Live Streaming
HTTP Live StreamingHTTP Live Streaming
HTTP Live Streaming
Auro Tripathy
 
self and super in objc
self and super in objcself and super in objc
self and super in objc
Vonbo
 
よくわかるオンドゥル語
よくわかるオンドゥル語よくわかるオンドゥル語
よくわかるオンドゥル語
S Akai
 
Defnydd trydan Ysgol y Frenni
Defnydd trydan Ysgol y FrenniDefnydd trydan Ysgol y Frenni
Defnydd trydan Ysgol y Frenni
Mrs Serena Davies
 
Method Shelters : Another Way to Resolve Class Extension Conflicts
Method Shelters : Another Way to Resolve Class Extension Conflicts Method Shelters : Another Way to Resolve Class Extension Conflicts
Method Shelters : Another Way to Resolve Class Extension Conflicts
S Akai
 
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみたスマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
スマートフォン勉強会@関東 #11 どう考えてもdisconなものをiPhoneに移植してみた
Taro Matsuzawa
 
Romafs
RomafsRomafs
Romafs
S Akai
 
RubyistのためのObjective-C入門
RubyistのためのObjective-C入門RubyistのためのObjective-C入門
RubyistのためのObjective-C入門
S Akai
 
Qcon beijing 2010
Qcon beijing 2010Qcon beijing 2010
Qcon beijing 2010
Vonbo
 
Objective-C Survives
Objective-C SurvivesObjective-C Survives
Objective-C Survives
S Akai
 
Présentation gnireenigne
Présentation   gnireenignePrésentation   gnireenigne
Présentation gnireenigne
CocoaHeads.fr
 
Http Live Streaming Intro
Http Live Streaming IntroHttp Live Streaming Intro
Http Live Streaming Intro
Vonbo
 
Http live streaming technical presentation
Http live streaming technical presentationHttp live streaming technical presentation
Http live streaming technical presentation
Buddhi
 
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Chris Adamson
 

Similar to Beginning to iPhone development (20)

MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOS
Petr Dvorak
 
iOS Development: What's New
iOS Development: What's NewiOS Development: What's New
iOS Development: What's New
NascentDigital
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
Chris Adamson
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
Unity Technologies Japan K.K.
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIs
Subhransu Behera
 
Constructors and Destructor_detilaed contents.pptx
Constructors and Destructor_detilaed contents.pptxConstructors and Destructor_detilaed contents.pptx
Constructors and Destructor_detilaed contents.pptx
vijayaazeem
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
stable|kernel
 
MFF UK - Advanced iOS Topics
MFF UK - Advanced iOS TopicsMFF UK - Advanced iOS Topics
MFF UK - Advanced iOS Topics
Petr Dvorak
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming Introduction
Lou Loizides
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
Andreas Korth
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming Intro
Lou Loizides
 
Working with Cocoa and Objective-C
Working with Cocoa and Objective-CWorking with Cocoa and Objective-C
Working with Cocoa and Objective-C
Kazunobu Tasaka
 
Android webinar class_4
Android webinar class_4Android webinar class_4
Android webinar class_4
Edureka!
 
introduction to c #
introduction to c #introduction to c #
introduction to c #
Sireesh K
 
Aplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e JetpackAplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e Jetpack
Nelson Glauber Leal
 
Rubymotion talk
Rubymotion talkRubymotion talk
Rubymotion talk
pinfieldharm
 
React nativebeginner1
React nativebeginner1React nativebeginner1
React nativebeginner1
Oswald Campesato
 
Getting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App TestingGetting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App Testing
Bitbar
 
Pentesting iOS Apps - Runtime Analysis and Manipulation
Pentesting iOS Apps - Runtime Analysis and ManipulationPentesting iOS Apps - Runtime Analysis and Manipulation
Pentesting iOS Apps - Runtime Analysis and Manipulation
Andreas Kurtz
 
MFF UK - Introduction to iOS
MFF UK - Introduction to iOSMFF UK - Introduction to iOS
MFF UK - Introduction to iOS
Petr Dvorak
 
iOS Development: What's New
iOS Development: What's NewiOS Development: What's New
iOS Development: What's New
NascentDigital
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
Chris Adamson
 
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
【Unite 2017 Tokyo】ScriptableObjectを使ってプログラマーもアーティストも幸せになろう
Unity Technologies Japan K.K.
 
iOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIsiOS 101 - Xcode, Objective-C, iOS APIs
iOS 101 - Xcode, Objective-C, iOS APIs
Subhransu Behera
 
Constructors and Destructor_detilaed contents.pptx
Constructors and Destructor_detilaed contents.pptxConstructors and Destructor_detilaed contents.pptx
Constructors and Destructor_detilaed contents.pptx
vijayaazeem
 
Connect.Tech- Swift Memory Management
Connect.Tech- Swift Memory ManagementConnect.Tech- Swift Memory Management
Connect.Tech- Swift Memory Management
stable|kernel
 
MFF UK - Advanced iOS Topics
MFF UK - Advanced iOS TopicsMFF UK - Advanced iOS Topics
MFF UK - Advanced iOS Topics
Petr Dvorak
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
CodeFest
 
Louis Loizides iOS Programming Introduction
Louis Loizides iOS Programming IntroductionLouis Loizides iOS Programming Introduction
Louis Loizides iOS Programming Introduction
Lou Loizides
 
Cappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application FrameworkCappuccino - A Javascript Application Framework
Cappuccino - A Javascript Application Framework
Andreas Korth
 
iOS Programming Intro
iOS Programming IntroiOS Programming Intro
iOS Programming Intro
Lou Loizides
 
Working with Cocoa and Objective-C
Working with Cocoa and Objective-CWorking with Cocoa and Objective-C
Working with Cocoa and Objective-C
Kazunobu Tasaka
 
Android webinar class_4
Android webinar class_4Android webinar class_4
Android webinar class_4
Edureka!
 
introduction to c #
introduction to c #introduction to c #
introduction to c #
Sireesh K
 
Aplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e JetpackAplicações Assíncronas no Android com Coroutines e Jetpack
Aplicações Assíncronas no Android com Coroutines e Jetpack
Nelson Glauber Leal
 
Getting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App TestingGetting Started with XCTest and XCUITest for iOS App Testing
Getting Started with XCTest and XCUITest for iOS App Testing
Bitbar
 
Pentesting iOS Apps - Runtime Analysis and Manipulation
Pentesting iOS Apps - Runtime Analysis and ManipulationPentesting iOS Apps - Runtime Analysis and Manipulation
Pentesting iOS Apps - Runtime Analysis and Manipulation
Andreas Kurtz
 

Recently uploaded (20)

Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveDesigning Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep Dive
ScyllaDB
 
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Enhancing ICU Intelligence: How Our Functional Testing Enabled a Healthcare I...
Impelsys Inc.
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
Transcript: #StandardsGoals for 2025: Standards & certification roundup - Tec...
BookNet Canada
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
TrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business ConsultingTrsLabs - Fintech Product & Business Consulting
TrsLabs - Fintech Product & Business Consulting
Trs Labs
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxDevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptx
Justin Reock
 
Drupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy ConsumptionDrupalcamp Finland – Measuring Front-end Energy Consumption
Drupalcamp Finland – Measuring Front-end Energy Consumption
Exove
 
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes Partner Innovation Updates for May 2025
ThousandEyes
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfThe Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdf
Abi john
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Cyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of securityCyber Awareness overview for 2025 month of security
Cyber Awareness overview for 2025 month of security
riccardosl1
 
Procurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptxProcurement Insights Cost To Value Guide.pptx
Procurement Insights Cost To Value Guide.pptx
Jon Hansen
 
Generative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in BusinessGenerative Artificial Intelligence (GenAI) in Business
Generative Artificial Intelligence (GenAI) in Business
Dr. Tathagat Varma
 

Beginning to iPhone development

  • 1. iPhone Objective-C, UIKit [email protected] @vonbo
  • 4. First iPhone App • Hello world!
  • 5. Things we have • Hello world!
  • 6. • xcode SDK • & test with Simulator • test with iPhone/iPod touch ($99) • appstore •
  • 9. Objective C • • • runtime • foudation framework: values and collection classes • • category • protocol
  • 10. Sample Code hello world
  • 12. objective c • @ • @interface, @implementation, @class • @property, @synthesize • @protocol • NSString* str = @”hello world” • [receiver message] • C C++
  • 17. Sample Code class and message
  • 18. runtime • id • class & className • respondsToSelector • performSelector • isKindOfClass (super class included) • isMemberOfClass • @selector
  • 22. action CGRect rect = CGRectMake(20, 20, 100, 30); UIButton* myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; myButton.frame = rect; [myButton setTitle:@"my button" forState:UIControlStateNormal]; [myButton addTarget:self action:@selector(btnClick:) forControlEvents : UIControlEventTouchUpInside]; [self.view addSubview:myButton];
  • 24. Foundation Framework • Value and Collection Classes • User defaults • Archiving • Task, timers, thread • File system, I/0 • etc ...
  • 25. Value and Collection Classes • NSString & NSMutableString • NSArray & NSMutableArray • NSDictionary & NSMutableDictionary • NSSet & NSMutableSet • NSNumber [a obj-c object wrapper for basic C type] • (NSNumber* num = [NSNumber numberWithInt:3])
  • 26. Sample Code collection classes
  • 27. alloc new • alloc&dealloc C++ new&delete • but with ...
  • 28. alloc new copy 1. retain release • 0 Obj-C dealloc dealloc dealloc
  • 29. Sample Code “ ” ... memory management
  • 30. Getter & Setter @property & @synthesize
  • 31. new alloc copy 1. release • retain release
  • 32. but how to solve this ? - (Person*) getChild { Person* child = [[Person alloc] init]; [child setName:@”xxxx”]; .... // will return ... [child release] or not ? return child; }
  • 33. Autorelease • NSAutoreleasePool* pool ... • [object autorelease] • autorelease NSAutoreleasePool release
  • 34. That’s why create pool first ... int main(int argc, char* argv[]) { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; // put your own code here ... [pool release]; }
  • 35. how to solve this ? - (Person*) getChild { Person* child = [[Person alloc] init]; [child setName:@”xxxx”]; .... // will return ... [child release] or not ? return [child autorelease]; }
  • 36. Autorelease Pool • • NSMutableArray pool • autorelease Array • pool Array release • autorelease pool autorelease pool pool
  • 37. Autorelease Pool Stack NSAutoreleasePool* poolFirst .. for (int i=0; i < 10000; i++) { NSAutoreleasePool* poolSecond ... // have some autorelease object // [object autorelease] [poolSecond release]; } // other code [poolFirst release];
  • 38. Autorelease Pool • • NSAutoreleasePool • alloc release • Autorelease pool retain autorelease [pool retain] or [pool autorelease] • AutoreleasePool “ ” • pool pool iphone release autorelease
  • 39. new alloc copy 1. release autorelease • 1 [NSString stringWithString:@”objc”] • retain release
  • 41. Sample Code category
  • 42. NSString Class Cluster ...
  • 43. Sample Code something about class cluster ...
  • 45. Protocol • familiar with C++ virtual class • familiar with Java’s interface • • @optional @required warning required
  • 46. protocol @protocol TwoMethod - (void) oneMethod; - (void) anotherMethod; @end
  • 47. Class & Protocol @interface MyClass : NSObject <TwoMethod> { } @end @implementation MyClass -(void) oneMethod { // oneMethod’s implementation } - (void) anotherMethod { // anotherMethod’s implementation } @end
  • 48. Sample Code protocol
  • 49. Objective C • • • runtime id, @selector, respondsToSelector ... • foudation framework: values and collection classes • • category class cluster “ ” • protocol
  • 50. Using Objective-C Now ! • without mac • ubuntu: • sudo apt-get install gnustep gnustep-devel • bash /usr/share/GNUstep/Makefiles/ GNUstep.sh • GNUmakefile • http://forum.ubuntu.org.cn/viewtopic.php? t=190168
  • 52. iPhone Application • & • MVC • Views (design & life cycle) • Navigation based & Tab Bar based application • very important TableView • • Web service
  • 54. UIApplication • Every application must have exactly one instance of UIApplication (or a subclass of UIApplication). When an application is launched, the UIApplicationMain function is called; among its other tasks, this function create a singleton UIApplication object. • The application object is typically assigned a delegate, an object that the application informs of significant runtime events—for example, application launch, low-memory warnings, and application termination—giving it an opportunity to respond appropriately.
  • 57. UIApplicationMain • delegateClassName • Specify nil if you load the delegate object from your application’s main nib file. • from Info.plist get main nib file • from main nib file get the application’s delegate
  • 61. UIControl • UILabel • UIButton • UITableView • UINavigatorBar • ...
  • 64. Without IB ? create a button and bind event by code
  • 67. Views • View view superview subviews • iphone app window Views window window view (top level) • view • - (void)addSubview:(UIView *)view; • - (void)removeFromSuperview; • Superviews retain their subviews • UIView CGRect CGPoint CGSize
  • 68. View’s life cycle & hook function • initWithNibName:bundle • viewDidLoad • viewWillAppear • viewWillDisappear • ...maybe viewDidUnload • hook function • shouldAutorotateToInterfaceOrientation • didReceiveMemoryWarning
  • 77. UINavigationController • manages the currently displayed screens using the navigation stack • at the bottom of this stack is the root view controller • at the top of the stack is the view controller currently being displayed • method: • pushViewController:animated: • popViewControllerAnimated:
  • 85. UITabBarController • implements a specialized view controller that manages a radio-style selection interface • When the user selects a specific tab, the tab bar controller displays the root view of the corresponding view controller, replacing any previous views • init with an array (has many view controllers)
  • 87. Combine • UI • TabBarController Based + NavigationController
  • 90. Demo Combine UITabBarController & UINavigationController
  • 91. TableView • display a list of data • Single column, multiple rows • Vertical scrolling • Powerful and ubiquitous in iPhone applications
  • 94. Display data in Table View • • Table views display a list of data, so use an array • [myTableView setList:myListOfStuff]; • • All data is loaded upfront • All data stays in memory • • Another object provides data to the table view • Not all at once • Just as it’s needed for display • Like a delegate, but purely data-oriented
  • 109. UITabBar + UINavigation + UITableView ! NavigationController TableViewController TabBarController
  • 111. • Propery Lists, NSUserDefaults • SQLite • Core Data
  • 112. SandBox • Why keep applications separate? • Security • Privacy • Cleanup after deleting an app
  • 116. Property Lists • Convenient way to store a small amount of data • Arrays, dictionaries, strings, numbers, dates, raw data • Human-readable XML or binary format • NSUserDefaults class uses property lists under the hood • When Not to Use Property Lists • More than a few hundred KB of data • Custom object types • Multiple writers (e.g. not ACID)
  • 119. Demo Save data with NSUserDefaults
  • 120. SQLite • Complete SQL database in an ordinary file • Simple, compact, fast, reliable • No server • Great for embedded devices • Included on the iPhone platform • When Not to Use SQLite • Multi-gigabyte databases • High concurrency (multiple writers) • Client-server applications
  • 122. SQLite Obj-C Wrapper • http://code.google.com/p/flycode/source/browse/ trunk/fmdb • A query maybe like this: • [dbconn executeQuery:@"select * from call"]
  • 124. Using Web Service • Two Common ways: • XML • libxml2 • Tree-based: easy to parse, entire tree in memory • Event-driven: less memory, more complex to manage state • NSXMLParser • Event-driven API: simpler but less powerful than libxml2 • JSON • Open source json-framework wrapper for Objective-C • http://code.google.com/p/json-framework/
  • 125. NSURLConnection • NSMutableURLRequest • - connectionWithRequest: delegate • delegate method: • – connection:didReceiveResponse: • – connection:didReceiveData: • – connection:didFailWithError: • – connectionDidFinishLoading:
  • 126. Demo use json-framework and NSURLConnection with hi-api
  • 127. iPhone Application • & • MVC • Views (design & life cycle) • Navigation based & Tab Bar based application & TableView • (sandbox, property list, sqlite) • Web service
  • 128. Objective-C • The iPhone Developer’s Cookbook • Programming in Objective-C 2.0 • • Stanford iPhone dev course • iTunes iTune Store cs193p mac windows