Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
RubyMotion iOS Development Essentials
RubyMotion iOS Development Essentials

RubyMotion iOS Development Essentials: Forget the complexity of developing iOS applications with Objective-C; with this hands-on guide you'll soon be embracing the logic and versatility of RubyMotion. From installation to development to testing, all the essentials are here.

eBook
$19.99 $28.99
Paperback
$48.99
Subscription
Free Trial
Renews at $19.99p/m

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Table of content icon View table of contents Preview book icon Preview Book

RubyMotion iOS Development Essentials

Chapter 2. Instant Gratification – Your First Application

"Dream the impossible, seek the unknown, and achieve greatness."

Anonymous

Now that we are all charged up about RubyMotion and have our system set up, let's create a simple RubyMotion application. We will try and keep it simple, but sometimes you may feel disconnected by monotonously typing the code. Although, going along is enough for now. Remember that mimicry is a powerful form of learning; that's how we have learned most of our skills, such as talking, reading, writing, and that is how you will learn to program with RubyMotion. We promise you that by the end of this book, you will have sufficient knowledge of RubyMotion to create an iOS application and make it live on the App Store. In this chapter we will cover the following topics:

  • Creating your first RubyMotion application

  • Understanding the folder structure

  • Exploring the command line

  • Configuring your application

  • REPL – the interactive console

  • The debugger

Your first application


Let's start with the classic HelloWorld application. As we have discussed in the last chapter, RubyMotion has a terminal-based flow, so let's fire up our terminal and create our very first RubyMotion application.

$motion create HelloWorld
Create HelloWorld
    Create HelloWorld/.gitignore
    Create HelloWorld/Rakefile
    Create HelloWorld/app
    Create HelloWorld/app/app_delegate.rb
    Create HelloWorld/resources
    Create HelloWorld/spec
    Create HelloWorld/spec/main_spec.rb

If you observe closely the output on the terminal screen, you will see that a lot of files and directories have been generated by a single motion command, which automatically creates standard directories, and you will also see the file structure that will quickly bring us onboard with app development, which we can work on later and enhance to make a fully functional application. Moreover, since the structure is common to all the RubyMotion apps, it's easy to understand.

Note

Just like the...

Folder structure


In this section, we will understand the folder structure of our application as we know from the previous section that motion create <project name> sets up the directory structure with all the essential files to run a simple RubyMotion application. Let's walk through each one of them to have a precise understanding of their function:

  • The app folder: This is the core of your application code; you will write most of your code in this folder. RubyMotion iterates in this folder and loads any .rb file that it catches.

    Tip

    If you want to keep your code somewhere else other than the app directory, add the folder path to the Rakefile.

  • The app_delegate.rb file in the app folder: This file is at the heart of the RubyMotion application. If you are a little familiar with iOS development, this is the delegate file. A delegate is an object that usually reacts to some event in another object and/or can affect how another object behaves. There are various methods that can be implemented...

Some more goodies


We know that it's not so much fun to have only a simple HelloWorld pop-up as our very first application, so let's jazz up our code by adding some more goodies to our alert box; and this time, let's do things in a much better way.

Earlier we had added an alert box in the delegate itself. Actually it is not a good idea to write code in the application delegate. It is better to write code in a Model-View-Controller (MVC) way. Right now we won't cover all three parts of the MVC architecture for now let's begin with the controller for our application and add three buttons in this alert box, add a title, and add a message for the title box.

The class UIAlertView that we've used in the last section has numerous properties, such as title, message, delegate, cancelButtonTitle, otherButtonTitles, and many more. Let's use a few of them in our application as follows:

  1. Create a file root_controller.rb in the app folder and add the following code:

    class RootController < UIViewController...

Exploring the command line


RubyMotion is based on an underlying principle, "to use the tools which developers love". Therefore, to create an application using RubyMotion, we require only two tools; the first is your favorite editor and the second is the terminal. While developing a RubyMotion application, you will be required to familiarize yourself with the command line. Familiarity with the terminal always helps in faster and comfortable development.

Now that we have created our HelloWorld application, let us explore a few commands that we have already used, and remember that RubyMotion uses them considerably. These commands are responsible for inaugurating our RubyMotion projects, motion and rake.

Motion command – one-stopshop

As used previously, the motion command creates our RubyMotion project and also supports various other options. The motion command is similar to the popular framework Ruby on Rails' rails command. Before we go any further, let's fire up our terminal and see what can...

REPL – the interactive console


RubyMotion comes with an interactive console that lets us traverse and scan the code that we are using in our application. The good thing is that the console is connected to the application running on the simulator. This means that if we make any changes from the console, it will be reflected on the simulator in real time. Let's try this with our HelloWorld application.

Run the application as follows:

$rake

As expected, it will open a simulator and the terminal screen will show:

(main)>

