ebook img

Developing C# Apps for iPhone and iPad using MonoTouch: iOS Apps Development for .NET Developers PDF

500 Pages·2011·44.52 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Developing C# Apps for iPhone and iPad using MonoTouch: iOS Apps Development for .NET Developers

Companion BOOKS FOR PROFESSIONALS BY PROFESSIONALS® eBook Available Making .NET skills pay off Developing C# Applications for iPhone and iPad using MonoTouch teaches you D in the iOS World e how to use your existing C# skills to write apps for the iPhone and iPad. v e Over the course of the book, you’ll learn how to use MonoTouch to write C# l o code that executes in iOS as a native app; you’ll take advantage of the unique p functions of the iPhone, iPod Touch, and iPad; and you’ll integrate off-the-shelf i Objective-C libraries in your C# apps. And the big plus? You needn’t learn any n Objective-C to master MonoTouch. g C Developing C# Applications for iPhone and iPad using MonoTouch takes you from # your first Hello World example through the major APIs and features of iOS. The A coverage is comprehensive and makes use of frequent examples, complete p with sample code you can download and reuse to create your own powerful p and playful apps. s f o What You’ll Learn: r • i How to use your existing C# skills to develop applications on iOS devices P • Working with CocoaTouch’s UIKit to create iOS applications using native h o controls • n Device-specific features, including the camera, GPS and compass, e and the accelerometer a • Accessing shared resources such as photos and contacts nd DDeevveellooppiinngg CC## AAppppss • How to persist and retrieve data using SQLite and .NET libraries i • P Complex drawing and animation using Core Graphics and Core Animation a d This book shows you how to use the tools you already know to create native u apps in iOS. You’ll master the elegant and rich Cocoa environment, provided by s iPhone iPad i MonoTouch, without the need to learn a new programming language. You’ll be n g writing apps for iOS devices with the minimum of fuss. for and using M o n MonoTouch o T o u c h iOS Apps Development for .NET Developers C o s t a n ic Bryan Costanich COMPANION eBOOK h Shelve in: Programming Languages / C# SOURCE CODE ONLINE User level: www.apress.com Beginning–Intermediate For your convenience Apress has placed some of the front matter material after the index. Please use the Bookmarks and Contents at a Glance links to access them. Contents at a Glance Contents .............................................................................................................. v About the Author ............................................................................................... xiv About the Technical Reviewer ........................................................................... xv Acknowledgments ............................................................................................ xvi Preface ............................................................................................................ xvii(cid:1) ■Chapter 1: Getting Started with MonoTouch ................................................... 1(cid:1) ■Chapter 2: Our First Application .................................................................... 11(cid:1) ■Chapter 3: Creating Multi-Screen Applications Using the MVC Pattern ........ 43(cid:1) ■Chapter 4: iPad and Universal (iPhone/iPad) Applications ........................... 59(cid:1) ■Chapter 5: More on Views and Controllers .................................................... 73(cid:1) ■Chapter 6: Introduction to Controls ............................................................... 93(cid:1) ■Chapter 7: Standard Controls ...................................................................... 107(cid:1) ■Chapter 8: Content Controls ........................................................................ 155(cid:1) ■Chapter 9: Working with Tables .................................................................. 193(cid:1) ■Chapter 10: Working with Keyboards .......................................................... 223(cid:1) ■Chapter 11: Multitasking ............................................................................. 233(cid:1) ■Chapter 12: Working with Touch ................................................................. 247(cid:1) ■Chapter 13: Working with Shared Resources .............................................. 271(cid:1) ■Chapter 14: User and Application Settings .................................................. 303(cid:1) ■Chapter 15: Working with CoreLocation ...................................................... 321(cid:1) ■Chapter 16: Drawing with CoreGraphics ..................................................... 331(cid:1) ■Chapter 17: Core Animation ........................................................................ 361(cid:1) ■Chapter 18: Notifications ............................................................................. 377(cid:1) ■Chapter 19: Working with Data ................................................................... 393(cid:1) ■Chapter 20: Publishing to the App Store ..................................................... 407(cid:1) ■Chapter 21: Third-Party Libraries ................................................................ 419(cid:1) ■Chapter 22: Using Objective-C Libraries and Code ...................................... 433(cid:1) Index ............................................................................................................... 463 iv 1 1 Chapter Getting Started with MonoTouch When most people think about developing applications for the iPhone, iPad, or iPod Touch, they think of writing applications in a low-level language like Objective-C. But the truth is, as the iOS ecosystem has matured, a number of ways to develop apps for it has emerged. The reason is largely developer-driven. For many developers, learning Objective-C was seen as a huge barrier to entry. For .NET developers, many of whom have never had to worry about memory management, pointers, and other C language concepts, Objective-C also forced on them many responsibilities that they were unfamiliar with. Many also feel that the tools for developing in Objective-C are lacking. Apple’s XCode Integrated Development Environment (IDE) lacks many of the features found in other modern IDEs, such as Visual Studio. All this has changed, however, as more players have entered the iOS space. In addition to MonoTouch, Adobe has entered it with Flash CS5, and Unity for the iOS powers some of the best-selling games available on the iPhone and iPad. The MonoTouch framework itself is part of Novell’s Mono project. The Mono project is an open-source implementation of the Microsoft .NET platform published standards. It allows you to run .NET applications on nearly any platform, including Apple, FreeBSD, Linux, Unix, and others. MonoTouch was introduced in the fall of 2009, and extends Mono by allowing you to write applications using C# and the .NET platform Base Class Library (BCL) that run on the iOS, using Cocoa Touch’s UIKit API. 1 2 CHAPTER 1: Getting Started with MonoTouch MonoTouch is an extremely powerful way to write applications for the iOS because it combines a number of features: (cid:1) Ability to call Objective-C, C, and C++: MonoTouch harnesses all the power of low-level languages such as Objective-C, C, and C++. You can use libraries written in Objective-C, et al. from your MonoTouch code. (cid:1) Modern language constructs: Because MonoTouch is based on the .NET Platform, you get nearly all of the modern language features available from it, such as automatic memory management, typed exceptions, etc. (cid:1) Modern IDE: The MonoDevelop IDE has all the features you have come to expect in modern development environments, including automatic code completion, an integrated debugger, intregrated source control, and code refactoring tools. Developing for the iPhone and iPad The iPhone and iPad are tremendous devices, and MonoTouch goes a long way toward making the transition between traditional .NET applications and applications for the iOS easier. However, it’s important to take in consideration that developing for these devices is very different than working with traditional .NET applications. Let's look at how mobile development for the iOS differs from traditional application development. Limited Multitasking While the iOS v4.0 introduced multitasking to the iPhone 3GS (and newer) and the iPad, it’s not true multitasking. In nearly any modern desktop operating system, multiple applications can be running at once without issue. However, in the iOS, if your app needs to keep processing when it’s not the foreground application, it needs to tell the iOS what type of background tasks it wants to perform, and then it is given limited processing time. Because of this, if you wish to support background processing, you have to design your application very carefully. We’ll cover this in greater depth in Chapter 11. Limited System Resources The iPhone has a very small amount of RAM (128MB for the 3G, 256MB for the 3GS and iPad, and 512 for the iPhone 4). Because of the complex nature of the graphics that support iPhone applications, and the fact that it’s fairly normal for OS processes to take up more than half of your RAM, you can run out of memory very quickly on the iOS. When the device is running low on memory, it will try and terminate known internal memory-hungry applications (such as Safari) to reduce memory pressure, and then it will CHAPTER 1: Getting Started with MonoTouch 3 let your application know that the system is low on useable memory and you should take steps to clean up unused objects in memory. Small Screen Size While the iPad sports a much larger screen (1024x768) than the iPhone (960x640 for the 4G and 320x480 for 3Gs and older models), they’re both small by comparison to the standard screen size many desktop applications are built for. While the iPad allows some flexibility in how you design screens, in the iPhone it’s especially important to try to simplify screens into one task at a time in the UI. However, this limitation is actually mitigated considerably by Apple’s UI Framework controls, which are designed specifically to provide a pleasant and efficient user experience, even with the small screen. Device-specific Technology Each device that runs the iOS may have different features specific to it. For instance, the GPS and/or Compass feature isn’t available on all devices. Some devices have a camera on the front, some devices can shoot video with their camera, some can only do still photos. Some allow multitasking, some don’t. The list goes on and on. Because of this, it’s important check for the presence of and ability to use a feature before actually trying to use it. Constrained Response Time In order to retain the responsive feel that users have come to expect from iOS applications, several operations in iOS are response-time sensitive. For instance, if your application takes longer than ten seconds to start up, the iOS will abort its launch. When a user clicks the home button to close your application, you have 5 seconds of processing time to save any settings or state information before it’s terminated. The same goes for multitasking features: your application is given a certain amount of time to perform certain tasks, and if it fails, it can be terminated. As a result, you need to design your application in such a way as to handle these transitions very quickly in order to prevent the loss of state and/or data. Constrained Access iOS applications run in what’s called a sandbox. That is, they have limited permissions on the device. For instance, they can only write files to their own directory, and can read files from their directory and certain system directories. They can’t, for instance, write to or read from any other application’s sandbox. They also can’t make low-level device calls, etc. Therefore, when developing iOS applications, you must take this constrained access into consideration. 4 CHAPTER 1: Getting Started with MonoTouch MonoTouch Background Now that we have an understanding of the basics of iOS development, let’s examine some of the basics of developing MonoTouch applications. iPhone vs. iPod Touch vs iPad? It’s important to note that developing for the iPod Touch is nearly identical to developing for the iPhone, except for the fact that it doesn’t have a cellular radio. Additionally, both the iPhone and the iPad run iOS and, besides User Interface (UI) concerns, developing for them is nearly identical. We’ll explore the differences between them in Chapter 2. How Does It Work? The MonoTouch.dll (the base library that all MonoTouch applications are built against) is equivalent to the Silverlight .NET 4.0 profile with some things added back in, such as System.Data and System.Net. This allows you to write applications using many of the .NET Framework technologies that you’re already familiar with, including Windows Communication Framework (WCF), Workflow Foundation (WF), etc. It also includes nearly all of the Base Class Library (BCL), including things like garbage collection, threading, math functions, cryptography, and parallel processing framework. For a list of available standard .NET assemblies in MonoTouch see http://monotouch.net/Documentation/Assemblies. This is accomplished through a MonoTouch-specific set of base .NET libraries, similar to how Silverlight and Moonlight (Mono’s implementation of Silverlight) work. This means that you can compile standard .NET 4.0 code libraries using the MonoTouch core assemblies and use them in your application. So if, for example, you have a specialized library that does advanced math functions for engineering problems that you use for other applications, you can simply include the code library in your MonoTouch solution, and reference it. When you build your solution, it will compile it using the MonoTouch libraries, and it will then be available in your application. MonoTouch also includes wrappers to the native iOS APIs, such as Location (GPS and Compass), the accelerometer, address book, etc. It also gives you the ability to bind to native Objective-C libraries that are not wrapped, so you can interop directly with existing Objective-C code. How Do I Build a User-Interface (UI); Can I Use Silverlight? MonoTouch application UIs are typically built using Apple’s Interface Builder (IB) application that ships with the iOS SDK. Interface Builder uses Cocoa Touch (Apple’s UI Framework for iOS, also known as UIKit) objects that are native to the iOS. This means that you have all the standard iOS controls available to your application, including Pickers, Sliders, and Buttons, etc. CHAPTER 1: Getting Started with MonoTouch 5 You can also create your interface programmatically by instantiating Cocoa Touch objects and adding them to your application’s Views (more on Views later). You cannot, however, create your MonoTouch interface using traditional .NET technologies such as Silverlight, WPF, or Winforms. You can, however, build games using Microsoft’s XNA Toolkit that target the Windows 7 phone and port them using the open-source XNA Touch project (we’ll cover this in Chapter 21). Additionally, there are indications from the MonoTouch team that Moonlight will be supported at some point in the future. Time will tell if that bears fruit. Cocoa Touch uses a rough amalgamation of the Model View Controller (MVC) pattern that we’ll discuss in Chapter 3. By utilizing the UIKit, developers can make iOS applications using the same familiar control set as applications written in Objective-C. However, if you wish to branch beyond that, you can. MonoTouch also exposes the underlying graphics framework so that you can create rich 2D and 3D applications that allow you to go well beyond the UIKit control framework. How Do I Distribute My Apps? MonoTouch applications are distributed the exact same way that traditional iOS applications are distributed, either via the Apple App Store, Enterprise, or ad-hoc deployment. The App Store is an online repository that allows users to pay for applications (if they’re not free), and download them. It is available from within iTunes, or directly from the iDevice itself. In order to get a license to distribute via the App Store, you must register with Apple, and pay $99/year. For more information, go to http://developer.apple.com and read about their development program. Enterprise deployment is for those wishing to develop internal applications for a company and distribute them, for example, to employees, without listing them with the App Store. Ad-hoc deployment allows you to deploy to a limited number of devices mainly for the purpose of testing and development. What Is the Licensing Model? Unlike Mono, MonoTouch is not open source—it is a commercial product. That means, if you want to do anything useful with it, you have to purchase a license to use it. MonoTouch comes in three flavors and prices: (cid:1) Professional ($399): A single personal developer license that allows you to develop applications and distribute them via the Apple App- Store 6 CHAPTER 1: Getting Started with MonoTouch (cid:1) Enterprise ($999): A single corporate developer license that allows you to develop applications and distribute via the App-store, or via enterprise deployment (cid:1) Enterprise, 5 Seat ($3,999): The same as the Enterprise license, but includes 5 seats (cid:1) Academic ($99): A single personal developer license that only allows non-commercial distribution via ad-hoc deployment All three options include a year of free updates. There is also an evaluation edition that allows you deploy to the simulator only (the simulator is part of the iOS SDK, which I'll talk about later in this chapter). For the purposes of most of this book, the evaluation edition of MonoTouch is all you need. If you wish to try out any of your code on an actual device, you will have to purchase a licensed copy of MonoTouch. Are There Any Limitations of MonoTouch? As powerful as MonoTouch is, it has some limations that the larger .NET Framework does not. Let’s examine them. No Just-in-Time (JIT) Compilation Per Apple’s iOS policy, no application can include code that requires just-in-time (JIT) compilation. But wait a second, that’s exactly how .NET works, right? This is correct; however, the MonoTouch framework gets around this limitation by compiling your application down to a native iOS assembly. This, however, introduces several limitations. (cid:1) Generics: Generics are instantiated by the JIT compiler at run-time. However, Mono has an ahead-of-time (AOT) compilation mode that will generate all the methods and properties for things like List<T>. Other uses of Generics, such as Generic virtual methods, P/Invokes in Generic types, and value types that don’t exist in the core library in Dictionary<TKey, TValue> are not supported (although there is a workaround for Dictionary<TKey, TValue>). (cid:1) Dynamic code generation: Because dynamic code generation depends on the JIT compiler, there is no support for any dynamic language compilation. This includes System.Reflection.Emit, Remoting, runtime proxy generation for WCF, JIT’d RegEx, JIT’d serializers, and the Dynamic Language Runtime. C# Is Currently the Only Language Additionally, currently, the only .NET language available for writing MonoTouch applications is C#. CHAPTER 1: Getting Started with MonoTouch 7 More Information For a full list of limitations and more information, including workarounds, see http://monotouch.net/Documentation/Limitations. Getting Started In order to get started building MonoTouch applications for the iPhone we’ll need a few things: (cid:1) An Intel Mac computer running 10.6 (Snow Leopard) or better (cid:1) The latest Apple iOS SDK (cid:1) The current version of Mono (cid:1) The MonoTouch SDK (cid:1) An IDE such as MonoDevelop or XCode, or a text editor program Mac Computer Running Snow Leopard This is an important and easily missed requirement. While theoretically you could build most of your application on other platforms, the iOS SDK (and therefore the iOS device simulator and Interface Builder) are only available for Snow Leopard. Additionally, the compiler itself uses some low-level magic specific to the Intel Mac machines, so having one is an absolute must. MonoTouch is currently working on tools that will allow you to write in Visual Studio via their MonoTouch Tools for Visual Studio. However, it has yet to be released, and you will still need a Snow Leopard machine to run the simulator and to compile for the actual device. Apple’s iOS SDK Available at http://developer.apple.com/devcenter/ios, the iOS SDK is a free download, but you must register with Apple to get access to it. Along the way, Apple may ask you to pay $99 to get an iOS developer account, which allows you to deploy your applications, but for the purposes of this tutorial, you just need the SDK. The iOS SDK includes Interface Builder, the iOS device simulator, Xcode, and a few other things. After you have installed the iOS SDK, make sure you can launch the iOS Simulator. You can find the simulator by opening Spotlight and typing “iOS Simulator.” Mono for OSX Once you’ve tested out the iOS simulator, install the latest version of Mono for OSX. Mono can be downloaded from http://mono-project.com/Downloads. Make sure you click

Description:
Developing C# Applications for iPhone and iPad using MonoTouch shows you how to use your existing C# skills to write apps for the iPhone and iPad. Fortunately, there's MonoTouch, Novell's .NET library that allows C# developers to write C# code that executes in iOS. Furthermore, MonoTouch allows you
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.