SlideShare una empresa de Scribd logo
1 de 31
No. 01/2011 December 2011 www.icodermag.com



Beginning with basics of iOS
Treading New Waters
Storyboard and ARC
Top Errors and
Risks in iOS




The All New iOS 5
Siri – Worth the Hype?

Getting Your First App to Market
Gets You Paid – It Doesn’t Have To Be Good
december 2011
                                                                                               www.icodermag.com




                             Greetings iCoders!

                             Especially for You we started iCoder magazine. First issue is
                             about iOS fundamentals and iOS 5 new features, but don’t think
                             iCoder is only for beginners, everyone interested in Apple mobile
                             operating system programming will find something interesting.

                             Our magazine is made by programmers for programmers, so You
                             will find here a lot of interesting and useful stuff like full articles
                             about iOS programming, tutorials, reviews, app and accessories
                             tests, information about new frameworks and plug-ins for xcode.

                             We’re open for Your feedback and cooperation, so don’t hesitate
                             and write to us if You have any suggestions about iCoder
                             magazine or want to submit an article or any other useful
                             feedback. It’s You who can make iCoder the best magazine about
                             iOS programming in the world.

                             Have a good reading and come back for more.


                                                                          Maciej Michałowski
                                                                               Editor in Chief
                                                           maciej.michalowski@software.com.pl




    icoder magazine                                          Production director:
    Published by:                                            Ałła Zalewska
    FX Press Sp. z o.o. Sp.K.
                                                             Postal Address:
    President:                                               FX Press Sp. z o.o. Sp.K.,
    Ałła Zalewska                                            ul. Bokserska 1, 02-682 Warszawa, Poland
    alla.zalewska@software.com.pl                            tel. +48 600 649 676
                                                             www.icodermag.com
    editor in chief:
    Maciej Michałowski                                       Advertising:
    maciej.michalowski@software.com.pl                       alla.zalewska@software.com.pl

    editors:                                                 All trade marks presented in the magazine were used
    Ewa Zasadzka                                             only for informative purposes. All rights to trade marks
    Michał Pietruszkiewicz                                   presented in the magazine are reserved by the companies
    Rafał Przybylski                                         which own them.
                                                               The FX Press Sp. z o.o. Sp.K. works individually from
    design and dTP:                                          Apple. The iCoder Magazine team reserves the right
    Aneta Jones                                              not to be responsible for the topicality, correctness,
    Eurodesign                                               completeness or quality of the information provided
    www.euro-design.info                                     by contributors.




2                                                                                            www.icodermag.com      01/2011
conTenTs




      TuTORIAl
      beginning with basics of ios                 5
      Softweb Solutions Inc.

      Getting Your First App to market
      Gets You Paid – It doesn’t Have To be Good   8
      Ian Marriot


      IOS API
      Treading new Waters, storyboard and Arc      13
      Li Mengran


      WHAT’S NEW IN IOS
      The All new ios 5                            22
      Manish Nath


      SECuRITY
      Top errors and risks in ios
      – should be addressed by the developers      27
      Krzysztof Wołk


      REvIEW
      siri – Worth the Hype                        31
      Alex Allegro




3                                                       www.icodermag.com   01/2011
TuTorIAl




    beginning with
    basics of ios
    Softweb Solutions Inc.

    The author, Softweb Solutions is an ISO 9001:2008 Certified and Microsoft Gold Certified, Chicago-
    based IT service Provider Company that offers industry specified solutions through its knowledge
    and expertise. Combining unparalleled experience with the state of the art technical competencies,
    Softweb Solutions provides outstanding solutions to its global clients. The company offers end to end
    solutions for Custom Web Application Development, Mobile Application Development, eCommerce
    Development, Mobile SEO, Rich Internet Application development, Legacy Migration, et al.
    AbouT Ios
    The iOS – previously known as iPhone OS is an Operating
    System of Apple Inc. for all its mobile devices.
       The iOS is the heart of iPhone, iPad, and iPod Touch de-
    vices. For designing and developing iOS applications, devel-
    opers use Xcode and IDE [Apple’s integrated development
    environment]. Xcode is used to design the user interface of
    the application as it provides all necessary tools for writing the
    code for it. After developing the application for iOS, user can
    run it on iPhone, iPad, Mac, and iPod Touch devices.
       After the completion of designing and developing the iOS
    application, it is needed to be submitted to the App Store
    – the secure market place where iOS users get their applica-
    tions.                                                               Courtesy: developer.apple.com
       The Operating system - iOS manages the device hardware            layers of ios:
    and provides the technologies that are required to implement
    native apps. The iOS SDK have all the tools and interfaces
    that are needed to develop, install, run, and test the native ap-
    plications. The native apps are physically installed on an Apple
    device and therefore they are always available to the Apple
    users, even in the Airplane mode.

    THe Ios ArcHITecTure
    The iOS architecture is similar to the basic architecture
    found in Mac OS X. At the highest level, iOS acts as an
    intermediary between the underlying hardware and the
    applications that appear on the screen, as shown in the              VersIons HIsTorY oF Ios
    below figure. The applications we create rarely talk to the          Being an early adopter of Mobile Technologies, it is easier
    underlying hardware directly. Instead, applications com-             for Softweb Solutions to explain the whole history of iOS
    municate with the hardware through a set of well-defined             versions. Let us have a look at the gradual development of
    system interfaces that protect the application from hard-            iOS.
    ware changes. This abstraction makes it easy to write ap-                On 29th June, 2007, Apple Inc. released the first version
    plications that work consistently on devices with different          of iOS with the first iPhone.
    hardware capabilities.                                                 On 11th July, 2008, Apple publicly released iPhone OS



5                                                                                                    www.icodermag.com       01/2011
beGInnInG WITH bAsIcs oF Ios
    TuTorIAl


    2.0, with later upgrades of version 2.2 available for all mo-              buIldInG Ios APPlIcATIon
    dels. The major release of 2.0 became available with the                   Before developing a new iOS application, it is important to fa-
    release of iPhone 3G.                                                      miliarize yourself with the basic concepts, fundamental design
       On 17th June, 2009, iOS version 3.0 was released with                   patterns and techniques. Basically, iOS assumes that all the
    upgraded through version 3.1.3. 3.0 version became ava-                    applications are built using the Model-View-Controller design
    ilable with the iPhone 3GS. First generation Apple devices                 pattern. Here we, Softweb Solutions explains the steps to
    – iPhone and iPod Touch has iOS version 3.1.3.                             build the simplest application “Hello World”.
       Later iPad was released with iOS 3.2 version which was
    specifically designed for the iPad.                                        steps for building “Hello World” application –
       Later on 21st June, 2010, iOS 4.0 was released available                1] Open Xcode and click File > New Project. Select View-based-
    only to iPhone 4.0 and iPod Touch. While the second ge-                    application and click “Choose” button. After choosing, name the
    neration iPod Touch and iPhone 3G devices have iOS 4.2.1                   project as “Hello World” and save it. After saving the project, you
    as their latest version. The first version to get major equ-               will have a template for your Hello World iPhone Project.
    ivalent features to the iPhone and iPad is iOS 4.2. Later the
    sequence of iOS 4.2 was continued for the CDMA iPhone                      2] Click on “Build and Go” button to run this template appli-
    and 4.3 was released for other devices as an upgrade.                      cation which will start an iPhone stimulator. After that clicking
        On 6th June, 2011, Apple previewed iOS version 5, Ap-                  on the “Home” button will show you a “Hello World” icon
    ple TV 4.4 beta, and iOS SDK 5 beta along with iCloud                      on the iPhone stimulator dashboard. Clicking it again will open
    beta. This update also introduced iMessage chat feature wi-                the application. That is why, iPhone stimulator is considered
    thin the devices running on iOS 5.0. With iMessage feature,                as the best tool to test the application before deployment or
    users can send messages to other iPhones, iPad, and iPod                   before submitting the application to the Apple Store.
    Touch users, so that they don’t have to pay extra for text
    messages.
       Other additions made in iOS 5 are – new notification
    system, Newsstand subscription, integrated Twitter, re-
    minders application, enhancements to AirPlay, and over
    200 other new features. Moreover, it supports all iPad mo-
    dels, iPhone 3GS, iPhone 4 GSM, iPhone 4 CDMA, iPod
    Touch – 3rd and 4th generation.
       This version release has taken iOS to the whole new                     3] Now you need to open the Xcode Project and select
    level. The camera application of this version offers many                  “HelloWorldViewController.h” file and type the below
    new in-built useful features like in-built editing feature, lock           code inside the interface –
    screen access to camera, volume up button use for clicking
    a photo, and others.                                                       IBOutlet UITextField *txtUserName;
                                                                               IBOutlet UILabel *lblUserTypedName;
    APPle – ITunes                                                             Also write this method before end of this class
    iTunes is how users play all their media on their Mac or PC and            - (IBAction) submitYourName;
    add it to their Apple devices. iTunes is a computer program used
    for media playing, downloading, and organizing any digital music or        4] After you write the above code, your
    video files on the PC. It is also capable to manage contents on iPod,      “HelloWorldViewController.h” file will look like below –
    iPhone, iPad, and iPod Touch.
       It’s very simple to use and understand. Search any required me-         #import <UIKit/UIKit.h>
    dia file on iTunes that you are looking for, and sync it with your         @interface HelloWorldViewController:
    Apple device to get it. Basically, iTunes has become the central hub       UIViewController {
    of media world for all the Apple users.                                    IBOutlet UITextField *txtUserName;
       Originally, iTunes was specifically released as a music store but la-   IBOutlet UILabel *lblUserTypedName;
    ter in the subsequent versions of it, all other type of entertainment      }
    were also supported that includes radio, films, apps, television           - (IBAction) submitYourName;
    shows, and audio books. The purchase history can be also seen by           @end
    clicking the “purchase history” button after opening iTunes.



6                                                                                                             www.icodermag.com         01/2011
beGInnInG WITH bAsIcs oF Ios
    TuTorIAl


    5] The next step is to open “HelloWorldViewController.m”         Final output of this “Hello World” Application
    file and type the following method before @end –

    (IBAction) submitYourName;
    {
    lblUserTypedName.text = txtUserName.text;
    }

    6] Design on Interface builder – Open Xcode project and
    in it “Group and Files”. Looking at bottom you will find
    “NIB Files” in which you will find two design files for your
    classes when you expand it. One is MainWindow.xib –
    main window or entry point to the app and second one
    is HelloWorldViewController.xib file which is mapped to
    your controller class. Double click on the second class to
    open it inside the interface builder.

    7] Click on Tools > Library and drag the text field into your
    View. After this, click on Tools > Inspector and write “Your
    Name” in the text field.
                                                                     dIFFerence beTWeen THe code For An
    8] After typing your name, drag the text field from Library      IPHone APPlIcATIon And IPAd APPlIcATIon
    to your view and also drag another Label inside View. Click
    on tools then and select “Size Inspector” and also change        For iPad
    the width of the text field to 250. Also change the layout       if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceI-
    center.                                                          diomPad)
                                                                     {
    9] Last thing to do is to drag a button to the view (19) and     WhatIsViewController *VC1 = [[WhatIsViewController alloc]
    then open Inspector again by selecting Tools > Inspector.        initWithNibName:@”What_ipad” bundle:nil];
    In the Title, type “Submit”.                                     [self.navigationController pushViewController:VC1
                                                                     animated:YES];
    10] Map the controller class variable function and methods       [VC1 release];
    with interface builder. From Interface builder, select “File’s   }
    Owner” and from Tools, select “Connection Inspector”.
                                                                     For iPhone
    11] After selecting them, you will see that two new vari-        {
    ables are added in Connection Inspector – txtUserName            WhatIsViewController *VC1 = [[WhatIsViewController alloc]
    and lblUserTypedName. You need to click on txtUser-              initWithNibName:@” What_iphone” bundle:nil];
    Name radio button and drag it to text field in View. Next        [self.navigationController pushViewController:VC1
    you need to do same with lblUserTypedName, that is, se-          animated:YES];
    lect radio button and drag it below label.                       [VC1 release];
                                                                     }
    12] Last thing you need to do is click on the “submitYour-
    Name” radio button and drag it to the button and then
    select touch down from the list.                                  Although we may not be sure what will be next in iOS,
                                                                      be with us to keep in touch with the industry develop-
    13] Finally close the interface and open Xcode. Then sim-         ments. The authors of this article have taken utmost care
    ply press “Build and Go” button to run this “Hello World”         in disseminating the information here but assume no re-
    Application. It will open the stimulator in iPhone.               sponsibility for any kind of errors.




7                                                                                              www.icodermag.com      01/2011
TuTorIAl




    Getting Your First App
    to market Gets You Paid
    – It doesn’t Have to be Good
    Ian Marriott

    Two years ago, I knew as much about making an app as           loves a superhero. And everybody seems to love phys-
    I currently do about the political situation in Sweden,        ics based action puzzle games at the moment. I must
    that is to say, very very little. It’s not that I wasn’t in-   be on to a winner. Not only that, but what I’ve got so
    terested, I had always been an avid gamer, and dreamed         far is cool to play. And what’s more, your abilities came
    up ways in which the current crop of games could be            with choices. Protect or Destroy? Hero or Villain? What
    better, and how I’d do it right if I ever made a game by       could possibly go wrong?
    myself. Then, I was reading a magazine, and came across
    an article about a game engine that was free, yet power-       Turns out I wasn’t as clever as I thought I was (this has
    ful enough that some pretty big name studios were using        been a running theme throughout my adult life). I’d nev-
    it. I decided to give it a go. That engine was Unity, and      er even seen XCode before, and it was a labyrinth that
    it’s ridiculously flexible, easy to use and, in my opinion,    would make David Bowie stop in his tracks and think,
    the best way to start creating apps for beginners on the       “Me and my floating glass balls better leave that place
    market. (See: “Coding Isn’t What it Used to Be…”).             well alone.” Figuring that out took a good couple of
                                                                   days. Thankfully, Unity does a fantastic job of creating
    One year ago, I lost my job. My partner was pregnant           the project files for you, all you have to do is figure
    with our second child. To say I was motivated to do            out the provisioning system. Oh, yes, the provisioning
    something… anything… to put food on the table would            system… (See “Provisionally Provision for Provisioning
    be an underestimation of the heat that the burning caul-       Provisions”)
    dron of poverty, on fire centimetres beneath me, had
    created. But what to do? The economic climate didn’t fill      Then, despite the fact that I’d gone into iOS develop-
    me with confidence, but app development did. It seemed         ment, I didn’t actually have an iPhone. Or an iPod Touch.
    like a great passive income stream, the market was (and        Or an iPad. Or a Mac (contentious I know, but a virtual
    still is) expanding extremely quickly and it felt like if      machine image on my Windows laptop had to suffice
    I was ever going to get on board that particular train, I’d    for the first 3 apps). I knew the specifications of each
    better do it before another big company wanted me to           device, but didn’t actually have one on which to test.
    do some extremely tedious things for very little money         This was a mistake on so many levels. It was like trying
    again… I’d spent a bit of time with the engine at this         to build a house without foundations. On a lake. Using
    point, and with what little money I had, stumped up for        air. Installing my app on a device was next to impossible,
    the iOS license for it, alongside joining the iOS devel-       I had to visit my brother after he’d returned from work
    oper program. I decided I was going to make a run at it.       just to spend 20 minutes testing to find as many bugs
                                                                   as possible. Then the next day I’d try to fix those bugs,
    I’d been working on an idea for a couple of months be-         but not be able to check for another 2 days whether it
    fore that, which seemed to be taking shape quite nicely,       had worked. Everything I did was a guess. An educated
    and thought it would be a perfect fit for the iPhone           guess, but a guess nonetheless. I’d already spent in ex-
    market. I was developing a superhero physics action puz-       cess of five hundred dollars though, and in the situation
    zler. The basic premise was good, in my eyes. Everybody        I was in, I couldn’t afford to buy a device of my own.




8                                                                                             www.icodermag.com     01/2011
GeTTInG Your FIrsT APP...
    TuTorIAl


    Working this way forced me, quickly, to optimise my           but I was straight on Facebook telling people to get on
    code. Everything became ‘hacky’. What started as              iTunes. The game was on “New & Noteworthy” lists
    a smooth 80fps on the computer screen quickly got             around the world and got thousands of downloads in its
    bogged down to one tenth of that on the device. Each          first day of sale. My ad revenue came in thick and fast,
    level had about two hundred rigidbodies in, each collid-      and I was seeing an ECPM (earnings per thousand im-
    ing with at least 2 others.The A4 processor just could        pressions) around the hundred dollar mark. This was ex-
    not cope with what I was throwing at it. I tried to help      tremely surprising as all the research I’d done suggested
    as best I could, cutting down the texture quality, not        ten dollars was average. I started to think there might
    rendering the (originally beautiful) 3D skyline I’d cre-      be hope, and that this game was actually good, just not
    ated. Removing any shader that took up any processing         as good as I’d intended so I was disappointed, but good
    time of statistical significance. Everything that I could     enough for the people downloading it.
    cut out I did. A bastardised version of my original pro-
    ject emerged, shaking, stuttering to life, and barely func-   Once more, I was mistaken. The reviews the game re-
    tional. It was a horrific mess, and was about as fun to       ceived were mediocre, at best. They were accurate and
    play as “Where’s the Soap” in a prison shower. As each        fair, and generally, through what little playing I’d done
    feature got stripped down, what remained felt like less       of my own game, I agreed with them. When I finally got
    than the sum of its parts. The only thing that worked         the chance to play it though, a few things dawned on
    was the menu system. Without being able to test,              me – Firstly, most people download a game from the
    I’d had to create a User Interface (UI) that worked on        description and screenshots that you put into iTunes
    all screen sizes, dynamically changing to suit the orienta-   Connect. They don’t look at reviews, and they rarely
    tion or resolution of the screen (not that the resolution     read past the first four lines of your blurb. No matter
    ever changed on an iOS device, but you do have to cater       how poor an app is, if it looks good, a lot of people
    for different devices), and this is probably the most use-    will download it, which means you’ll get some money
    ful skill I learned from the entire project.                  back through the adverts. Second, nobody cares about a
                                                                  good menu system provided it works. They care about
    At this point, you already know that your product is          a playable game. Mine wasn’t playable. This would have
    simply not up to scratch. You can polish and polish, but      to be corrected for the future… and third, but probably
    it’ll just end up being a shiny turd, so I decided it was     quite important, is to make sure that if you have an ad
    going to have to do. I couldn’t start over, I had to get      supported game, make sure the adverts don’t show up
    a product out there, I needed the money more than             upside down, cover half of your level select screen, and
    I needed artistic credibility, so I wrote the blurb, took     randomly appear and disappear. It makes people acci-
    some screenshots, optimised the keywords and then…            dently click on your ads, which generates quite a bit of
    I had no idea how I was going to make money from it.          revenue, but is against the Terms of Service agreement
    Could I justify charging for a product that was substand-     you hold with Apple and makes you look like a scumbag.
    ard? Of course, for me, the answer to that was a big          I swear, in all the tests I’d done, this wasn’t happening…
    fat “No”. It had to be free. So, the only option was to
    integrate adverts in the product. This was done quick-        Eventually, I had to remove the abomination from the
    ly (thanks to Prime31 – See: “Making Life Easier”) and        app store completely. It wasn’t just bad, it was broken.
    then it was a case of figuring out Application Loader, and    No amount of updating would have fixed it. Now that
    sending the package for review (See: “Final Hurdles”).        I know what I’m doing a little better, I might return to
    I didn’t know what to expect at all. Judging by what peo-     the idea, but it would be a ground up build. The game
    ple say about the review process, I was in severe doubt       had to be put out of it’s misery. But not before I’d gar-
    as to whether or not my game would be accepted. And           nered some information about sales trends on the app
    from the research I’d done, it was unlikely that I was        store (See: “We Consume All That Is New!”).
    going to make the money back that I’d already spent, let
    alone an income to live on…                                   Even through all this however, my initial foray into the
                                                                  world of app development was successful. Despite (or per-
    Fortunately, after two agonising weeks, the game fi-          haps because of ) my naivety, it earned me enough money
    nally got approved. I couldn’t even download it myself,       to buy a small range of test devices for my future projects,




9                                                                                             www.icodermag.com      01/2011
GeTTInG Your FIrsT APP...
     TuTorIAl


     and fund the development of the next one. It was four           but it’s important to set up before you do any testing on
     further apps down the line that my releases were good           an actual device. There are two types of profile that you
     enough to produce the same kind of figures I’d accidently       require, a development profile, for which you need to use
     stumbled into with my first, and I still have to be prolific    specific devices, and a distribution profile for, erm, distri-
     with my releases to earn a wage. I’ll have had eleven apps      bution.
     released in the first year of being a developer, with at
     least the same again planned for next year. My baseline         To set up a development profile, first you must set up
     income for these projects, not including the initial sales      at least one device on which to test. You need to get
     spike, works out about a dollar a day, per app. The initial     the UDID number of the device, which can be found in
     sales spike on average buys an iPad. It’s unlikely to make      iTunes, or for ease, search “UDID” on the app store and
     you rich, but as a passive income generator it helps.           download one of the free apps from there Go to the iOS
                                                                     development portal and click the “Provisioning Portal”
     Becoming an app developer has, without a doubt, changed         option at the top right, then click “Add Devices” and fill
     my life for the better. I’d recommend it to anybody with        in the form you’re presented with.
     the drive and determination to keep at it, and make it
     work for them. Your first forays into the app world prob-       Once the device is set up, you need to set up a new “App
     ably won’t set the world ablaze, and will likely be full of     ID”, so in the provisioning portal, click “App ID”, and
     mistakes, bugs (sorry, features) and plain bad design, but      “New App ID”, then fill in the details as shown below:
     that isn’t what’s important. What matters is getting your
     app out there in the market, showing you that it can gen-
     erate some income, regardless of its quality. Put your
     work out there for the world to see and be proud to say
     that not only are you learning, but you are doing. And you
     are getting paid to do it.

     codInG Isn’T WHAT IT used To be…
     Unity (http://www.unity3d.com) is the most flexible game
     engine I’ve ever had the pleasure of using. In terms of
     2D games, there are probably better solutions, but with
     the third party add-ons available through the Unity As-
     set Store, they won’t be that much better. In terms of
     3D engines, it’s not Unreal, but take a look at games like
     Shadowgun and you’ll see what it’s capable of graphically.
     From a code based standpoint, you can use C# or Uni-            The next step is to create the development provisioning
     tyScript (a version of JavaScript, so if you’re familiar with   profile itself. Click the “Provisioning” tab on the left hand
     web development you’ll have no trouble picking it up).          side, now, in the main box, create a new development
     You don’t have to worry as much about coding with Unity         profile by clicking “New Profile”. A form like this should
     as you would in practically any other engine, although          appear:
     it’s worth noting that you WILL need to get your head
     around the basics at least, especially as an Indy where you
     have to be a Jack of all trades. There are loads of tutorials
     to help you through this, and a pretty helpful community
     if you’re not trying to leap in and make the next World
     of Warcraft without knowing the difference between
     a rigidbody and a collider.

     ProVIsIonAllY ProVIsIon                                         Make sure the fields are filled in, your App ID is selected,
     For ProVIsIonInG ProVIsIons                                     and your testing devices are selected. Your app will only
     When making an app, provisioning can be an afterthought,        work on devices that you have chosen to develop for, and




10                                                                                               www.icodermag.com        01/2011
GeTTInG Your FIrsT APP...
     TuTorIAl


     have the UDID’s registered. Submit the form. Now, it may        FInAl Hurdles
     say that your profile is “Pending”. Refresh the page and        So, you’ve completed your app and it’s ready to be sent to
     you will be able to download it. Once downloaded, sim-          Apple, but there are a few final hurdles and hoops to jump
     ply open the file in XCode and it will be ready for use.        through. One issue that many people come across is non-
     Repeat these steps, without the specific devices, under         public API use. Don’t do it, they’ll find it and reject your
     Provisioning>Distribution for your distribution certificate.    binary, which means more work for you later and scuppers
     The final step is to then attach this profile to your app in    your release plans. To upload your binary to Apple’s serv-
     XCode. In the app settings, scroll down to “Code Signing”,      ers you’ll need to use Application Loader. Set up the binary
     and make sure that the signing identity is set as the profile   as “Ready for Upload” in iTunes Connect, the run Appli-
     you just created:                                               cation Loader, select the option to upload your package,
                                                                     choose your app ID from the drop down list and upload
                                                                     your binary (If you haven’t built for archiving in XCode,
                                                                     you’ll need to zip your .app file and send that, otherwise
                                                                     just use the zip file of your app) and hope that you don’t
                                                                     get any failure notices. Any of these that come up are eas-
                                                                     ily fixed in general, just Google the specific issue you get.
                                                                     Your info.plist file might get you into trouble here, make
                                                                     sure that the UIRequiredCapabilities array is correctly set
                                                                     up and that the build settings match (ie, armv6 or armv7 –
     And that’s it! You should now be able to build your app and     I only ever build for armv7 devices now as pre-3gs
     install it on a device. Testing in the XCode environment        iPhones and Generation 2 or lower iPod touches are such
     works quite well, but if you are using Unity, this will not     a small share of the market, and don’t support iAd).
     be an option. Some people use the Unity Remote, I prefer
     to install on the device and see how it actually runs. I’ve     Once your binary is “Waiting for Review”, you simply
     learned my lessons the hard way on that one.                    have to wait. The Apple staff get through the submissions
                                                                     pretty quickly, considering the number they receive. For
     mAkInG lIFe eAsIer                                              a new app, it takes about ten working days to be approved,
     Anybody that has had anything to do with Unity will             sometimes longer, but not often. For an update, about five
     know about the plug-ins that can be used, and anybody in        working days is average. Then, you’re good to go. Or not.
     iOS development with Unity will have heard of Prime31           Rejections don’t come about too often if you keep to the
     (http://www.prime31.com). The plug-ins that this company        submission guidelines, but occasionally you’ll have made an
     have developed are staggeringly useful, priced extremely        error that’s slipped through testing, or you’ll be pushing
     fairly, get customer support in a way that we should all        a boundary, or (please god no) you’ll have submitted a fart
     aspire to and are installed in a huge number of iOS apps,       soundboard. When you are rejected, generally you get
     including every single one of mine. It makes calling native     a specific reason for it, which you can then go about in
     functions on iOS easy (and offered for free), improves on       a couple of ways. The first way, you can complain, moan,
     the inbuilt Unity GUI system (also free), integrates with       berate and cry about it, get people’s backs up and make life
     Facebook and Twitter with about 2 lines of code, uses Ap-       harder for you in future. The second is that you can fix the
     ple’s GameCenter for scores, achievements, turn based           problems, whatever they may be, and resubmit your app.
     and real time multiplayer, integrates adverts through a ton     The second way usually works better…
     of different portals and uses StoreKit for in-app purchas-
     es. There are multiple other plug-ins that are offered too      We consume All THAT Is neW!
     which increase functionality still further, making what can     Apps available on the App Store have an extremely ‘long
     be a quite complicated and somewhat annoying process            tail’. They continue to move a few units every day for
     a complete breeze. If there’s one company that has allowed      months, maybe even years, after release. However, most of
     me to build a portfolio of apps quickly, it’s Prime31.          your downloads (unless you get featured by Apple them-
                                                                     selves, get yourself reviewed or featured on a big site like
                                                                     Toucharcade or TechCrunch, or you invest in a program
                                                                     like FAAD) will come in the first few days of release. This
                                                                     is the graph for downloads of my first release, although



11                                                                                               www.icodermag.com       01/2011
GeTTInG Your FIrsT APP...
     TuTorIAl


     due to restrictions in the developer license, specific numbers
     have had to be removed:




     As you can see from these daily figures, the first day is the
     most crucial. I now release my apps on a Friday or Saturday to
     maximise these effects, as these are also the days where apps
     gain most impressions from the ad networks, as you can see
     from this graph of last weeks’ iAd requests (again, numbers
     removed as we’re prohibited from sharing specifics):




                                                                                About the author:

                                                                                Ian marriott
                                                                                Ian makes apps under
                                                                                the name EyeSix Games
                                                                                (http://www.eyesixgames.co.uk),
                                                                                his latest release is Calm 2
     It makes sense here that in order to maximise profitability you            (http://itunes.apple.com/us/app/
     have to up that original spike as much as possible. Not only               calm-2/id484539101?ls=1&mt=8)
     does this mean more initial downloads, but as there are less               and can be followed @EyeSix
     releases at a weekend it means you get a higher chart placing,             on Twitter. Sometimes he puts
     which in turn means you’re higher on the search results and                pictures at a slight angle just
     gives the user a greater chance of finding your app.                       to annoy people.



12                                                                           www.icodermag.com    01/2011
ios API




     Treading new Waters,
     storyboard and Arc
     Li Mengran

     iOS 5 and Xcode 4 have recently been released, with many exciting new features such as storyboards,
     Automatic Reference Counting (ARC), GLKit, Core Image, iCloud and Twitter integration.
     For a complete reference, it’s better to read Apple’s release notes. However, that can be overwhelming
     and intimidating for a starting point, if one wants to quickly try out the shiny new toys. Therefore,
     like many others, I love reading hands-on tutorials and writing some test pro jects before reading the
     release notes. Having enjoyed a lot of good tutorials from the developer community in the past,
     I think I should pay back the community by contributing a simple tutorial.

     1. InTroducTIon                                                      tions Use Storyboard and Use Automatic Reference
     This tutorial familiarizes you with two new features of IOS 5,       Counting, as shown in Fig. 1; the first one for obvious
     storyboard and ARC, by going through example projects step           reasons, the second one for ease of coding.
     by step. Along the way, we’ll also introduce some new handy
     shortcuts brought by Xcode 4.

     2. sTorYboArd
     Storyboard is a much improved interface builder and a lot
     more. It eliminates for us a lot of hassles in interface design,
     especially transitions between different views.
        There are new two concepts introduced with story-
     board, scene and segue. A scene is a UIViewController                Figure 1: New Project
     that manages all the contents in one screen, and a segue is
     a transition between two scenes.                                     After we finish with the project creation wizard, take a look
        Usually an app only requires one storyboard, in which we          at the Project Navigator on the left of the screen, as
     can draw all the scenes for our app and link them by segues,         shown in Fig. 2. It should be opened by default. If not, you
     in a simple and intuitive manner. Finally we have a tool that lets   can open the project navigator by going from the top menu
     us manage all the visual aspects of our programs seamlessly          View g Navigators g Show Project Navigator.
     in one place. Unfortunately these shiny new features are only        Notice the highlighted storyboard file there. Instead of the
     available on iOS 5.                                                  .nib file, we work with this file to draw our interfaces. Now
        In this section we’ll give a simple tutorial on storyboard        click on this file to open it in the interface builder.
     and show some of the new shortcuts in interface building
     brought by Xcode 4.

     2.1 first example
     In our first example, we are going to create an iPhone app
     with two views that can pass data strings to each other. Let’s
     begin by going from the top menu File g New g New
     Project, then select Single View Application. Select
     iPhone in the Device Family, and name our project as
     ”StoryBoardDemo”, and make sure to check the two op-                 Figure 2: Project Navigator



13                                                                                                      www.icodermag.com     01/2011
TreAdInG neW WATers,
     ios API                                                                                 sTorYboArd And Arc


     You should see a blank view created by the wizard, as shown         •	 Hold the control key and drag the Text Field to
     in Fig. 3. This controller class for this view is ViewCon-             ViewController.h, in between the start and end of
     troller, implemented in the files ViewController.h and                 the interface definition, as shown in Fig. 4.
     ViewController.m, which are created by the wizard. We               •	 A small window should pop up as shown in Fig. 5. Let’s
     call ViewController a scene in our storyboard. We can                  set the name to be ”textField” and make sure you
     zoom in or out by right clicking on a blank area and selecting         change the storage option to strong. We won’t
     the appropriate option.                                                explain why we need to set it this way in this section,
        Notice the arrow from nowhere pointing at this scene.               but one simple rule of thumb is that if you would
     It indicates the fact that this is the initial scene, the scene        declare this IBOutlet as retain before IOS 4,
     that immediately shows up when we start our application. It is         you need to set its storage option to strong.
     very important to set the initial scene. In this example, the       •	 Click Connect.
     wizard automatically sets it for us. However, if you are starting   •	 Do the same for the Label and name it ”outputLabel”.
     from other templates, you may need to set it manually. You
     can do that in three steps:
     •	 Click on a scene to select it.
     •	 Open the attributes inspector by going from top
        menu View g Utilities g Show Attributes
        Inspector.
     •	 Check the option Is Initial View Controller.




                                                                         Figure 4: Assistant Editor1




     Figure 3: Initial Scene

     Drag from the object library to the initial scene a Text
     Field, a Round Rect Button and a Label. Double click on
     the button and change its text to ”Switch To New View”.
     We’ll be using the Text Field to collect some user input,
     and the Label to display some string passed by the other            Figure 5: Assistant Editor2
     view which we are going to create in a short while.
       Therefore we need to hook up the Text Field and La-               This should add the following two proper-
     bel to some IBOutlet in ViewController. we now show                 ties in ViewController.h and synthesize them in
     how to do it with a cool new shortcut brought by Xcode 4.           ViewController.m, in addition to hooking them up to the
                                                                         right parts.
     •	 Go from top menu View g Assistant Editor g
        Show Assistant Editor to open the assistant editor.              @property (strong, nonatomic) IBOutlet
        By default, you should see the editor and assistant                UITextField *textField;
        editor opened side by side, and ViewController.h                 @property (strong, nonatomic) IBOutlet
        is automatically opened in the assistant editor window.            UILabel *outputLabel;



14                                                                                                     www.icodermag.com   01/2011
TreAdInG neW WATers,
     ios API                                                                                 sTorYboArd And Arc


     That’s pretty neat, isn’t it. Now close the assistant editor        File, then select UIViewController subclass, and then
     by clicking on the cross button in the top right corner of          give it the name NewVewController. When you are pre-
     its window.                                                         sented with the options, remember to uncheck Targeted
        Right now the onscreen keyboard doesn’t retract when             for iPad and With XIB for user interface.
     we finish entering in the Text Field. We have to write an
     IBAction handler to do that.                                        Open the storyboard in the editor by clicking it in the
        Add the following definition in ViewController.h:                Project Navigator. Click on the new View Controller
                                                                         to select it. Open the Identity Inspector by going from
     - (IBAction)textFieldReturn:(id)sender;                             top menu View g Utilities g Show Identity In-
     Add the following method body in ViewController.m:                  spector. In the Custom Class tab in Identity Inspec-
     - (IBAction)textFieldReturn:(id)sender                              tor, open the class drop down menu as shown in Figure. 7,
     {                                                                   and select NewViewController.
     [sender resignFirstResponder];
     }

     Basically this handler asks the first responder, in this case the
     onscreen keyboard to retract.
       Open the storyboard and click on the Text Field to
     select it. Open the Connections Inspector by going from
     top menu View g Utilities g Show Connections
     Inspector. In the Sent Events tab, while holding the con-
     trol key, drag from the circle to the right of Did End On
     Exit to the View Controller button at the bottom as
     shown in Fig. 6. A small black window should popup with
     only one option textFieldReturn. Select it should work
     as we want now.                                                     Figure 7: New View Controller Identity

                                                                         Draw a Text Field, Round Rect Button and Label
                                                                         on the new View Controller in a similar fashion as our
                                                                         original View Controller. Change the text on the button
                                                                         to ”Switch To Old View”. Also remember to make the
                                                                         onscreen keyboard for the new Text Field retract in
                                                                         a similar manner.
                                                                           Hook the Text Field to the property textField and
                                                                         Label to the property outputLabel in NewViewCon-
                                                                         troller in a similar fashion as the original view.
                                                                           Now is the time to create the segue! While holding the
                                                                         control key, drag the button in the original View Control-
                                                                         ler to the new View Controller, as shown in Fig. 8.




     Figure 6: Text Field Return

     Drag a View Controller from the object library to
     the storyboard. We need to create a new class for this new
     View Controller.
       Right click on the StoryBoardDemo group and select New            Figure 8: Create Segue 1



15                                                                                                   www.icodermag.com    01/2011
TreAdInG neW WATers,
     ios API                                                                             sTorYboArd And Arc


     A small black window with three options should pop up,          needed to create another segue from the new View Con-
     as shown in Fig. 9. Select modal from the options. The          troller to the old View Controller. This doesn’t work,
     modal style segue is such that the new screen completely        because every time a segue is invoked to transition from
     blocks the underlying screen, with which the user cannot        a source View Controller to a destination View Con-
     interact until the screen on top is closed. The push style      troller, it actually creates a new instance of the destina-
     segue is only for view controllers embedded in UINaviga-        tion View Controller. Instead of going back to the source
     tionControllers or UITabBarControllers. If we use it here,      scene, the segue I envisaged would just go to a new instance
     it doesn’t work.                                                of the source scene. There is no ”reverse” segue per se.
                                                                     In order to go back, we need to close the new scene.
                                                                       Add the following IBAction handler definition in
                                                                     NewViewController.h.

                                                                     - (IBAction)buttonPress:(id)sender;
     Figure 9: Create Segue 2
                                                                     Add the following IBAction handler implementation in
       You should see something like this in your storyboard,        NewViewController.m.
     as shown in Fig. 10.
                                                                     - (IBAction)buttonPress:(id)sender{

                                                                     [self         dismissViewControllerAnimated:YES
                                                                     completion:nil];
                                                                     }

                                                                     The dismissViewControllerAnimated:completion:
                                                                     method is new in iOS 5. It is different from the old method
                                                                     dismissModalViewControllerAnimated: in that it has
                                                                     an additional parameter, which is a block, that gives us the
                                                                     ability to execute additional code after the dismissal of the
                                                                     screen. The old method still works in IOS 5.
                                                                       Open the storyboard. Click on the button in the new
     Figure 10: Segue Created                                        View Controller to select it, then while holding control
                                                                     key, drag it to the New View Controller button at the
       Notice the arrow with knot connecting the original View       bottom, as shown in Fig. 11.
     Controller and the new View Controller. That repre-
     sents the segue. Select the segue by clicking on the knot.
     Open the Attributes Inspector. Set the identifier of the
     segue to ”OldToNew”. Note that we can also change the
     transition animation for this segue in the Attributes Inspec-
     tor. There are four types of transitions provided by UIKit,
     which we can subclass to customize. They are Cover Ver-
     tical, Flip Horizontal, Cross Dissolve and Par-
     tial Curve. By default, the transition for modal style seg-
     ue is Cover Vertical, which slides the destination scene
     vertically upwards to cover the source scene.
       Now we can already compile and see the transition to
     the new View Controller. Notice the convenience that
     this is done without having to write an IBAction handler
     for the button touch down event.
       However, there is no way to go back to the original screen
     yet. The first time I’ve tried Storyboard, I though I just      Figure 11: Button Press 1



16                                                                                               www.icodermag.com       01/2011
TreAdInG neW WATers,
     ios API                                                                            sTorYboArd And Arc


     Select buttonPress from the small black window that             prepareForSegue:sender: to the following:
     pops up. Compile and run it; now pressing the button in
     the new scene should bring us back to the original.             - (void)prepareForSegue:(UIStoryboardSegue *)
                                                                     segue sender:(id)sender{
     Next we want to pass the string entered in the Text Field       if([[segue identifier] isEqualToString:
     in the original View Controller to the new one and dis-         @”OldToNew”]){
     play it in the new one’s Label. We do this by importing         NewViewController *nvc = (NewViewController *)
     NewViewController.h in ViewController.h, and imple-             segue.destinationViewController;
     menting the method prepareForSegue:sender:, which               nvc.msg = self.textField.text;
     is called by the system when the transition happens.              }
        One initial try of the implementation is as follows:         }

     - (void)prepareForSegue:(UIStoryboardSegue *)                   Uncomment the method viewDidLoad in
     segue sender:(id)sender{                                        NewViewController.m and change it to:
     if([[segue identifier]
     isEqualToString:@”OldToNew”]){                                  - (void)viewDidLoad
     NewViewController *nvc = (NewViewController *)                  {
     segue.destinationViewController;                                [super viewDidLoad];
     nvc.outputLabel.text = self.textField.text;                     self.outputLabel.text = self.msg;
        }                                                            }
     }
                                                                     Now the string in the Text Field from the original view
        The idea here is to first check if it is the segue we want   can be successfully displayed in the destination view. You
     to deal with by matching its identifier, then get a reference   can try it to convince yourself. To pass back data from the
     to the destination View Controller, and set the text of         destination View Controller to the original View Con-
     its outputLabel to the text in the Text Field of the            troller, we need to add a protocol and delegate.
     original View Controller.
        However, this will not work, not because the text prop-      Add in the definition for protocol NewViewControllerDel
     erty of the outputLabel is not set. The reason is that          and the property delegate in NewViewController.h, so
     the method prepareForSegue:sender: is called after              that NewViewController.h becomes the following:
     the creation of the instance of New View Controller, but
     before the loading of its view. As a result, when the           #import <UIKit/UIKit.h>
     view of New View Controller loads, it overwrites the text
     property of outputLabel by the value we set in the story-       @class NewViewController;
     board.
        One way to overcome this is to add to New View Con-          @protocol NewViewControllerDel <NSObject>
     troller a new property that is not changed in the view          - (void)newViewControllerClose:
     loading process, pass the value to that property and then       (NewViewController*)controller;
     update the view in the viewDidLoad method of New View           @end
     Controller.                                                     @interface NewViewController : UIViewController
        Add the following property definition in                     @property (strong, nonatomic) IBOutlet UIText-
     NewViewController.h:                                            Field *textField;
                                                                     @property (strong, nonatomic) IBOutlet UILabel
     @property (strong, nonatomic) NSString *msg;                    *outputLabel;
                                                                     @property (strong, nonatomic) NSString *msg;
     Synthesize it as follows in NewViewController.m:                @property (weak, nonatomic) id <NewViewCon-
                                                                     trollerDel> delegate;
     @synthesize msg;                                                - (IBAction)buttonPress:(id)sender;
                                                                     - (IBAction)textFieldReturn:(id)sender;
     Change     the    implementation      for    the    method      @end



17                                                                                              www.icodermag.com      01/2011
TreAdInG neW WATers,
     ios API                                                                           sTorYboArd And Arc


     Note that it is customary to pass the reference of the ob-     to tell the destination View Controller that the source
     ject calling the delegate function as the first parameter so   View Controller is its delegate, like follows:
     that the delegate always knows who calls it. Usually this
     one parameter is enough, since we could pass messages to       - (void)prepareForSegue:(UIStoryboardSegue *)
     the delegating object to retrieve whatever information         segue sender:(id)sender{
     we want.                                                       if([[segue identifier]
       Synthesize the property delegate in NewViewController.m      isEqualToString:@”OldToNew”]){
     as follows:                                                    NewViewController *nvc = (NewViewController *)
                                                                    segue.destinationViewController;
     @synthesize delegate;                                          nvc.msg = self.textField.text;
                                                                    nvc.delegate = self;
     Note that the storage qualifier for property ”delegate”           }
     is set to weak so as to avoid retain cycles, which we will     }
     talk about later.
        Add in a line in the buttonPress method of NewView-         Now the code should work as we want. Compile and run
     Controller to call the delegate method, like the following:    it. Fig. 12 shows five screens.

     - (IBAction)buttonPress:(id)sender{                             From top to bottom, left to right, the first screen is what
     [self.delegate newViewControllerClose:self];                   we should see when we start the app; the second is after
     [self dismissViewControllerAnimated:YES                        we have entered the message ”hello world” in the Text
     completion:nil];                                               Field; the third one is after we click on the button and
     }                                                              transition to the new scene, where the message we’ve
                                                                    passed from the original scene is displayed below the but-
     Declare that ViewController now implements the                 ton; the fourth one is after we’ve entered the message
     protocol NewViewControllerDel in ViewController.h              ”hello back” in the Text Field in the new scene; the last
     so that it is now the following:                               one is after we close the new scene, go back to the original
                                                                    scene and display the message passed from the new scene
     #import <UIKit/UIKit.h>                                        below the button.
     #import “NewViewController.h”
                                                                    2.2 Important Points To Take note
     @interface ViewController : UIViewController                   •	 Always remember to set an initial scene. It’s
     <NewViewControllerDel>;                                           automatically set to be the default View Controller
     @property (strong, nonatomic) IBOutlet UIText-                    when you start with a single view project template.
     Field *textField;                                                 Should you start from some other template, e.g. the
     @property (strong, nonatomic) IBOutlet UILabel                    empty project template, you need to do it manually.
     *outputLabel;
     - (IBAction)textFieldReturn:(id)sender;                        •	 Segue always creates a new instance of the destination
     @end                                                              View Controller. Consequently it is not possible to
                                                                       create a ”reverse” segue, i.e. a segue that transitions
     Implement the protocol method NewViewController-                  back to the source View Controller. You have to do
     Close in ViewController.m like follows:                           it through delegate.

     - (void)newViewControllerClose:                                •	 Implement the prepareForSegue:sender: method
     (NewViewController*)controller;                                   to pass data to the destination View Controller.
     {                                                                 This method is called after the instance of the
     self.outputLabel.text = controller.textField.                     destination View Controller is created, but before its
     text;                                                             view is loaded.
     }
                                                                    •	 The push style segue is only used for scenes embedded
     Add in a line in the method prepareForSegue:sender:               in UINavigationControllers or UITabBarControllers.



18                                                                                              www.icodermag.com      01/2011
TreAdInG neW WATers,
     ios API                                                                             sTorYboArd And Arc


     •	 We need to give each segue an identifier in order to         this part into two subsections; the first one on how ARC
        differentiate between them. This identifier must be          works, second one on interoperability with legacy code.
        unique in the scope of the source View Controller.
        That means different scenes may have segues sharing the      3.1 How Arc works
        same identifier.                                             You need to enable ARC for it to work. You can do that
                                                                     when you start a new project, where the wizard presents
     3. Arc, more subTle THAn IT seems                               you the option of enabling ARC, as shown in the previous
     The traditional IOS memory management model is all              section. Checking that option enables ARC for the entire
     about the reference count, i.e. the number of references        project.
     to an object from the other active objects in a lifecycle.
     The creator of the object has a reference to it; the other      Basically ARC works by adding code at compile time to
     objects can increase the number of references to it if they     ensure that objects live only as long as necessary, by adding
     call its retain method. The other objects can decrease          retain, release and autorelease at appropriate plac-
     the reference count of the object in question by calling its    es automatically. For example, below is code snippet for
     release method, to a non-negative number. They do it af-        a typical object creation.
     ter they are done with the object. An object with zero ref-
     erence count in the end of the lifecycle will be deallocated.   NSObject *obj = [[NSObject alloc] init];
     However, if the creator of the object returns the object by     // some code block
     a method, retain and release alone will not get us the
     behavious we want. Calling release on it will destroy it        If obj is no longer used after some code block, the com-
     before the caller of the method could get it as the return      piler automatically adds the invocation of the release
     value. On the other hand, not calling release on it before      method on obj after the code block. If the obj is returned,
     we exit the method scope will cause memory leak. In this        the compiler automatically adds the invocation of the au-
     case we call the method autorelease on the object, put-         torelease method on obj. If we get reference to an au-
     ting it into an autorelease pool, which when destroyed by       toreleased object like luckyNumArr in the following code,
     the system, will decrement the object’s reference count         and later need to use it, the compiler can detect it and add
     by one. Great care has to be taken in order not to leak         the call to retain method.
     memory, or create dangling pointers.
        Automatic Reference Counting, as its name suggests,          luckyNumArr = [NSArray arrayWithObjects:tempArr
     is a feature that automatically counts the reference to an      count:luckyCount];
     object in our code and add the retain and release calls
     to it appropriately so that we humans do not have to both-      The automatic deduction power of the compiler is pretty
     er any more. That sounds very nice, isn’t it. When I first      powerful, but not always reliable. In particular, it does not
     heard about Automatic Reference Counting (ARC), I felt          guard against retain cycle, which happens when for instance
     that it was too good to be true. Reading the release notes      object A retains object B and object B retains A, resulting
     in details confirms my suspicion. There is no free lunch        in a cycle of reference, preventing both objects from being
     in this world. To be fair, ARC does simplify a lot of work,     deallocated.
     and I believe they will make it much better in the future.         We can provide hints to the compiler by preceding our
     However, there are a lot of subtleties we have to take into     property and variable declarations with lifetime quali-
     consideration, in order to make the best out of ARC and         fiers.
     avoid ugly mistakes.
                                                                     •	 For properties, we have the qualifiers strong and
     In this section we will not develop any example apps,              weak. We assign the qualifier strong to objects we
     as code snippets suffice for demonstration. Before you             want to own, just as we assign retain when ARC is
     start to try ARC, make sure you at least have XCode 4 on           disabled. The qualifier weak is like the qualifier assign
     Snow Leopard, because although ARC is mostly a compile-            when ARC is disabled, except that when this property
     time trick, it does require some runtime support. You can          is deallocated, the property value is set to nil, instead
     only target IOS 4 and above for IOS, or Snow Leopard and           of remaining as a dangling pointer.Note that zeroing
     above for OSX. Besides, you need Xcode 4 in Lion to de-            weak references only work on IOS 5 and above for
     velop apps with ARC enabled for Snow Leopard. We divide            IOS, Lion and above for OSX.



19                                                                                               www.icodermag.com       01/2011
TreAdInG neW WATers,
     ios API                                                                          sTorYboArd And Arc


       retain, assign and copy qualifiers cannot be used with      – ( __bridge_transfer T) p does the cast and
       ARC. Remember that we assign the qualifier strong to          decrement the CFRef by 1.
       the Iboutlets in the storyboard section? The pattern        – ( __bridge_retained T) p does the cast and
       we should typically adopt for the Iboutlets is that           increment the CFRef by 1.
       they are all set to weak, except for those from File’s
       Owner to top-level objects in a nib file or a storyboard   •	 We cannot use NSAutoreleasePool objects. Instead
       scene, which are set to strong.                               we should embed the codes benefitting from the
                                                                     autorelease pool in an @autoreleasepool block
     •	 For variables, we have the following qualifiers:             like this:

      – __strong is the default qualifier if we do not specify      @autoreleasepool{
        anything. It means that we intend to own the object         //code benefitting from the pool
        in question.                                                }
      – __weak specifies a zeroing weak reference to
        an object.                                                  According to Apple, this is more efficient than using
      – __unsafe_unretained specifies weak reference to             NSAutoreleasePool.
        an object that leaves the pointer dangling after it
        has been deallocated.                                     There are some pitfalls we need to avoid.
      – __autoreleasing is used for arguments passed
        by reference id* and autoreleased on return.              •	 We need to be careful when using __weak variables on
                                                                     the stack, as they are immediately released when there
     Besides the new qualifiers, ARC also introduces new rules.      is no strong reference to it. For instance, consider the
     We list the more relevant rules here:                           following code snippet:

     •	 In order not to mess up ARC’s deduction algorithm, we       NSArray __weak *list=[NSArray arrayWithObject
        cannot explicitly invoke dealloc, retain, release,          s:@”Tom”,@”Jerry”,nil];
        retainCount or autorelease. Neither can we try to           [self displayList:list];
        surreptitiously invoke them through selectors like
        @selector(retain).                                          Although list is used after the assignment, there is no
                                                                    strong reference to it. Therefore it is immediately deallo-
       We may implement a dealloc method to manage                  cated, and the method displayList: will display nothing
       resources.                                                   since list will be set to nil before invoking display-
                                                                    List:.
     •	 We cannot use the foundation functions
        NSAllocateObject or NSDeallocateObject.                   •	 We also have to ensure that an object passed by
                                                                     reference have the same lifetime qualifier as the
     •	 We cannot use object pointers in C structures.               corresponding argument declaration.
                                                                     For example,
     •	 We cannot casually cast between id and void *.               if we have the following code snippet:
        We need to use the following three bridging casts
        to inform ARC about the ownership of the object             OperationInfo *info = nil;
        in question: __bridge, __bridge _transfer, and              BOOL OK = [myObject
        __bridge _retained. The latter two should only be           doOperationWithInfo:&info];
        used when dealing with toll-free bridged Core               if(!OK){
        Foundation objects where we would normally have             // blah blah blah
        to call cFretain and/or cFrelease to manage the             // ...
        lifetime of Core Foundation objects.
                                                                    It works and info is implicitly declared to be strong. Now
      – ( __bridge T) p casts p to the type T with no               if the method declaration of doOperationWithInfo:
        operation at all. No ownership is transferred.              is the following:



20                                                                                            www.icodermag.com       01/2011
TreAdInG neW WATers,
     ios API                                                                          sTorYboArd And Arc


      -(BOOL)doOperationWithInfo:(OperationInfo *                  have a graph of objects, we would like to have within it
      __autoreleasing *)info;                                      a spanning tree, i.e. a strict parent-child hierarchy, where
                                                                   we set the reference from parent to child as strong and
      Then there is a mismatch between the lifetime qualifier      child to parent as weak. This usually does the trick.
      of info and the argument to the method doOperation-
      WithInfo:. In this case, the compiler rewrites the code    3.2 Interoperability
      into:                                                      ARC can work on a file by file basis, meaning we could have
                                                                 files with ARC disabled in an ARC enabled project. We
      OperationInfo __strong *info = nil;                        can enable ARC using the new -fobjc-arc compiler flag.
      OperationInfo __autoreleasing *tmp = info;                 In a project where ARC is enabled by default, we can dis-
      BOOL OK = [myObject                                        able ARC for a specific file using the new -fno-objc-arc
      doOperationWithInfo:&tmp];                                 compiler flag. One more thing to take note when we want
      info = tmp;                                                a mixture of ARC enabled and disabled files is that we can
      if(!OK){                                                   not give a property a name that begins with new.
      // blah blah blah
      // ...                                                     4 conclusIon
                                                                 I hope this simple tutorial can help you start having fun
      This would create an unnecessary temporary variable.       with the shiny new toys!
      We can rectify this by changing the type of the argument
      to the method doOperationWithInfo: to id __strong            About the author:
      * or declare the variable info as __autoreleasing.
                                                                   li mengran
     •	 We need to carefully manage the lifetime qualifiers in     The author is currently a PHD student
        order to avoid having a strong reference cycle, which      in the National University of Singapore.
        is the same thing as the old retain cycle. When we

                                                                                                      Figure 12: Result




21                                                                                             www.icodermag.com        01/2011
WHAT’s neW In ios




     The All new ios 5
     Manish Nath



     Icloud sTorAGe APIs                                           The contents of the block are enclosed by curly braces,
     Using the iCloud storage APIs                                 as shown in the following example:
     a user can view or edit those
     documents from any device with-                               @autoreleasepool
     out having to sync or transfer                                {
     files explicitly. Storing documents                           // Your code here
     in a user’s iCloud account also provides a layer of secu-     }
     rity for that user. With the new iCloud storage loosing
     your device does not mean that you loose your data.           A storyboard file captures your entire user interface in
     There are two ways that applications can take advantage       one place and lets you define both the individual view
     of iCloud storage, each of which has a different intended     controllers and the transitions between those view con-
     usage:                                                        trollers. Storyboards capture the flow of your overall
                                                                   user interface.
     •	 iCloud document storage – Use this feature to store          If you are creating new applications, the Xcode templates
        user documents and data in the user’s iCloud account.      come preconfigured to use storyboards. For other applica-
                                                                   tions, the process for using storyboards is as follows:
     •	 iCloud key-value data storage – Use this feature to
        share small amounts of data among instances of your          1. Configure your application’s Info.plist file to use
        application.                                                 storyboards:

     AuTomATIc reFerence counTInG                                    •	 Add the UIMainStoryboardFile key and set its value to
     Automatic Reference Counting (ARC) is a feature built              the name of your storyboard file.
     to simplify the process of managingthe lifetimes of
     Objective-C objects. ARC evaluates the lifetime require-        •	 Remove the existing NSMainNibFile key. (Storyboards
     ments of your objects and automatically inserts the ap-            replace the main nib file.)
     propriate method calls at compile time.
                                                                     2. Create and configure the storyboard file in Xcode
     Some Restrictions with ARC :
                                                                   cusTomIze nATIVe uI elemenTs In Ios 5
     •	 Do not call the retain, release, autorelease, or dealloc   You can now customize the appearance of many UIKit
        methods in your code.                                      views and controls to give your application a unique look
                                                                   and feel. For example, you might use these customiza-
     •	 Do not store object pointers in C structures.              tions to make the standard system controls match the
                                                                   branding for the rest of your application.
     •	 Do not directly cast between object and nonobject
        types (for example, between id and void*).                 UIKit supports the following customizations:

     •	 No NSAutoreleasePool objects.                              •	 You can set the tint color, background image, and title
                                                                      position properties (among other) on a wide variety of
     Instead, you must use a new @autoreleasepool keyword             objects, including toolbars, navigation bars, search bars,
     to mark the start of an autorelease block.                       buttons, sliders, and some other controls.



22                                                                                              www.icodermag.com       01/2011
THe All neW ios 5
     WHAT’s neW In ios


     •	 You can set attributes of some objects directly, or you               forBarMetrics:UIBarMetricsLandscapePho-
        can set the default attributes to use for a class using an   ne];
        appearance proxy.
                                                                       // Customize the title text for *all* UINavigationBars
     An appearance proxy is an object you use to modify                    [[UINavigationBar appearance] setTitleTe-
     the default appearance of visual objects such as views          xtAttributes:
     and bar items. Classes that adopt the UIAppearance                       [NSDictionary dictionaryWithObjectsAnd-
     protocol support the use of an appearance proxy. To             Keys:
     modify the default appearance of such a class, retrieve                         [UIColor colorWithRed:255.0/255.0
     its proxy object using the appearance class method and          green:255.0/255.0 blue:255.0/255.0 alpha:1.0],
     call the returned object’s methods to set new default                        UITextAttributeTextColor,
     values. A proxy object implements those methods and                          [UIColor colorWithRed:0.0 green:0.0
     properties from its proxied class that are tagged with          blue:0.0 alpha:0.8],
     the UI_APPEARANCE_SELECTOR macro. For exam-                                  UITextAttributeTextShadowColor,
     ple, you can use a proxy object to change the default                          [NSValue valueWithUIOffset:UIOffset-
     tint color (through the progressTintColor or trackTint-         Make(0, -1)],
     Color properties) of the UIProgressView class.                               UITextAttributeTextShadowOffset,
        If you want to set a different default appearance based                     [UIFont fontWithName:@”Arial-Bold”
     on how a given object is used in your application,you can       size:0.0],
     do so using the proxy object returned by the appearance-                     UITextAttributeFont,
     WhenContainedIn: method instead. For example, you use                        nil]];
     this proxy object to set specific default values for a button
     only when it is contained inside a navigation bar.              }
        Any changes you make with a proxy object are applied, at
     view layout time, to all instances of the class that exist or   uIbarbuttonItem
     that are subsequently created.
                                                                     [[UIBarButtonItem appearance] setBackgroundIma-
     code snIPPeTs:                                                  ge:button24 forState:UIControlStateNormal
                                                                         barMetrics:UIBarMetricsLandscapePhone];
     navigationbar
                                                                     [[UIBarButtonItem appearance] setTitleTextAt-
     - (void)customizeAppearance                                     tributes:
     {                                                                   [NSDictionary dictionaryWithObjectsAndKeys:
       // Create resizable images                                             [UIColor colorWithRed:220.0/255.0 gre-
          UIImage *gradientImage44 = [[UIImage image-                en:104.0/255.0 blue:1.0/255.0 alpha:1.0],
     Named:@”surf_gradient_textured_44”]                                     UITextAttributeTextColor,
             resizableImageWithCapInsets:UIEdgeInset-                           [UIColor colorWithRed:1.0 green:1.0
     sMake(0, 0, 0, 0)];                                             blue:1.0 alpha:1.0],
          UIImage *gradientImage32 = [[UIImage image-                        UITextAttributeTextShadowColor,
     Named:@”surf_gradient_textured_32”]                                    [NSValue valueWithUIOffset:UIOffsetMake(0,
             resizableImageWithCapInsets:UIEdgeInset-                1)],
     sMake(0, 0, 0, 0)];                                                     UITextAttributeTextShadowOffset,
                                                                             [UIFont fontWithName:@”AmericanTypewri-
       // Set the background image for *all* UINavigationBars        ter” size:0.0],
          [[UINavigationBar appearance] setBackgroun-                        UITextAttributeFont,
     dImage:gradientImage44                                                  nil]
               forBarMetrics:UIBarMetricsDefault];                       forState:UIControlStateNormal];
          [[UINavigationBar appearance] setBackgroun-
     dImage:gradientImage32




23                                                                                             www.icodermag.com    01/2011
THe All neW ios 5
     WHAT’s neW In ios


     uITabbar                                          uIswitch

      [[UITabBar appearance] setBackgroundImage:tab-   [rentSwitch setOnTintColor:[UIColor colorWi-
     Background];                                      thRed:0 green:175.0/255.0 blue:176.0/255.0 al-
     [[UITabBar appearance] setSelectionIndicatorI-    pha:1.0]];
     mage:
              [UIImage imageNamed:@”tab_select_indi-
     cator”]];                                         sTorYboArds

     uIslider

       [[UISlider appearance] setMaximumTrackImage-
     :maxImage
         forState:UIControlStateNormal];
     [[UISlider appearance] setMinimumTrackImage:mi-
     nImage
         forState:UIControlStateNormal];
     [[UISlider appearance] setThumbImage:thumbImage
         forState:UIControlStateNormal];

     uIsegmentedcontrol                                If you have an app with many different screens then
                                                       storyboards can help reduce the amount of glue code
      [[UISegmentedControl appearance] setBackgroun-   you have to write to go from one screen to the next.
     dImage:segmentUnselected                          Instead of using a separate nib file for each view controller,
         forState:UIControlStateNormal barMetrics:U-   your app uses a single storyboard that contains the de-
     IBarMetricsDefault];                              signs of all of these view controllers and the relationships
     [[UISegmentedControl appearance] setBackgroun-    between them.
     dImage:segmentSelected
          forState:UIControlStateSelected barMetric-   Storyboards have a number of advantages over
     s:UIBarMetricsDefault];                           regular nibs:

     [[UISegmentedControl appearance] setDividerIma-   •	 With a storyboard you have a better conceptual
     ge:segmentUnselectedUnselected                       overview of all the screens in your app and the
         forLeftSegmentState:UIControlStateNormal         connections between them. It’s easier to keep track
         rightSegmentState:UIControlStateNormal           of everything because the entire design is in a single file,
         barMetrics:UIBarMetricsDefault];                 rather than spread out over many separate nibs.
     [[UISegmentedControl appearance] setDividerIma-
     ge:segmentSelectedUnselected                      •	 The storyboard describes the transitions between the
         forLeftSegmentState:UIControlStateSelected       various screens. These transitions are called “segues”
         rightSegmentState:UIControlStateNormal           and you create them by simply ctrl-dragging from one
         barMetrics:UIBarMetricsDefault];                 view controller to the next. Thanks to segues you need
     [[UISegmentedControl appearance]                     less code to take care of your UI.
         setDividerImage:segUnselectedSelected
         forLeftSegmentState:UIControlStateNormal      •	 Storyboards make working with table views a lot easier
         rightSegmentState:UIControlStateSelected         with the new prototype cells and static cells features.
         barMetrics:UIBarMetricsDefault];                 You can design your table views almost completely in
                                                          the storyboard editor, something else that cuts down
                                                          on the amount of code you have to write.




24                                                                                  www.icodermag.com        01/2011
THe All neW ios 5
     WHAT’s neW In ios


     oPenGl es 2.0 WITH GlkIT                                      Json In Ios 5
     iOS 5 comes with a new set of APIs that makes de-             iOS 5 has some new built-in APIs to make it really easy
     veloping with OpenGL much easier than it used to be.          to read and write JSON. Over a period of time JSON has
     The new set of APIs is collectively known as GLKit.           proven itself best for communication with a web service
     It contains four main sections:                               . For example, if you have an array of three strings, the
                                                                   JSON representation would simply be:
     •	 GlkView/GlkViewcontroller. These classes
        abstract out much of the boilerplate code it used          [“test1”, “test2”, “test3”]
        to take to set up a basic OpenGL ES project.
                                                                   If you have a Pet object with member variables name,
     •	 Glkeffects. These classes implement common shading         breed, and age, the JSON representation would simply
        behaviors used in OpenGL ES 1.0, to make transitioning     be:
        to OpenGL ES 2.0 easier. They’re also a handy way
        to get some basic lighting and texturing working.          {“name” : “Dusty”, “breed”: “Poodle”, “age”: 7}

     •	 Glmath. Prior to iOS 5, pretty much every game             It’s that simple, which is why it’s so easy and popular to
        needed their own math library with common vector           use. The reason JSON is important is that many third
        and matrix manipulation routines.                          parties such as Google, Yahoo, or Kiva make web ser-
                                                                   vices that return JSON formatted data when you visit
     •	 GlkTextureloader. This class makes it much easier          a URL with a specified query string. If you write your
        to load images as textures to be used in OpenGL.           own web service, you’ll also probably find it really easy
        Rather than having to write a complicated method           to convert your data to JSON when sending to another
        dealing with tons of different image formats, loading      party. If you’ve had to parse JSON in your iOS apps in
        a texture is now a single method call!                     the past, you’ve probably used a third party library such
                                                                   as JSON Framework.
     Arc In Ios 5
     The most disruptive change in iOS 5 is the addition of        Well with iOS 5, needing to use a third party library
     Automatic Reference Counting, or ARC for short. ARC           for JSON parsing is a thing of the past. Apple has finally
     is a feature of the new LLVM 3.0 compiler and it com-         added a JSON library in Cocoa and I must say I person-
     pletely does away with the manual memory management           ally like it very much!
     that all iOS developers love to hate.
                                                                   You can turn objects like NSString, NSNumber, NSArray
     Using ARC in your own projects is extremely simple.           and NSDictionary into JSON data and vice versa super
     You keep programming as usual, except that you no             easily. And of course no need to include external librar-
     longer call retain, release and autorelease. That’s basi-     ies – everything is done natively and super fast.
     cally all there is to it.
                                                                   core ImAGe In Ios 5 
     With Automatic Reference Counting enabled, the com-           Core Image is a powerful framework that lets you easily
     piler will automatically insert retain, release and autore-   apply filters to images, such as modifying the vibrance,
     lease in the correct places in your program. To migrate       hue, or exposure. It uses the GPU (or CPU, user defin-
     your current app to ARC you can Edit > Refactor menu,         able) to process the image data and is very fast. Fast
     you’ll see an option called migrate to objective-             enough to do real time processing of video frames!
     c Arc. That tool will help convert your code to
     Arc.                                                          Core Image filters can stacked together to apply multiple ef-
                                                                   fects to an image or video frame at once. When multiple fil-
     The only problem that you might face would be                 ters are stacked together they are efficient because they cre-
     with 3rd party libraries used in your app which               ate a modified single filter that is applied to the image, instead
     might not support Arc.                                        of processing the image through each filter, one at a time.




25                                                                                               www.icodermag.com         01/2011
Beginning with Basics of iOS Development
Beginning with Basics of iOS Development
Beginning with Basics of iOS Development
Beginning with Basics of iOS Development
Beginning with Basics of iOS Development
Beginning with Basics of iOS Development

Más contenido relacionado

La actualidad más candente

Android vs ios presentation detailed slides
Android vs ios presentation detailed slidesAndroid vs ios presentation detailed slides
Android vs ios presentation detailed slidesMuhammad Arslan Khan
 
What Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersWhat Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersBen Gaddis
 
Android vs. IOS: Comparing features & functions
Android vs. IOS: Comparing features & functionsAndroid vs. IOS: Comparing features & functions
Android vs. IOS: Comparing features & functionsDipesh Bhatiya
 
Iphone vs android
Iphone vs androidIphone vs android
Iphone vs androidxomo
 
Programing for the iPhone
Programing for the iPhonePrograming for the iPhone
Programing for the iPhoneMike Qaissaunee
 
Android vs iPhone - Differences in UI Patterns and Design
Android vs iPhone - Differences in UI Patterns and DesignAndroid vs iPhone - Differences in UI Patterns and Design
Android vs iPhone - Differences in UI Patterns and DesignJeremy Johnson
 
Android VS IOS VS Windows Phone
Android VS IOS VS Windows PhoneAndroid VS IOS VS Windows Phone
Android VS IOS VS Windows Phonerabbianasir99
 
ppt on android vs iOS
ppt on android vs iOSppt on android vs iOS
ppt on android vs iOSShivam Gupta
 
iPhone Seminar Part 1
iPhone Seminar Part  1iPhone Seminar Part  1
iPhone Seminar Part 1NAILBITER
 
"iPhone vs Andriod," Anthony Hand
"iPhone vs Andriod," Anthony Hand"iPhone vs Andriod," Anthony Hand
"iPhone vs Andriod," Anthony Handrayvillares
 

La actualidad más candente (20)

Android vs iOS
Android vs iOSAndroid vs iOS
Android vs iOS
 
Android vs ios presentation detailed slides
Android vs ios presentation detailed slidesAndroid vs ios presentation detailed slides
Android vs ios presentation detailed slides
 
What Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for MarketersWhat Apple's iOS 5 Means for Marketers
What Apple's iOS 5 Means for Marketers
 
Android Vs iOS
Android Vs iOSAndroid Vs iOS
Android Vs iOS
 
Android vs. IOS: Comparing features & functions
Android vs. IOS: Comparing features & functionsAndroid vs. IOS: Comparing features & functions
Android vs. IOS: Comparing features & functions
 
Iphone vs android
Iphone vs androidIphone vs android
Iphone vs android
 
Andriod vs iOS
Andriod vs iOSAndriod vs iOS
Andriod vs iOS
 
Android VS IOS
Android VS IOSAndroid VS IOS
Android VS IOS
 
ios vs android.ppt
ios vs android.pptios vs android.ppt
ios vs android.ppt
 
Programing for the iPhone
Programing for the iPhonePrograming for the iPhone
Programing for the iPhone
 
Iphone vs android
Iphone vs androidIphone vs android
Iphone vs android
 
Andriod vs iphone
Andriod vs iphoneAndriod vs iphone
Andriod vs iphone
 
Android vs iOS
Android vs iOSAndroid vs iOS
Android vs iOS
 
Android vs iPhone - Differences in UI Patterns and Design
Android vs iPhone - Differences in UI Patterns and DesignAndroid vs iPhone - Differences in UI Patterns and Design
Android vs iPhone - Differences in UI Patterns and Design
 
Android VS IOS VS Windows Phone
Android VS IOS VS Windows PhoneAndroid VS IOS VS Windows Phone
Android VS IOS VS Windows Phone
 
ppt on android vs iOS
ppt on android vs iOSppt on android vs iOS
ppt on android vs iOS
 
iPhone Seminar Part 1
iPhone Seminar Part  1iPhone Seminar Part  1
iPhone Seminar Part 1
 
"iPhone vs Andriod," Anthony Hand
"iPhone vs Andriod," Anthony Hand"iPhone vs Andriod," Anthony Hand
"iPhone vs Andriod," Anthony Hand
 
IOS Project By Soumyadeep
IOS Project By SoumyadeepIOS Project By Soumyadeep
IOS Project By Soumyadeep
 
Android vs iOS
Android vs iOSAndroid vs iOS
Android vs iOS
 

Similar a Beginning with Basics of iOS Development

Step-by-Step Guide to Developing a Successful iOS App.pdf
Step-by-Step Guide to Developing a Successful iOS App.pdfStep-by-Step Guide to Developing a Successful iOS App.pdf
Step-by-Step Guide to Developing a Successful iOS App.pdfBytes Technolab Inc.
 
Step-by-Step Guide to Developing a Successful iOS App.docx
Step-by-Step Guide to Developing a Successful iOS App.docxStep-by-Step Guide to Developing a Successful iOS App.docx
Step-by-Step Guide to Developing a Successful iOS App.docxBytes Technolab Inc.
 
I phone apps developments interview
I phone apps developments interviewI phone apps developments interview
I phone apps developments interviewPragati Singh
 
Learn How to Get Started with iOS App Development.pptx
Learn How to Get Started with iOS App Development.pptxLearn How to Get Started with iOS App Development.pptx
Learn How to Get Started with iOS App Development.pptx75waytechnologies
 
iOS App Development Presented by Edifyself
iOS App Development Presented by EdifyselfiOS App Development Presented by Edifyself
iOS App Development Presented by EdifyselfEdifyself
 
Developer's got talent iPhone
Developer's got talent iPhoneDeveloper's got talent iPhone
Developer's got talent iPhonePiTechnologies
 
iOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfiOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfJPLoft Solutions
 
IOS app development trends | CDN Mobile Solutions
IOS app development trends | CDN Mobile Solutions IOS app development trends | CDN Mobile Solutions
IOS app development trends | CDN Mobile Solutions CDN Mobile Solutions
 
IOSAPPDevelopment 2011CS010103.pptx
IOSAPPDevelopment 2011CS010103.pptxIOSAPPDevelopment 2011CS010103.pptx
IOSAPPDevelopment 2011CS010103.pptxJiminJimin16
 
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?Pixel Crayons
 
Best iOS Application Development Tools.pdf
Best iOS Application Development Tools.pdfBest iOS Application Development Tools.pdf
Best iOS Application Development Tools.pdfFuGenx Technologies
 
Ios operating system
Ios operating systemIos operating system
Ios operating systemTIB Academy
 
Ios7 130906043745- 2
Ios7 130906043745- 2Ios7 130906043745- 2
Ios7 130906043745- 2Vivek Gautam
 

Similar a Beginning with Basics of iOS Development (20)

Step-by-Step Guide to Developing a Successful iOS App.pdf
Step-by-Step Guide to Developing a Successful iOS App.pdfStep-by-Step Guide to Developing a Successful iOS App.pdf
Step-by-Step Guide to Developing a Successful iOS App.pdf
 
Step-by-Step Guide to Developing a Successful iOS App.docx
Step-by-Step Guide to Developing a Successful iOS App.docxStep-by-Step Guide to Developing a Successful iOS App.docx
Step-by-Step Guide to Developing a Successful iOS App.docx
 
Ios - Introduction to swift programming
Ios - Introduction to swift programmingIos - Introduction to swift programming
Ios - Introduction to swift programming
 
Apple iOS Documentation
Apple iOS DocumentationApple iOS Documentation
Apple iOS Documentation
 
I phone apps developments interview
I phone apps developments interviewI phone apps developments interview
I phone apps developments interview
 
Learn How to Get Started with iOS App Development.pptx
Learn How to Get Started with iOS App Development.pptxLearn How to Get Started with iOS App Development.pptx
Learn How to Get Started with iOS App Development.pptx
 
iOS
iOSiOS
iOS
 
iOS App Development Presented by Edifyself
iOS App Development Presented by EdifyselfiOS App Development Presented by Edifyself
iOS App Development Presented by Edifyself
 
IOS7
IOS7IOS7
IOS7
 
Developer's got talent iPhone
Developer's got talent iPhoneDeveloper's got talent iPhone
Developer's got talent iPhone
 
I os
I osI os
I os
 
iOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdfiOS Application Development Step by Step to develop an iOS App.pdf
iOS Application Development Step by Step to develop an iOS App.pdf
 
IOS app development trends | CDN Mobile Solutions
IOS app development trends | CDN Mobile Solutions IOS app development trends | CDN Mobile Solutions
IOS app development trends | CDN Mobile Solutions
 
Android & IOS
Android & IOSAndroid & IOS
Android & IOS
 
MSR iOS Tranining
MSR iOS TraniningMSR iOS Tranining
MSR iOS Tranining
 
IOSAPPDevelopment 2011CS010103.pptx
IOSAPPDevelopment 2011CS010103.pptxIOSAPPDevelopment 2011CS010103.pptx
IOSAPPDevelopment 2011CS010103.pptx
 
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?
iOS 15 Is Upon Us: What New Can Apple Lovers Expect in iOS 15 Features?
 
Best iOS Application Development Tools.pdf
Best iOS Application Development Tools.pdfBest iOS Application Development Tools.pdf
Best iOS Application Development Tools.pdf
 
Ios operating system
Ios operating systemIos operating system
Ios operating system
 
Ios7 130906043745- 2
Ios7 130906043745- 2Ios7 130906043745- 2
Ios7 130906043745- 2
 

Más de Softweb Solutions

Sitecore 9 Pre-Migration Assessment
Sitecore 9 Pre-Migration AssessmentSitecore 9 Pre-Migration Assessment
Sitecore 9 Pre-Migration AssessmentSoftweb Solutions
 
Enterprise Sales App with Salesforce Integration - Softweb Solutions
Enterprise Sales App with Salesforce Integration - Softweb SolutionsEnterprise Sales App with Salesforce Integration - Softweb Solutions
Enterprise Sales App with Salesforce Integration - Softweb SolutionsSoftweb Solutions
 
How Salesforce FSL is redefining field service operations
How Salesforce FSL is redefining field service operationsHow Salesforce FSL is redefining field service operations
How Salesforce FSL is redefining field service operationsSoftweb Solutions
 
Salesforce integration with ERP
Salesforce integration with ERPSalesforce integration with ERP
Salesforce integration with ERPSoftweb Solutions
 
A complete Salesforce implementation guide on how to implement Salesforce
A complete Salesforce implementation guide on how to implement SalesforceA complete Salesforce implementation guide on how to implement Salesforce
A complete Salesforce implementation guide on how to implement SalesforceSoftweb Solutions
 
How cognitive services can be used in various industries
How cognitive services can be used in various industriesHow cognitive services can be used in various industries
How cognitive services can be used in various industriesSoftweb Solutions
 
5 jobs where bots will replace humans
5 jobs where bots will replace humans5 jobs where bots will replace humans
5 jobs where bots will replace humansSoftweb Solutions
 
How Amazon Echo can be helpful for the healthcare industry
How Amazon Echo can be helpful for the healthcare industryHow Amazon Echo can be helpful for the healthcare industry
How Amazon Echo can be helpful for the healthcare industrySoftweb Solutions
 
Top 8 questions to ask to an IoT platform provider
Top 8 questions to ask to an IoT platform providerTop 8 questions to ask to an IoT platform provider
Top 8 questions to ask to an IoT platform providerSoftweb Solutions
 
Deep Dive into Service Design
Deep Dive into Service DesignDeep Dive into Service Design
Deep Dive into Service DesignSoftweb Solutions
 
Leverage IoT to Setup Smart Manufacturing Solutions
Leverage IoT to Setup Smart Manufacturing SolutionsLeverage IoT to Setup Smart Manufacturing Solutions
Leverage IoT to Setup Smart Manufacturing SolutionsSoftweb Solutions
 
Big Data in Action : Operations, Analytics and more
Big Data in Action : Operations, Analytics and moreBig Data in Action : Operations, Analytics and more
Big Data in Action : Operations, Analytics and moreSoftweb Solutions
 
Sensors, Wearables and Internet of Things - The Dawn of the Smart Era
Sensors, Wearables and Internet of Things - The Dawn of the Smart EraSensors, Wearables and Internet of Things - The Dawn of the Smart Era
Sensors, Wearables and Internet of Things - The Dawn of the Smart EraSoftweb Solutions
 
Secure and scalable motioning solution with aws
Secure and scalable motioning solution with awsSecure and scalable motioning solution with aws
Secure and scalable motioning solution with awsSoftweb Solutions
 
How enterprise can benefit from internet of things
How enterprise can benefit from internet of thingsHow enterprise can benefit from internet of things
How enterprise can benefit from internet of thingsSoftweb Solutions
 
Enterprise Mobility Solutions for Manufacturing Industry
Enterprise Mobility Solutions for Manufacturing IndustryEnterprise Mobility Solutions for Manufacturing Industry
Enterprise Mobility Solutions for Manufacturing IndustrySoftweb Solutions
 
Noti-fi Android App at Softweb Hackthon 2014
Noti-fi Android App at Softweb Hackthon 2014Noti-fi Android App at Softweb Hackthon 2014
Noti-fi Android App at Softweb Hackthon 2014Softweb Solutions
 
Song Sharing with Nodejs - Softweb Hackathon 2014
Song Sharing with Nodejs - Softweb Hackathon 2014Song Sharing with Nodejs - Softweb Hackathon 2014
Song Sharing with Nodejs - Softweb Hackathon 2014Softweb Solutions
 
Tracking Application - Softweb Hackathon 2014
Tracking Application - Softweb Hackathon 2014Tracking Application - Softweb Hackathon 2014
Tracking Application - Softweb Hackathon 2014Softweb Solutions
 
Beacon applications - Softweb Hackathon 2014
Beacon applications - Softweb Hackathon 2014Beacon applications - Softweb Hackathon 2014
Beacon applications - Softweb Hackathon 2014Softweb Solutions
 

Más de Softweb Solutions (20)

Sitecore 9 Pre-Migration Assessment
Sitecore 9 Pre-Migration AssessmentSitecore 9 Pre-Migration Assessment
Sitecore 9 Pre-Migration Assessment
 
Enterprise Sales App with Salesforce Integration - Softweb Solutions
Enterprise Sales App with Salesforce Integration - Softweb SolutionsEnterprise Sales App with Salesforce Integration - Softweb Solutions
Enterprise Sales App with Salesforce Integration - Softweb Solutions
 
How Salesforce FSL is redefining field service operations
How Salesforce FSL is redefining field service operationsHow Salesforce FSL is redefining field service operations
How Salesforce FSL is redefining field service operations
 
Salesforce integration with ERP
Salesforce integration with ERPSalesforce integration with ERP
Salesforce integration with ERP
 
A complete Salesforce implementation guide on how to implement Salesforce
A complete Salesforce implementation guide on how to implement SalesforceA complete Salesforce implementation guide on how to implement Salesforce
A complete Salesforce implementation guide on how to implement Salesforce
 
How cognitive services can be used in various industries
How cognitive services can be used in various industriesHow cognitive services can be used in various industries
How cognitive services can be used in various industries
 
5 jobs where bots will replace humans
5 jobs where bots will replace humans5 jobs where bots will replace humans
5 jobs where bots will replace humans
 
How Amazon Echo can be helpful for the healthcare industry
How Amazon Echo can be helpful for the healthcare industryHow Amazon Echo can be helpful for the healthcare industry
How Amazon Echo can be helpful for the healthcare industry
 
Top 8 questions to ask to an IoT platform provider
Top 8 questions to ask to an IoT platform providerTop 8 questions to ask to an IoT platform provider
Top 8 questions to ask to an IoT platform provider
 
Deep Dive into Service Design
Deep Dive into Service DesignDeep Dive into Service Design
Deep Dive into Service Design
 
Leverage IoT to Setup Smart Manufacturing Solutions
Leverage IoT to Setup Smart Manufacturing SolutionsLeverage IoT to Setup Smart Manufacturing Solutions
Leverage IoT to Setup Smart Manufacturing Solutions
 
Big Data in Action : Operations, Analytics and more
Big Data in Action : Operations, Analytics and moreBig Data in Action : Operations, Analytics and more
Big Data in Action : Operations, Analytics and more
 
Sensors, Wearables and Internet of Things - The Dawn of the Smart Era
Sensors, Wearables and Internet of Things - The Dawn of the Smart EraSensors, Wearables and Internet of Things - The Dawn of the Smart Era
Sensors, Wearables and Internet of Things - The Dawn of the Smart Era
 
Secure and scalable motioning solution with aws
Secure and scalable motioning solution with awsSecure and scalable motioning solution with aws
Secure and scalable motioning solution with aws
 
How enterprise can benefit from internet of things
How enterprise can benefit from internet of thingsHow enterprise can benefit from internet of things
How enterprise can benefit from internet of things
 
Enterprise Mobility Solutions for Manufacturing Industry
Enterprise Mobility Solutions for Manufacturing IndustryEnterprise Mobility Solutions for Manufacturing Industry
Enterprise Mobility Solutions for Manufacturing Industry
 
Noti-fi Android App at Softweb Hackthon 2014
Noti-fi Android App at Softweb Hackthon 2014Noti-fi Android App at Softweb Hackthon 2014
Noti-fi Android App at Softweb Hackthon 2014
 
Song Sharing with Nodejs - Softweb Hackathon 2014
Song Sharing with Nodejs - Softweb Hackathon 2014Song Sharing with Nodejs - Softweb Hackathon 2014
Song Sharing with Nodejs - Softweb Hackathon 2014
 
Tracking Application - Softweb Hackathon 2014
Tracking Application - Softweb Hackathon 2014Tracking Application - Softweb Hackathon 2014
Tracking Application - Softweb Hackathon 2014
 
Beacon applications - Softweb Hackathon 2014
Beacon applications - Softweb Hackathon 2014Beacon applications - Softweb Hackathon 2014
Beacon applications - Softweb Hackathon 2014
 

Último

如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书Fir La
 
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCRSapana Sha
 
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书Fir La
 
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书Fir La
 
Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024CollectiveMining1
 
The Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityThe Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityJohanAspro
 
WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024Hector Del Castillo, CPM, CPMM
 
Basic Accountants in|TaxlinkConcept.pdf
Basic  Accountants in|TaxlinkConcept.pdfBasic  Accountants in|TaxlinkConcept.pdf
Basic Accountants in|TaxlinkConcept.pdftaxlinkcpa
 
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd
 
No 1 AMil Baba In Islamabad No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...
No 1 AMil Baba In Islamabad  No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...No 1 AMil Baba In Islamabad  No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...
No 1 AMil Baba In Islamabad No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...First NO1 World Amil baba in Faisalabad
 
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...Kumaran637735
 
Cyberagent_For New Investors_EN_240424.pdf
Cyberagent_For New Investors_EN_240424.pdfCyberagent_For New Investors_EN_240424.pdf
Cyberagent_For New Investors_EN_240424.pdfCyberAgent, Inc.
 

Último (20)

如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
如何办理东俄勒冈大学毕业证(文凭)EOU学位证书
 
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
9654467111 Low Rate Call Girls In Tughlakabad, Delhi NCR
 
Model Call Girl in Udyog Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Udyog Vihar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Udyog Vihar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Udyog Vihar Delhi reach out to us at 🔝9953056974🔝
 
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
如何办理密苏里大学堪萨斯分校毕业证(文凭)UMKC学位证书
 
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Serviceyoung call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
young call girls in Hauz Khas,🔝 9953056974 🔝 escort Service
 
young call girls in Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
young  call girls in   Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Serviceyoung  call girls in   Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
young call girls in Yamuna Vihar 🔝 9953056974 🔝 Delhi escort Service
 
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
如何办理北卡罗来纳大学教堂山分校毕业证(文凭)UNC学位证书
 
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Serviceyoung Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
young Call girls in Dwarka sector 1🔝 9953056974 🔝 Delhi escort Service
 
Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024Collective Mining | Corporate Presentation - April 2024
Collective Mining | Corporate Presentation - April 2024
 
The Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanityThe Concept of Humanity in Islam and its effects at future of humanity
The Concept of Humanity in Islam and its effects at future of humanity
 
WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024WheelTug PLC Pitch Deck | Investor Insights | April 2024
WheelTug PLC Pitch Deck | Investor Insights | April 2024
 
Basic Accountants in|TaxlinkConcept.pdf
Basic  Accountants in|TaxlinkConcept.pdfBasic  Accountants in|TaxlinkConcept.pdf
Basic Accountants in|TaxlinkConcept.pdf
 
Model Call Girl in Uttam Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Uttam Nagar Delhi reach out to us at 🔝9953056974🔝Model Call Girl in Uttam Nagar Delhi reach out to us at 🔝9953056974🔝
Model Call Girl in Uttam Nagar Delhi reach out to us at 🔝9953056974🔝
 
Call Girls in South Ex⎝⎝9953056974⎝⎝ Escort Delhi NCR
Call Girls in South Ex⎝⎝9953056974⎝⎝ Escort Delhi NCRCall Girls in South Ex⎝⎝9953056974⎝⎝ Escort Delhi NCR
Call Girls in South Ex⎝⎝9953056974⎝⎝ Escort Delhi NCR
 
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
young call girls in Govindpuri 🔝 9953056974 🔝 Delhi escort Service
 
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
Osisko Gold Royalties Ltd - Corporate Presentation, April 23, 2024
 
No 1 AMil Baba In Islamabad No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...
No 1 AMil Baba In Islamabad  No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...No 1 AMil Baba In Islamabad  No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...
No 1 AMil Baba In Islamabad No 1 Amil Baba In Lahore No 1 Amil Baba In Faisl...
 
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
The resilient U.S. late-cycle expansion contributed to a stalling pattern in ...
 
Escort Service Call Girls In Shalimar Bagh, 99530°56974 Delhi NCR
Escort Service Call Girls In Shalimar Bagh, 99530°56974 Delhi NCREscort Service Call Girls In Shalimar Bagh, 99530°56974 Delhi NCR
Escort Service Call Girls In Shalimar Bagh, 99530°56974 Delhi NCR
 
Cyberagent_For New Investors_EN_240424.pdf
Cyberagent_For New Investors_EN_240424.pdfCyberagent_For New Investors_EN_240424.pdf
Cyberagent_For New Investors_EN_240424.pdf
 

Beginning with Basics of iOS Development

  • 1. No. 01/2011 December 2011 www.icodermag.com Beginning with basics of iOS Treading New Waters Storyboard and ARC Top Errors and Risks in iOS The All New iOS 5 Siri – Worth the Hype? Getting Your First App to Market Gets You Paid – It Doesn’t Have To Be Good
  • 2. december 2011 www.icodermag.com Greetings iCoders! Especially for You we started iCoder magazine. First issue is about iOS fundamentals and iOS 5 new features, but don’t think iCoder is only for beginners, everyone interested in Apple mobile operating system programming will find something interesting. Our magazine is made by programmers for programmers, so You will find here a lot of interesting and useful stuff like full articles about iOS programming, tutorials, reviews, app and accessories tests, information about new frameworks and plug-ins for xcode. We’re open for Your feedback and cooperation, so don’t hesitate and write to us if You have any suggestions about iCoder magazine or want to submit an article or any other useful feedback. It’s You who can make iCoder the best magazine about iOS programming in the world. Have a good reading and come back for more. Maciej Michałowski Editor in Chief maciej.michalowski@software.com.pl icoder magazine Production director: Published by: Ałła Zalewska FX Press Sp. z o.o. Sp.K. Postal Address: President: FX Press Sp. z o.o. Sp.K., Ałła Zalewska ul. Bokserska 1, 02-682 Warszawa, Poland alla.zalewska@software.com.pl tel. +48 600 649 676 www.icodermag.com editor in chief: Maciej Michałowski Advertising: maciej.michalowski@software.com.pl alla.zalewska@software.com.pl editors: All trade marks presented in the magazine were used Ewa Zasadzka only for informative purposes. All rights to trade marks Michał Pietruszkiewicz presented in the magazine are reserved by the companies Rafał Przybylski which own them. The FX Press Sp. z o.o. Sp.K. works individually from design and dTP: Apple. The iCoder Magazine team reserves the right Aneta Jones not to be responsible for the topicality, correctness, Eurodesign completeness or quality of the information provided www.euro-design.info by contributors. 2 www.icodermag.com 01/2011
  • 3. conTenTs TuTORIAl beginning with basics of ios 5 Softweb Solutions Inc. Getting Your First App to market Gets You Paid – It doesn’t Have To be Good 8 Ian Marriot IOS API Treading new Waters, storyboard and Arc 13 Li Mengran WHAT’S NEW IN IOS The All new ios 5 22 Manish Nath SECuRITY Top errors and risks in ios – should be addressed by the developers 27 Krzysztof Wołk REvIEW siri – Worth the Hype 31 Alex Allegro 3 www.icodermag.com 01/2011
  • 4.
  • 5. TuTorIAl beginning with basics of ios Softweb Solutions Inc. The author, Softweb Solutions is an ISO 9001:2008 Certified and Microsoft Gold Certified, Chicago- based IT service Provider Company that offers industry specified solutions through its knowledge and expertise. Combining unparalleled experience with the state of the art technical competencies, Softweb Solutions provides outstanding solutions to its global clients. The company offers end to end solutions for Custom Web Application Development, Mobile Application Development, eCommerce Development, Mobile SEO, Rich Internet Application development, Legacy Migration, et al. AbouT Ios The iOS – previously known as iPhone OS is an Operating System of Apple Inc. for all its mobile devices. The iOS is the heart of iPhone, iPad, and iPod Touch de- vices. For designing and developing iOS applications, devel- opers use Xcode and IDE [Apple’s integrated development environment]. Xcode is used to design the user interface of the application as it provides all necessary tools for writing the code for it. After developing the application for iOS, user can run it on iPhone, iPad, Mac, and iPod Touch devices. After the completion of designing and developing the iOS application, it is needed to be submitted to the App Store – the secure market place where iOS users get their applica- tions. Courtesy: developer.apple.com The Operating system - iOS manages the device hardware layers of ios: and provides the technologies that are required to implement native apps. The iOS SDK have all the tools and interfaces that are needed to develop, install, run, and test the native ap- plications. The native apps are physically installed on an Apple device and therefore they are always available to the Apple users, even in the Airplane mode. THe Ios ArcHITecTure The iOS architecture is similar to the basic architecture found in Mac OS X. At the highest level, iOS acts as an intermediary between the underlying hardware and the applications that appear on the screen, as shown in the VersIons HIsTorY oF Ios below figure. The applications we create rarely talk to the Being an early adopter of Mobile Technologies, it is easier underlying hardware directly. Instead, applications com- for Softweb Solutions to explain the whole history of iOS municate with the hardware through a set of well-defined versions. Let us have a look at the gradual development of system interfaces that protect the application from hard- iOS. ware changes. This abstraction makes it easy to write ap- On 29th June, 2007, Apple Inc. released the first version plications that work consistently on devices with different of iOS with the first iPhone. hardware capabilities. On 11th July, 2008, Apple publicly released iPhone OS 5 www.icodermag.com 01/2011
  • 6. beGInnInG WITH bAsIcs oF Ios TuTorIAl 2.0, with later upgrades of version 2.2 available for all mo- buIldInG Ios APPlIcATIon dels. The major release of 2.0 became available with the Before developing a new iOS application, it is important to fa- release of iPhone 3G. miliarize yourself with the basic concepts, fundamental design On 17th June, 2009, iOS version 3.0 was released with patterns and techniques. Basically, iOS assumes that all the upgraded through version 3.1.3. 3.0 version became ava- applications are built using the Model-View-Controller design ilable with the iPhone 3GS. First generation Apple devices pattern. Here we, Softweb Solutions explains the steps to – iPhone and iPod Touch has iOS version 3.1.3. build the simplest application “Hello World”. Later iPad was released with iOS 3.2 version which was specifically designed for the iPad. steps for building “Hello World” application – Later on 21st June, 2010, iOS 4.0 was released available 1] Open Xcode and click File > New Project. Select View-based- only to iPhone 4.0 and iPod Touch. While the second ge- application and click “Choose” button. After choosing, name the neration iPod Touch and iPhone 3G devices have iOS 4.2.1 project as “Hello World” and save it. After saving the project, you as their latest version. The first version to get major equ- will have a template for your Hello World iPhone Project. ivalent features to the iPhone and iPad is iOS 4.2. Later the sequence of iOS 4.2 was continued for the CDMA iPhone 2] Click on “Build and Go” button to run this template appli- and 4.3 was released for other devices as an upgrade. cation which will start an iPhone stimulator. After that clicking On 6th June, 2011, Apple previewed iOS version 5, Ap- on the “Home” button will show you a “Hello World” icon ple TV 4.4 beta, and iOS SDK 5 beta along with iCloud on the iPhone stimulator dashboard. Clicking it again will open beta. This update also introduced iMessage chat feature wi- the application. That is why, iPhone stimulator is considered thin the devices running on iOS 5.0. With iMessage feature, as the best tool to test the application before deployment or users can send messages to other iPhones, iPad, and iPod before submitting the application to the Apple Store. Touch users, so that they don’t have to pay extra for text messages. Other additions made in iOS 5 are – new notification system, Newsstand subscription, integrated Twitter, re- minders application, enhancements to AirPlay, and over 200 other new features. Moreover, it supports all iPad mo- dels, iPhone 3GS, iPhone 4 GSM, iPhone 4 CDMA, iPod Touch – 3rd and 4th generation. This version release has taken iOS to the whole new 3] Now you need to open the Xcode Project and select level. The camera application of this version offers many “HelloWorldViewController.h” file and type the below new in-built useful features like in-built editing feature, lock code inside the interface – screen access to camera, volume up button use for clicking a photo, and others. IBOutlet UITextField *txtUserName; IBOutlet UILabel *lblUserTypedName; APPle – ITunes Also write this method before end of this class iTunes is how users play all their media on their Mac or PC and - (IBAction) submitYourName; add it to their Apple devices. iTunes is a computer program used for media playing, downloading, and organizing any digital music or 4] After you write the above code, your video files on the PC. It is also capable to manage contents on iPod, “HelloWorldViewController.h” file will look like below – iPhone, iPad, and iPod Touch. It’s very simple to use and understand. Search any required me- #import <UIKit/UIKit.h> dia file on iTunes that you are looking for, and sync it with your @interface HelloWorldViewController: Apple device to get it. Basically, iTunes has become the central hub UIViewController { of media world for all the Apple users. IBOutlet UITextField *txtUserName; Originally, iTunes was specifically released as a music store but la- IBOutlet UILabel *lblUserTypedName; ter in the subsequent versions of it, all other type of entertainment } were also supported that includes radio, films, apps, television - (IBAction) submitYourName; shows, and audio books. The purchase history can be also seen by @end clicking the “purchase history” button after opening iTunes. 6 www.icodermag.com 01/2011
  • 7. beGInnInG WITH bAsIcs oF Ios TuTorIAl 5] The next step is to open “HelloWorldViewController.m” Final output of this “Hello World” Application file and type the following method before @end – (IBAction) submitYourName; { lblUserTypedName.text = txtUserName.text; } 6] Design on Interface builder – Open Xcode project and in it “Group and Files”. Looking at bottom you will find “NIB Files” in which you will find two design files for your classes when you expand it. One is MainWindow.xib – main window or entry point to the app and second one is HelloWorldViewController.xib file which is mapped to your controller class. Double click on the second class to open it inside the interface builder. 7] Click on Tools > Library and drag the text field into your View. After this, click on Tools > Inspector and write “Your Name” in the text field. dIFFerence beTWeen THe code For An 8] After typing your name, drag the text field from Library IPHone APPlIcATIon And IPAd APPlIcATIon to your view and also drag another Label inside View. Click on tools then and select “Size Inspector” and also change For iPad the width of the text field to 250. Also change the layout if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceI- center. diomPad) { 9] Last thing to do is to drag a button to the view (19) and WhatIsViewController *VC1 = [[WhatIsViewController alloc] then open Inspector again by selecting Tools > Inspector. initWithNibName:@”What_ipad” bundle:nil]; In the Title, type “Submit”. [self.navigationController pushViewController:VC1 animated:YES]; 10] Map the controller class variable function and methods [VC1 release]; with interface builder. From Interface builder, select “File’s } Owner” and from Tools, select “Connection Inspector”. For iPhone 11] After selecting them, you will see that two new vari- { ables are added in Connection Inspector – txtUserName WhatIsViewController *VC1 = [[WhatIsViewController alloc] and lblUserTypedName. You need to click on txtUser- initWithNibName:@” What_iphone” bundle:nil]; Name radio button and drag it to text field in View. Next [self.navigationController pushViewController:VC1 you need to do same with lblUserTypedName, that is, se- animated:YES]; lect radio button and drag it below label. [VC1 release]; } 12] Last thing you need to do is click on the “submitYour- Name” radio button and drag it to the button and then select touch down from the list. Although we may not be sure what will be next in iOS, be with us to keep in touch with the industry develop- 13] Finally close the interface and open Xcode. Then sim- ments. The authors of this article have taken utmost care ply press “Build and Go” button to run this “Hello World” in disseminating the information here but assume no re- Application. It will open the stimulator in iPhone. sponsibility for any kind of errors. 7 www.icodermag.com 01/2011
  • 8. TuTorIAl Getting Your First App to market Gets You Paid – It doesn’t Have to be Good Ian Marriott Two years ago, I knew as much about making an app as loves a superhero. And everybody seems to love phys- I currently do about the political situation in Sweden, ics based action puzzle games at the moment. I must that is to say, very very little. It’s not that I wasn’t in- be on to a winner. Not only that, but what I’ve got so terested, I had always been an avid gamer, and dreamed far is cool to play. And what’s more, your abilities came up ways in which the current crop of games could be with choices. Protect or Destroy? Hero or Villain? What better, and how I’d do it right if I ever made a game by could possibly go wrong? myself. Then, I was reading a magazine, and came across an article about a game engine that was free, yet power- Turns out I wasn’t as clever as I thought I was (this has ful enough that some pretty big name studios were using been a running theme throughout my adult life). I’d nev- it. I decided to give it a go. That engine was Unity, and er even seen XCode before, and it was a labyrinth that it’s ridiculously flexible, easy to use and, in my opinion, would make David Bowie stop in his tracks and think, the best way to start creating apps for beginners on the “Me and my floating glass balls better leave that place market. (See: “Coding Isn’t What it Used to Be…”). well alone.” Figuring that out took a good couple of days. Thankfully, Unity does a fantastic job of creating One year ago, I lost my job. My partner was pregnant the project files for you, all you have to do is figure with our second child. To say I was motivated to do out the provisioning system. Oh, yes, the provisioning something… anything… to put food on the table would system… (See “Provisionally Provision for Provisioning be an underestimation of the heat that the burning caul- Provisions”) dron of poverty, on fire centimetres beneath me, had created. But what to do? The economic climate didn’t fill Then, despite the fact that I’d gone into iOS develop- me with confidence, but app development did. It seemed ment, I didn’t actually have an iPhone. Or an iPod Touch. like a great passive income stream, the market was (and Or an iPad. Or a Mac (contentious I know, but a virtual still is) expanding extremely quickly and it felt like if machine image on my Windows laptop had to suffice I was ever going to get on board that particular train, I’d for the first 3 apps). I knew the specifications of each better do it before another big company wanted me to device, but didn’t actually have one on which to test. do some extremely tedious things for very little money This was a mistake on so many levels. It was like trying again… I’d spent a bit of time with the engine at this to build a house without foundations. On a lake. Using point, and with what little money I had, stumped up for air. Installing my app on a device was next to impossible, the iOS license for it, alongside joining the iOS devel- I had to visit my brother after he’d returned from work oper program. I decided I was going to make a run at it. just to spend 20 minutes testing to find as many bugs as possible. Then the next day I’d try to fix those bugs, I’d been working on an idea for a couple of months be- but not be able to check for another 2 days whether it fore that, which seemed to be taking shape quite nicely, had worked. Everything I did was a guess. An educated and thought it would be a perfect fit for the iPhone guess, but a guess nonetheless. I’d already spent in ex- market. I was developing a superhero physics action puz- cess of five hundred dollars though, and in the situation zler. The basic premise was good, in my eyes. Everybody I was in, I couldn’t afford to buy a device of my own. 8 www.icodermag.com 01/2011
  • 9. GeTTInG Your FIrsT APP... TuTorIAl Working this way forced me, quickly, to optimise my but I was straight on Facebook telling people to get on code. Everything became ‘hacky’. What started as iTunes. The game was on “New & Noteworthy” lists a smooth 80fps on the computer screen quickly got around the world and got thousands of downloads in its bogged down to one tenth of that on the device. Each first day of sale. My ad revenue came in thick and fast, level had about two hundred rigidbodies in, each collid- and I was seeing an ECPM (earnings per thousand im- ing with at least 2 others.The A4 processor just could pressions) around the hundred dollar mark. This was ex- not cope with what I was throwing at it. I tried to help tremely surprising as all the research I’d done suggested as best I could, cutting down the texture quality, not ten dollars was average. I started to think there might rendering the (originally beautiful) 3D skyline I’d cre- be hope, and that this game was actually good, just not ated. Removing any shader that took up any processing as good as I’d intended so I was disappointed, but good time of statistical significance. Everything that I could enough for the people downloading it. cut out I did. A bastardised version of my original pro- ject emerged, shaking, stuttering to life, and barely func- Once more, I was mistaken. The reviews the game re- tional. It was a horrific mess, and was about as fun to ceived were mediocre, at best. They were accurate and play as “Where’s the Soap” in a prison shower. As each fair, and generally, through what little playing I’d done feature got stripped down, what remained felt like less of my own game, I agreed with them. When I finally got than the sum of its parts. The only thing that worked the chance to play it though, a few things dawned on was the menu system. Without being able to test, me – Firstly, most people download a game from the I’d had to create a User Interface (UI) that worked on description and screenshots that you put into iTunes all screen sizes, dynamically changing to suit the orienta- Connect. They don’t look at reviews, and they rarely tion or resolution of the screen (not that the resolution read past the first four lines of your blurb. No matter ever changed on an iOS device, but you do have to cater how poor an app is, if it looks good, a lot of people for different devices), and this is probably the most use- will download it, which means you’ll get some money ful skill I learned from the entire project. back through the adverts. Second, nobody cares about a good menu system provided it works. They care about At this point, you already know that your product is a playable game. Mine wasn’t playable. This would have simply not up to scratch. You can polish and polish, but to be corrected for the future… and third, but probably it’ll just end up being a shiny turd, so I decided it was quite important, is to make sure that if you have an ad going to have to do. I couldn’t start over, I had to get supported game, make sure the adverts don’t show up a product out there, I needed the money more than upside down, cover half of your level select screen, and I needed artistic credibility, so I wrote the blurb, took randomly appear and disappear. It makes people acci- some screenshots, optimised the keywords and then… dently click on your ads, which generates quite a bit of I had no idea how I was going to make money from it. revenue, but is against the Terms of Service agreement Could I justify charging for a product that was substand- you hold with Apple and makes you look like a scumbag. ard? Of course, for me, the answer to that was a big I swear, in all the tests I’d done, this wasn’t happening… fat “No”. It had to be free. So, the only option was to integrate adverts in the product. This was done quick- Eventually, I had to remove the abomination from the ly (thanks to Prime31 – See: “Making Life Easier”) and app store completely. It wasn’t just bad, it was broken. then it was a case of figuring out Application Loader, and No amount of updating would have fixed it. Now that sending the package for review (See: “Final Hurdles”). I know what I’m doing a little better, I might return to I didn’t know what to expect at all. Judging by what peo- the idea, but it would be a ground up build. The game ple say about the review process, I was in severe doubt had to be put out of it’s misery. But not before I’d gar- as to whether or not my game would be accepted. And nered some information about sales trends on the app from the research I’d done, it was unlikely that I was store (See: “We Consume All That Is New!”). going to make the money back that I’d already spent, let alone an income to live on… Even through all this however, my initial foray into the world of app development was successful. Despite (or per- Fortunately, after two agonising weeks, the game fi- haps because of ) my naivety, it earned me enough money nally got approved. I couldn’t even download it myself, to buy a small range of test devices for my future projects, 9 www.icodermag.com 01/2011
  • 10. GeTTInG Your FIrsT APP... TuTorIAl and fund the development of the next one. It was four but it’s important to set up before you do any testing on further apps down the line that my releases were good an actual device. There are two types of profile that you enough to produce the same kind of figures I’d accidently require, a development profile, for which you need to use stumbled into with my first, and I still have to be prolific specific devices, and a distribution profile for, erm, distri- with my releases to earn a wage. I’ll have had eleven apps bution. released in the first year of being a developer, with at least the same again planned for next year. My baseline To set up a development profile, first you must set up income for these projects, not including the initial sales at least one device on which to test. You need to get spike, works out about a dollar a day, per app. The initial the UDID number of the device, which can be found in sales spike on average buys an iPad. It’s unlikely to make iTunes, or for ease, search “UDID” on the app store and you rich, but as a passive income generator it helps. download one of the free apps from there Go to the iOS development portal and click the “Provisioning Portal” Becoming an app developer has, without a doubt, changed option at the top right, then click “Add Devices” and fill my life for the better. I’d recommend it to anybody with in the form you’re presented with. the drive and determination to keep at it, and make it work for them. Your first forays into the app world prob- Once the device is set up, you need to set up a new “App ably won’t set the world ablaze, and will likely be full of ID”, so in the provisioning portal, click “App ID”, and mistakes, bugs (sorry, features) and plain bad design, but “New App ID”, then fill in the details as shown below: that isn’t what’s important. What matters is getting your app out there in the market, showing you that it can gen- erate some income, regardless of its quality. Put your work out there for the world to see and be proud to say that not only are you learning, but you are doing. And you are getting paid to do it. codInG Isn’T WHAT IT used To be… Unity (http://www.unity3d.com) is the most flexible game engine I’ve ever had the pleasure of using. In terms of 2D games, there are probably better solutions, but with the third party add-ons available through the Unity As- set Store, they won’t be that much better. In terms of 3D engines, it’s not Unreal, but take a look at games like Shadowgun and you’ll see what it’s capable of graphically. From a code based standpoint, you can use C# or Uni- The next step is to create the development provisioning tyScript (a version of JavaScript, so if you’re familiar with profile itself. Click the “Provisioning” tab on the left hand web development you’ll have no trouble picking it up). side, now, in the main box, create a new development You don’t have to worry as much about coding with Unity profile by clicking “New Profile”. A form like this should as you would in practically any other engine, although appear: it’s worth noting that you WILL need to get your head around the basics at least, especially as an Indy where you have to be a Jack of all trades. There are loads of tutorials to help you through this, and a pretty helpful community if you’re not trying to leap in and make the next World of Warcraft without knowing the difference between a rigidbody and a collider. ProVIsIonAllY ProVIsIon Make sure the fields are filled in, your App ID is selected, For ProVIsIonInG ProVIsIons and your testing devices are selected. Your app will only When making an app, provisioning can be an afterthought, work on devices that you have chosen to develop for, and 10 www.icodermag.com 01/2011
  • 11. GeTTInG Your FIrsT APP... TuTorIAl have the UDID’s registered. Submit the form. Now, it may FInAl Hurdles say that your profile is “Pending”. Refresh the page and So, you’ve completed your app and it’s ready to be sent to you will be able to download it. Once downloaded, sim- Apple, but there are a few final hurdles and hoops to jump ply open the file in XCode and it will be ready for use. through. One issue that many people come across is non- Repeat these steps, without the specific devices, under public API use. Don’t do it, they’ll find it and reject your Provisioning>Distribution for your distribution certificate. binary, which means more work for you later and scuppers The final step is to then attach this profile to your app in your release plans. To upload your binary to Apple’s serv- XCode. In the app settings, scroll down to “Code Signing”, ers you’ll need to use Application Loader. Set up the binary and make sure that the signing identity is set as the profile as “Ready for Upload” in iTunes Connect, the run Appli- you just created: cation Loader, select the option to upload your package, choose your app ID from the drop down list and upload your binary (If you haven’t built for archiving in XCode, you’ll need to zip your .app file and send that, otherwise just use the zip file of your app) and hope that you don’t get any failure notices. Any of these that come up are eas- ily fixed in general, just Google the specific issue you get. Your info.plist file might get you into trouble here, make sure that the UIRequiredCapabilities array is correctly set up and that the build settings match (ie, armv6 or armv7 – And that’s it! You should now be able to build your app and I only ever build for armv7 devices now as pre-3gs install it on a device. Testing in the XCode environment iPhones and Generation 2 or lower iPod touches are such works quite well, but if you are using Unity, this will not a small share of the market, and don’t support iAd). be an option. Some people use the Unity Remote, I prefer to install on the device and see how it actually runs. I’ve Once your binary is “Waiting for Review”, you simply learned my lessons the hard way on that one. have to wait. The Apple staff get through the submissions pretty quickly, considering the number they receive. For mAkInG lIFe eAsIer a new app, it takes about ten working days to be approved, Anybody that has had anything to do with Unity will sometimes longer, but not often. For an update, about five know about the plug-ins that can be used, and anybody in working days is average. Then, you’re good to go. Or not. iOS development with Unity will have heard of Prime31 Rejections don’t come about too often if you keep to the (http://www.prime31.com). The plug-ins that this company submission guidelines, but occasionally you’ll have made an have developed are staggeringly useful, priced extremely error that’s slipped through testing, or you’ll be pushing fairly, get customer support in a way that we should all a boundary, or (please god no) you’ll have submitted a fart aspire to and are installed in a huge number of iOS apps, soundboard. When you are rejected, generally you get including every single one of mine. It makes calling native a specific reason for it, which you can then go about in functions on iOS easy (and offered for free), improves on a couple of ways. The first way, you can complain, moan, the inbuilt Unity GUI system (also free), integrates with berate and cry about it, get people’s backs up and make life Facebook and Twitter with about 2 lines of code, uses Ap- harder for you in future. The second is that you can fix the ple’s GameCenter for scores, achievements, turn based problems, whatever they may be, and resubmit your app. and real time multiplayer, integrates adverts through a ton The second way usually works better… of different portals and uses StoreKit for in-app purchas- es. There are multiple other plug-ins that are offered too We consume All THAT Is neW! which increase functionality still further, making what can Apps available on the App Store have an extremely ‘long be a quite complicated and somewhat annoying process tail’. They continue to move a few units every day for a complete breeze. If there’s one company that has allowed months, maybe even years, after release. However, most of me to build a portfolio of apps quickly, it’s Prime31. your downloads (unless you get featured by Apple them- selves, get yourself reviewed or featured on a big site like Toucharcade or TechCrunch, or you invest in a program like FAAD) will come in the first few days of release. This is the graph for downloads of my first release, although 11 www.icodermag.com 01/2011
  • 12. GeTTInG Your FIrsT APP... TuTorIAl due to restrictions in the developer license, specific numbers have had to be removed: As you can see from these daily figures, the first day is the most crucial. I now release my apps on a Friday or Saturday to maximise these effects, as these are also the days where apps gain most impressions from the ad networks, as you can see from this graph of last weeks’ iAd requests (again, numbers removed as we’re prohibited from sharing specifics): About the author: Ian marriott Ian makes apps under the name EyeSix Games (http://www.eyesixgames.co.uk), his latest release is Calm 2 It makes sense here that in order to maximise profitability you (http://itunes.apple.com/us/app/ have to up that original spike as much as possible. Not only calm-2/id484539101?ls=1&mt=8) does this mean more initial downloads, but as there are less and can be followed @EyeSix releases at a weekend it means you get a higher chart placing, on Twitter. Sometimes he puts which in turn means you’re higher on the search results and pictures at a slight angle just gives the user a greater chance of finding your app. to annoy people. 12 www.icodermag.com 01/2011
  • 13. ios API Treading new Waters, storyboard and Arc Li Mengran iOS 5 and Xcode 4 have recently been released, with many exciting new features such as storyboards, Automatic Reference Counting (ARC), GLKit, Core Image, iCloud and Twitter integration. For a complete reference, it’s better to read Apple’s release notes. However, that can be overwhelming and intimidating for a starting point, if one wants to quickly try out the shiny new toys. Therefore, like many others, I love reading hands-on tutorials and writing some test pro jects before reading the release notes. Having enjoyed a lot of good tutorials from the developer community in the past, I think I should pay back the community by contributing a simple tutorial. 1. InTroducTIon tions Use Storyboard and Use Automatic Reference This tutorial familiarizes you with two new features of IOS 5, Counting, as shown in Fig. 1; the first one for obvious storyboard and ARC, by going through example projects step reasons, the second one for ease of coding. by step. Along the way, we’ll also introduce some new handy shortcuts brought by Xcode 4. 2. sTorYboArd Storyboard is a much improved interface builder and a lot more. It eliminates for us a lot of hassles in interface design, especially transitions between different views. There are new two concepts introduced with story- board, scene and segue. A scene is a UIViewController Figure 1: New Project that manages all the contents in one screen, and a segue is a transition between two scenes. After we finish with the project creation wizard, take a look Usually an app only requires one storyboard, in which we at the Project Navigator on the left of the screen, as can draw all the scenes for our app and link them by segues, shown in Fig. 2. It should be opened by default. If not, you in a simple and intuitive manner. Finally we have a tool that lets can open the project navigator by going from the top menu us manage all the visual aspects of our programs seamlessly View g Navigators g Show Project Navigator. in one place. Unfortunately these shiny new features are only Notice the highlighted storyboard file there. Instead of the available on iOS 5. .nib file, we work with this file to draw our interfaces. Now In this section we’ll give a simple tutorial on storyboard click on this file to open it in the interface builder. and show some of the new shortcuts in interface building brought by Xcode 4. 2.1 first example In our first example, we are going to create an iPhone app with two views that can pass data strings to each other. Let’s begin by going from the top menu File g New g New Project, then select Single View Application. Select iPhone in the Device Family, and name our project as ”StoryBoardDemo”, and make sure to check the two op- Figure 2: Project Navigator 13 www.icodermag.com 01/2011
  • 14. TreAdInG neW WATers, ios API sTorYboArd And Arc You should see a blank view created by the wizard, as shown • Hold the control key and drag the Text Field to in Fig. 3. This controller class for this view is ViewCon- ViewController.h, in between the start and end of troller, implemented in the files ViewController.h and the interface definition, as shown in Fig. 4. ViewController.m, which are created by the wizard. We • A small window should pop up as shown in Fig. 5. Let’s call ViewController a scene in our storyboard. We can set the name to be ”textField” and make sure you zoom in or out by right clicking on a blank area and selecting change the storage option to strong. We won’t the appropriate option. explain why we need to set it this way in this section, Notice the arrow from nowhere pointing at this scene. but one simple rule of thumb is that if you would It indicates the fact that this is the initial scene, the scene declare this IBOutlet as retain before IOS 4, that immediately shows up when we start our application. It is you need to set its storage option to strong. very important to set the initial scene. In this example, the • Click Connect. wizard automatically sets it for us. However, if you are starting • Do the same for the Label and name it ”outputLabel”. from other templates, you may need to set it manually. You can do that in three steps: • Click on a scene to select it. • Open the attributes inspector by going from top menu View g Utilities g Show Attributes Inspector. • Check the option Is Initial View Controller. Figure 4: Assistant Editor1 Figure 3: Initial Scene Drag from the object library to the initial scene a Text Field, a Round Rect Button and a Label. Double click on the button and change its text to ”Switch To New View”. We’ll be using the Text Field to collect some user input, and the Label to display some string passed by the other Figure 5: Assistant Editor2 view which we are going to create in a short while. Therefore we need to hook up the Text Field and La- This should add the following two proper- bel to some IBOutlet in ViewController. we now show ties in ViewController.h and synthesize them in how to do it with a cool new shortcut brought by Xcode 4. ViewController.m, in addition to hooking them up to the right parts. • Go from top menu View g Assistant Editor g Show Assistant Editor to open the assistant editor. @property (strong, nonatomic) IBOutlet By default, you should see the editor and assistant UITextField *textField; editor opened side by side, and ViewController.h @property (strong, nonatomic) IBOutlet is automatically opened in the assistant editor window. UILabel *outputLabel; 14 www.icodermag.com 01/2011
  • 15. TreAdInG neW WATers, ios API sTorYboArd And Arc That’s pretty neat, isn’t it. Now close the assistant editor File, then select UIViewController subclass, and then by clicking on the cross button in the top right corner of give it the name NewVewController. When you are pre- its window. sented with the options, remember to uncheck Targeted Right now the onscreen keyboard doesn’t retract when for iPad and With XIB for user interface. we finish entering in the Text Field. We have to write an IBAction handler to do that. Open the storyboard in the editor by clicking it in the Add the following definition in ViewController.h: Project Navigator. Click on the new View Controller to select it. Open the Identity Inspector by going from - (IBAction)textFieldReturn:(id)sender; top menu View g Utilities g Show Identity In- Add the following method body in ViewController.m: spector. In the Custom Class tab in Identity Inspec- - (IBAction)textFieldReturn:(id)sender tor, open the class drop down menu as shown in Figure. 7, { and select NewViewController. [sender resignFirstResponder]; } Basically this handler asks the first responder, in this case the onscreen keyboard to retract. Open the storyboard and click on the Text Field to select it. Open the Connections Inspector by going from top menu View g Utilities g Show Connections Inspector. In the Sent Events tab, while holding the con- trol key, drag from the circle to the right of Did End On Exit to the View Controller button at the bottom as shown in Fig. 6. A small black window should popup with only one option textFieldReturn. Select it should work as we want now. Figure 7: New View Controller Identity Draw a Text Field, Round Rect Button and Label on the new View Controller in a similar fashion as our original View Controller. Change the text on the button to ”Switch To Old View”. Also remember to make the onscreen keyboard for the new Text Field retract in a similar manner. Hook the Text Field to the property textField and Label to the property outputLabel in NewViewCon- troller in a similar fashion as the original view. Now is the time to create the segue! While holding the control key, drag the button in the original View Control- ler to the new View Controller, as shown in Fig. 8. Figure 6: Text Field Return Drag a View Controller from the object library to the storyboard. We need to create a new class for this new View Controller. Right click on the StoryBoardDemo group and select New Figure 8: Create Segue 1 15 www.icodermag.com 01/2011
  • 16. TreAdInG neW WATers, ios API sTorYboArd And Arc A small black window with three options should pop up, needed to create another segue from the new View Con- as shown in Fig. 9. Select modal from the options. The troller to the old View Controller. This doesn’t work, modal style segue is such that the new screen completely because every time a segue is invoked to transition from blocks the underlying screen, with which the user cannot a source View Controller to a destination View Con- interact until the screen on top is closed. The push style troller, it actually creates a new instance of the destina- segue is only for view controllers embedded in UINaviga- tion View Controller. Instead of going back to the source tionControllers or UITabBarControllers. If we use it here, scene, the segue I envisaged would just go to a new instance it doesn’t work. of the source scene. There is no ”reverse” segue per se. In order to go back, we need to close the new scene. Add the following IBAction handler definition in NewViewController.h. - (IBAction)buttonPress:(id)sender; Figure 9: Create Segue 2 Add the following IBAction handler implementation in You should see something like this in your storyboard, NewViewController.m. as shown in Fig. 10. - (IBAction)buttonPress:(id)sender{ [self dismissViewControllerAnimated:YES completion:nil]; } The dismissViewControllerAnimated:completion: method is new in iOS 5. It is different from the old method dismissModalViewControllerAnimated: in that it has an additional parameter, which is a block, that gives us the ability to execute additional code after the dismissal of the screen. The old method still works in IOS 5. Open the storyboard. Click on the button in the new Figure 10: Segue Created View Controller to select it, then while holding control key, drag it to the New View Controller button at the Notice the arrow with knot connecting the original View bottom, as shown in Fig. 11. Controller and the new View Controller. That repre- sents the segue. Select the segue by clicking on the knot. Open the Attributes Inspector. Set the identifier of the segue to ”OldToNew”. Note that we can also change the transition animation for this segue in the Attributes Inspec- tor. There are four types of transitions provided by UIKit, which we can subclass to customize. They are Cover Ver- tical, Flip Horizontal, Cross Dissolve and Par- tial Curve. By default, the transition for modal style seg- ue is Cover Vertical, which slides the destination scene vertically upwards to cover the source scene. Now we can already compile and see the transition to the new View Controller. Notice the convenience that this is done without having to write an IBAction handler for the button touch down event. However, there is no way to go back to the original screen yet. The first time I’ve tried Storyboard, I though I just Figure 11: Button Press 1 16 www.icodermag.com 01/2011
  • 17. TreAdInG neW WATers, ios API sTorYboArd And Arc Select buttonPress from the small black window that prepareForSegue:sender: to the following: pops up. Compile and run it; now pressing the button in the new scene should bring us back to the original. - (void)prepareForSegue:(UIStoryboardSegue *) segue sender:(id)sender{ Next we want to pass the string entered in the Text Field if([[segue identifier] isEqualToString: in the original View Controller to the new one and dis- @”OldToNew”]){ play it in the new one’s Label. We do this by importing NewViewController *nvc = (NewViewController *) NewViewController.h in ViewController.h, and imple- segue.destinationViewController; menting the method prepareForSegue:sender:, which nvc.msg = self.textField.text; is called by the system when the transition happens. } One initial try of the implementation is as follows: } - (void)prepareForSegue:(UIStoryboardSegue *) Uncomment the method viewDidLoad in segue sender:(id)sender{ NewViewController.m and change it to: if([[segue identifier] isEqualToString:@”OldToNew”]){ - (void)viewDidLoad NewViewController *nvc = (NewViewController *) { segue.destinationViewController; [super viewDidLoad]; nvc.outputLabel.text = self.textField.text; self.outputLabel.text = self.msg; } } } Now the string in the Text Field from the original view The idea here is to first check if it is the segue we want can be successfully displayed in the destination view. You to deal with by matching its identifier, then get a reference can try it to convince yourself. To pass back data from the to the destination View Controller, and set the text of destination View Controller to the original View Con- its outputLabel to the text in the Text Field of the troller, we need to add a protocol and delegate. original View Controller. However, this will not work, not because the text prop- Add in the definition for protocol NewViewControllerDel erty of the outputLabel is not set. The reason is that and the property delegate in NewViewController.h, so the method prepareForSegue:sender: is called after that NewViewController.h becomes the following: the creation of the instance of New View Controller, but before the loading of its view. As a result, when the #import <UIKit/UIKit.h> view of New View Controller loads, it overwrites the text property of outputLabel by the value we set in the story- @class NewViewController; board. One way to overcome this is to add to New View Con- @protocol NewViewControllerDel <NSObject> troller a new property that is not changed in the view - (void)newViewControllerClose: loading process, pass the value to that property and then (NewViewController*)controller; update the view in the viewDidLoad method of New View @end Controller. @interface NewViewController : UIViewController Add the following property definition in @property (strong, nonatomic) IBOutlet UIText- NewViewController.h: Field *textField; @property (strong, nonatomic) IBOutlet UILabel @property (strong, nonatomic) NSString *msg; *outputLabel; @property (strong, nonatomic) NSString *msg; Synthesize it as follows in NewViewController.m: @property (weak, nonatomic) id <NewViewCon- trollerDel> delegate; @synthesize msg; - (IBAction)buttonPress:(id)sender; - (IBAction)textFieldReturn:(id)sender; Change the implementation for the method @end 17 www.icodermag.com 01/2011
  • 18. TreAdInG neW WATers, ios API sTorYboArd And Arc Note that it is customary to pass the reference of the ob- to tell the destination View Controller that the source ject calling the delegate function as the first parameter so View Controller is its delegate, like follows: that the delegate always knows who calls it. Usually this one parameter is enough, since we could pass messages to - (void)prepareForSegue:(UIStoryboardSegue *) the delegating object to retrieve whatever information segue sender:(id)sender{ we want. if([[segue identifier] Synthesize the property delegate in NewViewController.m isEqualToString:@”OldToNew”]){ as follows: NewViewController *nvc = (NewViewController *) segue.destinationViewController; @synthesize delegate; nvc.msg = self.textField.text; nvc.delegate = self; Note that the storage qualifier for property ”delegate” } is set to weak so as to avoid retain cycles, which we will } talk about later. Add in a line in the buttonPress method of NewView- Now the code should work as we want. Compile and run Controller to call the delegate method, like the following: it. Fig. 12 shows five screens. - (IBAction)buttonPress:(id)sender{ From top to bottom, left to right, the first screen is what [self.delegate newViewControllerClose:self]; we should see when we start the app; the second is after [self dismissViewControllerAnimated:YES we have entered the message ”hello world” in the Text completion:nil]; Field; the third one is after we click on the button and } transition to the new scene, where the message we’ve passed from the original scene is displayed below the but- Declare that ViewController now implements the ton; the fourth one is after we’ve entered the message protocol NewViewControllerDel in ViewController.h ”hello back” in the Text Field in the new scene; the last so that it is now the following: one is after we close the new scene, go back to the original scene and display the message passed from the new scene #import <UIKit/UIKit.h> below the button. #import “NewViewController.h” 2.2 Important Points To Take note @interface ViewController : UIViewController • Always remember to set an initial scene. It’s <NewViewControllerDel>; automatically set to be the default View Controller @property (strong, nonatomic) IBOutlet UIText- when you start with a single view project template. Field *textField; Should you start from some other template, e.g. the @property (strong, nonatomic) IBOutlet UILabel empty project template, you need to do it manually. *outputLabel; - (IBAction)textFieldReturn:(id)sender; • Segue always creates a new instance of the destination @end View Controller. Consequently it is not possible to create a ”reverse” segue, i.e. a segue that transitions Implement the protocol method NewViewController- back to the source View Controller. You have to do Close in ViewController.m like follows: it through delegate. - (void)newViewControllerClose: • Implement the prepareForSegue:sender: method (NewViewController*)controller; to pass data to the destination View Controller. { This method is called after the instance of the self.outputLabel.text = controller.textField. destination View Controller is created, but before its text; view is loaded. } • The push style segue is only used for scenes embedded Add in a line in the method prepareForSegue:sender: in UINavigationControllers or UITabBarControllers. 18 www.icodermag.com 01/2011
  • 19. TreAdInG neW WATers, ios API sTorYboArd And Arc • We need to give each segue an identifier in order to this part into two subsections; the first one on how ARC differentiate between them. This identifier must be works, second one on interoperability with legacy code. unique in the scope of the source View Controller. That means different scenes may have segues sharing the 3.1 How Arc works same identifier. You need to enable ARC for it to work. You can do that when you start a new project, where the wizard presents 3. Arc, more subTle THAn IT seems you the option of enabling ARC, as shown in the previous The traditional IOS memory management model is all section. Checking that option enables ARC for the entire about the reference count, i.e. the number of references project. to an object from the other active objects in a lifecycle. The creator of the object has a reference to it; the other Basically ARC works by adding code at compile time to objects can increase the number of references to it if they ensure that objects live only as long as necessary, by adding call its retain method. The other objects can decrease retain, release and autorelease at appropriate plac- the reference count of the object in question by calling its es automatically. For example, below is code snippet for release method, to a non-negative number. They do it af- a typical object creation. ter they are done with the object. An object with zero ref- erence count in the end of the lifecycle will be deallocated. NSObject *obj = [[NSObject alloc] init]; However, if the creator of the object returns the object by // some code block a method, retain and release alone will not get us the behavious we want. Calling release on it will destroy it If obj is no longer used after some code block, the com- before the caller of the method could get it as the return piler automatically adds the invocation of the release value. On the other hand, not calling release on it before method on obj after the code block. If the obj is returned, we exit the method scope will cause memory leak. In this the compiler automatically adds the invocation of the au- case we call the method autorelease on the object, put- torelease method on obj. If we get reference to an au- ting it into an autorelease pool, which when destroyed by toreleased object like luckyNumArr in the following code, the system, will decrement the object’s reference count and later need to use it, the compiler can detect it and add by one. Great care has to be taken in order not to leak the call to retain method. memory, or create dangling pointers. Automatic Reference Counting, as its name suggests, luckyNumArr = [NSArray arrayWithObjects:tempArr is a feature that automatically counts the reference to an count:luckyCount]; object in our code and add the retain and release calls to it appropriately so that we humans do not have to both- The automatic deduction power of the compiler is pretty er any more. That sounds very nice, isn’t it. When I first powerful, but not always reliable. In particular, it does not heard about Automatic Reference Counting (ARC), I felt guard against retain cycle, which happens when for instance that it was too good to be true. Reading the release notes object A retains object B and object B retains A, resulting in details confirms my suspicion. There is no free lunch in a cycle of reference, preventing both objects from being in this world. To be fair, ARC does simplify a lot of work, deallocated. and I believe they will make it much better in the future. We can provide hints to the compiler by preceding our However, there are a lot of subtleties we have to take into property and variable declarations with lifetime quali- consideration, in order to make the best out of ARC and fiers. avoid ugly mistakes. • For properties, we have the qualifiers strong and In this section we will not develop any example apps, weak. We assign the qualifier strong to objects we as code snippets suffice for demonstration. Before you want to own, just as we assign retain when ARC is start to try ARC, make sure you at least have XCode 4 on disabled. The qualifier weak is like the qualifier assign Snow Leopard, because although ARC is mostly a compile- when ARC is disabled, except that when this property time trick, it does require some runtime support. You can is deallocated, the property value is set to nil, instead only target IOS 4 and above for IOS, or Snow Leopard and of remaining as a dangling pointer.Note that zeroing above for OSX. Besides, you need Xcode 4 in Lion to de- weak references only work on IOS 5 and above for velop apps with ARC enabled for Snow Leopard. We divide IOS, Lion and above for OSX. 19 www.icodermag.com 01/2011
  • 20. TreAdInG neW WATers, ios API sTorYboArd And Arc retain, assign and copy qualifiers cannot be used with – ( __bridge_transfer T) p does the cast and ARC. Remember that we assign the qualifier strong to decrement the CFRef by 1. the Iboutlets in the storyboard section? The pattern – ( __bridge_retained T) p does the cast and we should typically adopt for the Iboutlets is that increment the CFRef by 1. they are all set to weak, except for those from File’s Owner to top-level objects in a nib file or a storyboard • We cannot use NSAutoreleasePool objects. Instead scene, which are set to strong. we should embed the codes benefitting from the autorelease pool in an @autoreleasepool block • For variables, we have the following qualifiers: like this: – __strong is the default qualifier if we do not specify @autoreleasepool{ anything. It means that we intend to own the object //code benefitting from the pool in question. } – __weak specifies a zeroing weak reference to an object. According to Apple, this is more efficient than using – __unsafe_unretained specifies weak reference to NSAutoreleasePool. an object that leaves the pointer dangling after it has been deallocated. There are some pitfalls we need to avoid. – __autoreleasing is used for arguments passed by reference id* and autoreleased on return. • We need to be careful when using __weak variables on the stack, as they are immediately released when there Besides the new qualifiers, ARC also introduces new rules. is no strong reference to it. For instance, consider the We list the more relevant rules here: following code snippet: • In order not to mess up ARC’s deduction algorithm, we NSArray __weak *list=[NSArray arrayWithObject cannot explicitly invoke dealloc, retain, release, s:@”Tom”,@”Jerry”,nil]; retainCount or autorelease. Neither can we try to [self displayList:list]; surreptitiously invoke them through selectors like @selector(retain). Although list is used after the assignment, there is no strong reference to it. Therefore it is immediately deallo- We may implement a dealloc method to manage cated, and the method displayList: will display nothing resources. since list will be set to nil before invoking display- List:. • We cannot use the foundation functions NSAllocateObject or NSDeallocateObject. • We also have to ensure that an object passed by reference have the same lifetime qualifier as the • We cannot use object pointers in C structures. corresponding argument declaration. For example, • We cannot casually cast between id and void *. if we have the following code snippet: We need to use the following three bridging casts to inform ARC about the ownership of the object OperationInfo *info = nil; in question: __bridge, __bridge _transfer, and BOOL OK = [myObject __bridge _retained. The latter two should only be doOperationWithInfo:&info]; used when dealing with toll-free bridged Core if(!OK){ Foundation objects where we would normally have // blah blah blah to call cFretain and/or cFrelease to manage the // ... lifetime of Core Foundation objects. It works and info is implicitly declared to be strong. Now – ( __bridge T) p casts p to the type T with no if the method declaration of doOperationWithInfo: operation at all. No ownership is transferred. is the following: 20 www.icodermag.com 01/2011
  • 21. TreAdInG neW WATers, ios API sTorYboArd And Arc -(BOOL)doOperationWithInfo:(OperationInfo * have a graph of objects, we would like to have within it __autoreleasing *)info; a spanning tree, i.e. a strict parent-child hierarchy, where we set the reference from parent to child as strong and Then there is a mismatch between the lifetime qualifier child to parent as weak. This usually does the trick. of info and the argument to the method doOperation- WithInfo:. In this case, the compiler rewrites the code 3.2 Interoperability into: ARC can work on a file by file basis, meaning we could have files with ARC disabled in an ARC enabled project. We OperationInfo __strong *info = nil; can enable ARC using the new -fobjc-arc compiler flag. OperationInfo __autoreleasing *tmp = info; In a project where ARC is enabled by default, we can dis- BOOL OK = [myObject able ARC for a specific file using the new -fno-objc-arc doOperationWithInfo:&tmp]; compiler flag. One more thing to take note when we want info = tmp; a mixture of ARC enabled and disabled files is that we can if(!OK){ not give a property a name that begins with new. // blah blah blah // ... 4 conclusIon I hope this simple tutorial can help you start having fun This would create an unnecessary temporary variable. with the shiny new toys! We can rectify this by changing the type of the argument to the method doOperationWithInfo: to id __strong About the author: * or declare the variable info as __autoreleasing. li mengran • We need to carefully manage the lifetime qualifiers in The author is currently a PHD student order to avoid having a strong reference cycle, which in the National University of Singapore. is the same thing as the old retain cycle. When we Figure 12: Result 21 www.icodermag.com 01/2011
  • 22. WHAT’s neW In ios The All new ios 5 Manish Nath Icloud sTorAGe APIs The contents of the block are enclosed by curly braces, Using the iCloud storage APIs as shown in the following example: a user can view or edit those documents from any device with- @autoreleasepool out having to sync or transfer { files explicitly. Storing documents // Your code here in a user’s iCloud account also provides a layer of secu- } rity for that user. With the new iCloud storage loosing your device does not mean that you loose your data. A storyboard file captures your entire user interface in There are two ways that applications can take advantage one place and lets you define both the individual view of iCloud storage, each of which has a different intended controllers and the transitions between those view con- usage: trollers. Storyboards capture the flow of your overall user interface. • iCloud document storage – Use this feature to store If you are creating new applications, the Xcode templates user documents and data in the user’s iCloud account. come preconfigured to use storyboards. For other applica- tions, the process for using storyboards is as follows: • iCloud key-value data storage – Use this feature to share small amounts of data among instances of your 1. Configure your application’s Info.plist file to use application. storyboards: AuTomATIc reFerence counTInG • Add the UIMainStoryboardFile key and set its value to Automatic Reference Counting (ARC) is a feature built the name of your storyboard file. to simplify the process of managingthe lifetimes of Objective-C objects. ARC evaluates the lifetime require- • Remove the existing NSMainNibFile key. (Storyboards ments of your objects and automatically inserts the ap- replace the main nib file.) propriate method calls at compile time. 2. Create and configure the storyboard file in Xcode Some Restrictions with ARC : cusTomIze nATIVe uI elemenTs In Ios 5 • Do not call the retain, release, autorelease, or dealloc You can now customize the appearance of many UIKit methods in your code. views and controls to give your application a unique look and feel. For example, you might use these customiza- • Do not store object pointers in C structures. tions to make the standard system controls match the branding for the rest of your application. • Do not directly cast between object and nonobject types (for example, between id and void*). UIKit supports the following customizations: • No NSAutoreleasePool objects. • You can set the tint color, background image, and title position properties (among other) on a wide variety of Instead, you must use a new @autoreleasepool keyword objects, including toolbars, navigation bars, search bars, to mark the start of an autorelease block. buttons, sliders, and some other controls. 22 www.icodermag.com 01/2011
  • 23. THe All neW ios 5 WHAT’s neW In ios • You can set attributes of some objects directly, or you forBarMetrics:UIBarMetricsLandscapePho- can set the default attributes to use for a class using an ne]; appearance proxy. // Customize the title text for *all* UINavigationBars An appearance proxy is an object you use to modify [[UINavigationBar appearance] setTitleTe- the default appearance of visual objects such as views xtAttributes: and bar items. Classes that adopt the UIAppearance [NSDictionary dictionaryWithObjectsAnd- protocol support the use of an appearance proxy. To Keys: modify the default appearance of such a class, retrieve [UIColor colorWithRed:255.0/255.0 its proxy object using the appearance class method and green:255.0/255.0 blue:255.0/255.0 alpha:1.0], call the returned object’s methods to set new default UITextAttributeTextColor, values. A proxy object implements those methods and [UIColor colorWithRed:0.0 green:0.0 properties from its proxied class that are tagged with blue:0.0 alpha:0.8], the UI_APPEARANCE_SELECTOR macro. For exam- UITextAttributeTextShadowColor, ple, you can use a proxy object to change the default [NSValue valueWithUIOffset:UIOffset- tint color (through the progressTintColor or trackTint- Make(0, -1)], Color properties) of the UIProgressView class. UITextAttributeTextShadowOffset, If you want to set a different default appearance based [UIFont fontWithName:@”Arial-Bold” on how a given object is used in your application,you can size:0.0], do so using the proxy object returned by the appearance- UITextAttributeFont, WhenContainedIn: method instead. For example, you use nil]]; this proxy object to set specific default values for a button only when it is contained inside a navigation bar. } Any changes you make with a proxy object are applied, at view layout time, to all instances of the class that exist or uIbarbuttonItem that are subsequently created. [[UIBarButtonItem appearance] setBackgroundIma- code snIPPeTs: ge:button24 forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; navigationbar [[UIBarButtonItem appearance] setTitleTextAt- - (void)customizeAppearance tributes: { [NSDictionary dictionaryWithObjectsAndKeys: // Create resizable images [UIColor colorWithRed:220.0/255.0 gre- UIImage *gradientImage44 = [[UIImage image- en:104.0/255.0 blue:1.0/255.0 alpha:1.0], Named:@”surf_gradient_textured_44”] UITextAttributeTextColor, resizableImageWithCapInsets:UIEdgeInset- [UIColor colorWithRed:1.0 green:1.0 sMake(0, 0, 0, 0)]; blue:1.0 alpha:1.0], UIImage *gradientImage32 = [[UIImage image- UITextAttributeTextShadowColor, Named:@”surf_gradient_textured_32”] [NSValue valueWithUIOffset:UIOffsetMake(0, resizableImageWithCapInsets:UIEdgeInset- 1)], sMake(0, 0, 0, 0)]; UITextAttributeTextShadowOffset, [UIFont fontWithName:@”AmericanTypewri- // Set the background image for *all* UINavigationBars ter” size:0.0], [[UINavigationBar appearance] setBackgroun- UITextAttributeFont, dImage:gradientImage44 nil] forBarMetrics:UIBarMetricsDefault]; forState:UIControlStateNormal]; [[UINavigationBar appearance] setBackgroun- dImage:gradientImage32 23 www.icodermag.com 01/2011
  • 24. THe All neW ios 5 WHAT’s neW In ios uITabbar uIswitch [[UITabBar appearance] setBackgroundImage:tab- [rentSwitch setOnTintColor:[UIColor colorWi- Background]; thRed:0 green:175.0/255.0 blue:176.0/255.0 al- [[UITabBar appearance] setSelectionIndicatorI- pha:1.0]]; mage: [UIImage imageNamed:@”tab_select_indi- cator”]]; sTorYboArds uIslider [[UISlider appearance] setMaximumTrackImage- :maxImage forState:UIControlStateNormal]; [[UISlider appearance] setMinimumTrackImage:mi- nImage forState:UIControlStateNormal]; [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal]; uIsegmentedcontrol If you have an app with many different screens then storyboards can help reduce the amount of glue code [[UISegmentedControl appearance] setBackgroun- you have to write to go from one screen to the next. dImage:segmentUnselected Instead of using a separate nib file for each view controller, forState:UIControlStateNormal barMetrics:U- your app uses a single storyboard that contains the de- IBarMetricsDefault]; signs of all of these view controllers and the relationships [[UISegmentedControl appearance] setBackgroun- between them. dImage:segmentSelected forState:UIControlStateSelected barMetric- Storyboards have a number of advantages over s:UIBarMetricsDefault]; regular nibs: [[UISegmentedControl appearance] setDividerIma- • With a storyboard you have a better conceptual ge:segmentUnselectedUnselected overview of all the screens in your app and the forLeftSegmentState:UIControlStateNormal connections between them. It’s easier to keep track rightSegmentState:UIControlStateNormal of everything because the entire design is in a single file, barMetrics:UIBarMetricsDefault]; rather than spread out over many separate nibs. [[UISegmentedControl appearance] setDividerIma- ge:segmentSelectedUnselected • The storyboard describes the transitions between the forLeftSegmentState:UIControlStateSelected various screens. These transitions are called “segues” rightSegmentState:UIControlStateNormal and you create them by simply ctrl-dragging from one barMetrics:UIBarMetricsDefault]; view controller to the next. Thanks to segues you need [[UISegmentedControl appearance] less code to take care of your UI. setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal • Storyboards make working with table views a lot easier rightSegmentState:UIControlStateSelected with the new prototype cells and static cells features. barMetrics:UIBarMetricsDefault]; You can design your table views almost completely in the storyboard editor, something else that cuts down on the amount of code you have to write. 24 www.icodermag.com 01/2011
  • 25. THe All neW ios 5 WHAT’s neW In ios oPenGl es 2.0 WITH GlkIT Json In Ios 5 iOS 5 comes with a new set of APIs that makes de- iOS 5 has some new built-in APIs to make it really easy veloping with OpenGL much easier than it used to be. to read and write JSON. Over a period of time JSON has The new set of APIs is collectively known as GLKit. proven itself best for communication with a web service It contains four main sections: . For example, if you have an array of three strings, the JSON representation would simply be: • GlkView/GlkViewcontroller. These classes abstract out much of the boilerplate code it used [“test1”, “test2”, “test3”] to take to set up a basic OpenGL ES project. If you have a Pet object with member variables name, • Glkeffects. These classes implement common shading breed, and age, the JSON representation would simply behaviors used in OpenGL ES 1.0, to make transitioning be: to OpenGL ES 2.0 easier. They’re also a handy way to get some basic lighting and texturing working. {“name” : “Dusty”, “breed”: “Poodle”, “age”: 7} • Glmath. Prior to iOS 5, pretty much every game It’s that simple, which is why it’s so easy and popular to needed their own math library with common vector use. The reason JSON is important is that many third and matrix manipulation routines. parties such as Google, Yahoo, or Kiva make web ser- vices that return JSON formatted data when you visit • GlkTextureloader. This class makes it much easier a URL with a specified query string. If you write your to load images as textures to be used in OpenGL. own web service, you’ll also probably find it really easy Rather than having to write a complicated method to convert your data to JSON when sending to another dealing with tons of different image formats, loading party. If you’ve had to parse JSON in your iOS apps in a texture is now a single method call! the past, you’ve probably used a third party library such as JSON Framework. Arc In Ios 5 The most disruptive change in iOS 5 is the addition of Well with iOS 5, needing to use a third party library Automatic Reference Counting, or ARC for short. ARC for JSON parsing is a thing of the past. Apple has finally is a feature of the new LLVM 3.0 compiler and it com- added a JSON library in Cocoa and I must say I person- pletely does away with the manual memory management ally like it very much! that all iOS developers love to hate. You can turn objects like NSString, NSNumber, NSArray Using ARC in your own projects is extremely simple. and NSDictionary into JSON data and vice versa super You keep programming as usual, except that you no easily. And of course no need to include external librar- longer call retain, release and autorelease. That’s basi- ies – everything is done natively and super fast. cally all there is to it. core ImAGe In Ios 5  With Automatic Reference Counting enabled, the com- Core Image is a powerful framework that lets you easily piler will automatically insert retain, release and autore- apply filters to images, such as modifying the vibrance, lease in the correct places in your program. To migrate hue, or exposure. It uses the GPU (or CPU, user defin- your current app to ARC you can Edit > Refactor menu, able) to process the image data and is very fast. Fast you’ll see an option called migrate to objective- enough to do real time processing of video frames! c Arc. That tool will help convert your code to Arc. Core Image filters can stacked together to apply multiple ef- fects to an image or video frame at once. When multiple fil- The only problem that you might face would be ters are stacked together they are efficient because they cre- with 3rd party libraries used in your app which ate a modified single filter that is applied to the image, instead might not support Arc. of processing the image through each filter, one at a time. 25 www.icodermag.com 01/2011