Now hold the Command key and hover the mouse over the simulator. You will see a red-bordered box. As we move the mouse pointer over an element, we can see its corresponding class object appearing in the terminal window (UIView:0xc5710c0)? as seen in the following screenshot. Now click the mouse to select the object that you want to work on dynamically.

Try the following command on the terminal and observe the changes in the simulator:

self returns the current object selected...

Debugger – catch your mistakes!


A typical debugger provides the ability to halt when specific conditions are encountered. It also offers sophisticated functions, such as running a program step by step, breaking or pausing the program for an examination based on breakpoints, and tracking the values of the variables at that state. RubyMotion Version 1.24 and above support debugging using GDB: the GNU project debugger (http://www.gnu.org/software/gdb/).

The RubyMotion debugger provides the following inbuilt debugging facilities:

  • It stops the program at a specific line

  • It examines the problem when the program has stopped

  • It checks the value for the variables at a specific breakpoint

    Note

    The RubyMotion compiler implements the DWARF debugging format's metadata for the Ruby language. This allows external programs, such as the debugger in our case, to retrieve source-level information about the RubyMotion application. The metadata is saved under a .dSYM bundle file at the same level as the .app bundle...

Summary


Let's recap what we have done in this chapter:

  • Created a simple RubyMotion application

  • Discussed the basic RubyMotion application structure

  • Explored the commands available with RubyMotion

  • Performed different Rake tasks with RubyMotion

  • Learned how to configure your RubyMotion application

  • Worked with the interactive console—REPL

  • Debugged your application using the RubyMotion debugger

In the next chapter, we turn our attention to RubyMotion data type objects—such as strings and arrays. We will also learn how to interface with C and we will focus on memory management in RubyMotion.

Left arrow icon Right arrow icon

Key benefits

  • Get your iOS apps ready faster with RubyMotion
  • Use iOS device capabilities such as GPS, camera, multitouch, and many more in your apps
  • Learn how to test your apps and launch them on the AppStore
  • Use Xcode with RubyMotion and extend your RubyMotion apps with Gems
  • Full of practical examples

Description

RubyMotion is a revolutionary toolchain for iOS app development. With RubyMotion, you can quickly develop and test native iOS apps for the iPhone and iPad, combining the expressiveness and simplicity of Ruby with the power of the iOS SDK. "RubyMotion iOS Development Essentials" is a hands-on guide for developing iOS apps using RubyMotion. With RubyMotion, you can eliminate the complexity and confusion associated with the development of iOS applications using Objective-C. We'll begin from scratch. Starting by installing RubyMotion, we'll build ourselves up to developing an app that uses the various device capabilities iOS has to offer. What's more, we'll even learn how to launch your app on the App Store! We'll also learn to use iOS SDK classes to create application views. Discover how to use the camera, geolocation, gestures, and other device capabilities to create engaging, interactive apps. We'll develop stunning user interfaces faster with the XCode interface builder and make web apps by using WebView. We'll then augment applications with RubyMotion gems, doing more by writing less code and learn how to write test cases for RubyMotion projects. Finally, we'll understand the app submission process to push your app to Apple's App Store With "RubyMotion iOS Development Essentials", we will learn how to create iOS apps with ease. At the end of each chapter we will have a tangible and running app, which utilizes the concepts we have learnt in that chapter.

Who is this book for?

Whether you are a novice to iOS development or looking for a simpler alternative to Objective-C; with RubyMotion iOS Development Essentials, you will become a pro at writing great iOS apps

What you will learn

  • Install RubyMotion and get a feel for the toolchain
  • Understand the evolution of Rubymotion from Objective-C : compare RubyMotion syntax with the corresponding Objective-C syntax
  • Work with the XCode interface builder and design stunning user interfaces with RubyMotion
  • Augment applications with gems: Use and create gems for RubyMotion
  • Use device capabilities including the camera, geolocation, gestures and address book in your apps
  • Show your web apps right from your iPhone window with WebView
  • Learn to store data offline with Core Data
  • Get your apps ready for the App Store!
Estimated delivery fee Deliver to United States

Economy delivery 10 - 13 business days

Free $6.95

Premium delivery 6 - 9 business days

$21.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Jul 16, 2013
Length: 262 pages
Edition : 1st
Language : English
ISBN-13 : 9781849695220
Category :
Languages :
Tools :

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Estimated delivery fee Deliver to United States

Economy delivery 10 - 13 business days

Free $6.95

Premium delivery 6 - 9 business days

$21.95
(Includes tracking information)

Product Details

Publication date : Jul 16, 2013
Length: 262 pages
Edition : 1st
Language : English
ISBN-13 : 9781849695220
Category :
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
$19.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
$199.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts
$279.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just $5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total $ 48.99
RubyMotion iOS Development Essentials
$48.99
Total $ 48.99 Stars icon

Table of Contents

11 Chapters
Getting Ready for RubyMotion Chevron down icon Chevron up icon
Instant Gratification – Your First Application Chevron down icon Chevron up icon
Evolution – From Objective-C to RubyMotion Chevron down icon Chevron up icon
Mastering MVC Paradigm Chevron down icon Chevron up icon
User Interface – Cosmetics for Your App Chevron down icon Chevron up icon
Device Capability – Power Unleashed Chevron down icon Chevron up icon
Interface Builder and WebView – More Goodies! Chevron down icon Chevron up icon
Testing – Let's Fail Gracefully Chevron down icon Chevron up icon
Creating a Game Chevron down icon Chevron up icon
Getting Ready for the App Store Chevron down icon Chevron up icon
Extending RubyMotion Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Full star icon Half star icon Empty star icon 3.7
(3 Ratings)
5 star 33.3%
4 star 33.3%
3 star 0%
2 star 33.3%
1 star 0%
Marek Rohon Oct 03, 2013
Full star icon Full star icon Full star icon Full star icon Full star icon 5
This is a promissing and long expected ebook about iOS mobile development with ruby. The content of this ebook is clear with all relevant information for starting using Rubymotion. If you want to practise and follow the content of the ebook, you are supposed to buy a software ( no trial available) - this is the only disadvantage what I see in connection with this book. Great work!.
Amazon Verified review Amazon
B. Bergman Oct 09, 2013
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
This is a great book for getting started with RubyMotion. Although the RubyMotion web site has a great video tutorial, the video does not provide a deep explanation of how RubyMotion is used to develop full-featured iOS apps. This book provides that, from the basics all the way up to the more sophisticated topics, and more. It starts with a pretty clear description of what RubyMotion is, how it fits into the iOS development paradigm, and how to get started with the environment. Like any good programming text, it breaks into a HelloWorld app right away, and shows the value of the interactive console commands in designing and testing your app. This is where you start to see the power of RubyMotion, and how it can actually speed up iOS development. The screenshots and app images are clear and helpful, and lead to a solid understanding of how the code translates into the visual UI aspects in iOS.This book is not for a beginner, however. It does require that you have some basic Ruby skills and knowledge. For example, you should understand how Ruby handles objects, have an understanding of the basic Ruby library, and how to use of common Ruby tools like rake and gems. Likewise, it also assumes that you have some basic understanding of iOS or Cocoa development. Although it does go into some basics about MVC, UI components and controllers and such, it doesn't explain everything about iOS in enough detail that a complete novice to iOS development could be expected to produce complex apps. However, to be fair to the description of the book, it does say that you'll need those basics, and the target of the book is more about adapting to a new style of iOS development (one of using Ruby, not Objective-C). So in this regard, it lives up to the letter of the description. Mid-way through the book, you're working with different controls, trying them out in RubyMotion to get a feel for how the calls translate and so on. It's a great way to get productive with simple-to-moderate iOS apps. In other chapters, it covers devices like the camera, GPS, gestures and so on. It also brings up the basics of storing data on iOS devices, memory management, contacts and more.Where this book shines is in explaining the integration with the other iOS development tools. It's quite one thing to build applications line by line in code, and another to use modern IDE's to speed up development. A newbie to RubyMotion might not have any clue how to start using tools like the Interface Builder in conjunction with Ruby because it's simply not obvious; there's always the fear that you'll have to resort to Objective-C code at some point. The book goes into detail to show that this isn't true, and that the IDE tools are powerful additions to the entire RubyMotion development cycle. This chapter is well worth the cost of the book for any RubyMotion developer alone. The next few chapters address testing and graceful failures, which are important parts of the development process. A full-feature game is the next example, and brings together much of what has been discussed to this point in the book.Then there is the always-onerous process of actually submitting an app to the Apple store. This process has been known to bring grown men to tears, what with certificates and provisioning profiles and submissions and such. The book gives it a good solid treatment, showing how to take something like the game and make it a true AppStore app. There are a few remaining chapters on extending RubyMotion with other libraries (notably, Cocoa), but I haven't yet needed that knowledge, so I can't speak to them. All in all, the book is well organized, and gives the both RubyMotion and iOS developers a solid and dependable resource for utilizing this unique environment. It is certainly enough that a reasonable educated developer could build an iOS app from start to finish, and have it available for sale in the AppStore. Probably the biggest opportunities for improvement are in providing the sample code with the book (although it is available on the publisher's web site), and a greater depth in illustrating Rubyisms of the iOS development library. Both of these are available in other locations, and shouldn't be a reason to avoid this book. There are so few worthwhile texts on RubyMotion, and this one is easily worth every cent. I highly recommend it!
Amazon Verified review Amazon
Marcus Ma Aug 26, 2014
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
The ruby code the author write is .
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on customercare@packt.com within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on customercare@packt.com who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela