Author Archive

UIImage+Sprite

Here’s a nifty trick for using sprite sheets for your UIKit graphics that never occurred to us:

UIImage-Sprite-Additions

Useful UIImage category for handling sprite sheets. This add-on smoothes the way of extracting images from a sprite sheet (texture atlas).

This can be useful in UIImageView animations where animationImages array has to be filled with a set of images representing frames. UIImage-Sprite category makes this process trivial…

The basic trick is to get a CGImageRef with CGImageCreateWithImageInRect you then pass to [UIImage imageWithCGImage:]. Simple once it occurs to you!

h/t: @cocoacontrols

Continue Reading →
0

Review: Cocos2d for iPhone 1 Game Development Cookbook

So, now that we’re all up on the latest in cocos2d web events, let’s take a look as promised at the latest in cocos2d publishing events:

Cocos2d for iPhone 1 Game Development Cookbook

cover_image_250w.jpg

SHORT REVIEW:

Buy it now. No, seriously. Buy it now.

SOMEWHAT LONGER REVIEW:

We absolutely guarantee that just about anyone will find the book worth way more than its price in time saved. To see for yourself, head over to the book’s website

http://cocos2dcookbook.com/

and check out the Explore The Book section for videos and explanations of the recipes in each … and download the demo apps. Yep, the demo apps, there’s free demo apps up on the store for you to check out the recipes in action:

Cocos2d Cookbook Ch1-3

Cocos2d Cookbook Ch4-6

Cocos2d Cookbook Ch7-8

Now that’s how you go about supporting a book!

Also check out the book’s thread on the cocos2d-iphone forums for some subtle understated commentary like

  • “This book looks like it is going to be a requirement in every developer’s library!”
  • “Ok, I have read a handful of recipes and I am completely sold. This is an awesome book.”
  • “…every developer needs to have this book.”
  • “this book is an absolute must for anyone developing cocos2d apps.”
  • “Great book, instant buy!”

Gee, gushing much? But it actually does deserve all that and more. Let us take the very first recipe, “Drawing sprites”. Oh for crying out loud, you think, how does that merit a recipe? Is this thing going to be full of fluff I already know? Well, no actually, that simple sounding recipe goes over drawing from files, images, textures, and frames; explains mipmapping and batch nodes; and tops it off with colorizing rectangles. Well, that is pretty good for a first recipe, isn’t it now.

The first graphics chapter goes on to cover not only common drawing and animating but movie playing, particle effects, simple 3D effects, texture animation, palette swapping, screenshots, parallax, and lighting. Pretty much a worthwhile purchase already, and we’re barely started!

Second chapter covers user input of varying types, including virtual joysticks, d-pads, and accelerometer; nothing too novel here, but useful time savers here if you’re newish to cocos2d.

Third chapter covers data management; reading and saving plist/JSON/XML … and even SQLite and Core Data. Probably not much completely new to you here either, but the details of working with sprites and the like are handy.

Fourth chapter is on physics and is a particularly valuable one for those of us weak on the background there; focusing on Box2D, takes you from basic setup through impulses and forces to joints, bullets, ropes, and ending up with a 2.5D isometric game engine! That’s a pretty standout one there.

Fifth chapter, ‘Scenes and Menus’, is mostly pretty straightforward but still handy code. The sliding menu grid and minimap are particularly nice.

Sixth chapter, “Audio” is another notably useful one, nice explanations of sound manipulating, positioning, metering, recording, iPod library usage, and finishing up with creating a MIDI synthesizer with MobileSynth and then speech recognition/synthesis.

Seventh chapter, “AI and Logic” is well-nigh invaluable for those without a background in it; basic waypoints, targeting, line of sight, flocking, pathfinding (the “in a Box2D world” getting special mention, good luck figuring that one out without some help!) and finishing off with discussion of Lua integration.

We figured the last chapter “Tips, Tools, and Ports” was a bit weaker; the tools picked here mostly aren’t up to the currently regarded best of breed mentioned in yesterday’s roundup, and the cocos2d-x and cocos3d intros were too short to really be of much use. But hey, still worth a read.

Closest thing we have to a real complaint is that you have to email the author to get the extra chapter which was omitted from the print versions; really, how hard would it be to put it as an addenda in the electronic versions most of us are going to be buying anyways? But hey, if mild inconvenience is the worst whine we can come up with, that’s pretty solid.

So, yeah. We pretty much can’t imagine anyone developing with cocos2d who won’t find something in here well worth the price; for those just starting out it might be a bit over your head, but it would make a perfect second step after one of the introductory books or our starting recommendation The iPhone Game Kit. So buy it now!

Continue Reading →
1

cocos2d A-Go-Go

So it was just about a year ago we did our last big survey of cocos2d resources, and look at that, we’re in the exact same position today of pawing through our mountain of collected links before we get around to reviewing a Packt book:

4002EXP_Cocos2d-for-iPhone-Game-Development-Cookbook.jpg.png

Check back soon Take a look here for our thoughts on that!

In the meantime, first off let’s take a look at how the various flavours mentioned a year ago have developed:

Other particularly notable developments:

Moving on to more ‘comprehensive’ as opposed to ‘notable’ listings, the tools scene in general has been getting more active; besides Level Helper and Sprite Helper mentioned above, things out there to help you are:

So has the tutorial scene:

Aaaaaand here’s a grab bag to finish up with of interesting techniques, projects, libraries, and snippets:

That should keep you busy reading for a while!

UPDATES:

How To Build a Monkey Jump Game Using Cocos2D, PhysicsEditor & TexturePacker is by Andreas Loew the tools’ author.

Continue Reading →
2

Programming Book Giveaway!

So, what better way to get rolling into 2012 than learn something new from a good programming book? Why, nothing at all, that’s what. And courtesy of the great folk over at Packt Publishing, here we have four choices for you, and a dead simple way to get whichever one of them you like: just tweet the message of your choice with the link provided to the book’s page, and this weekend we’ll do a search, first tweet we find with each link wins! So without further ado, here are your choices:

#1: Cocos2d for iPhone 1 Game Development Cookbook

4002EXP_Cocos2d for iPhone Game Development Cookbook.jpg.png

Tweet this: I’d like to read this book on cocos2d! http://is.gd/uMGIcA

#2: Unreal Development Kit Game Programming with UnrealScript: Beginner’s Guide

1925EXP_UDK Game Programming with UnrealScript Beginner's Guide.jpg.png

Tweet this: I’d like to read this book on UnrealScript! http://is.gd/D59QkK

#3: Android 3.0 Animations: Beginner’s Guide

5283EXP_Android 3.jpg.png

Tweet this: I’d like to read this book on Android animations! http://is.gd/T0g0Wi

#4: XNA 4.0 Game Development by Example: Beginner’s Guide – Visual Basic Edition

2403EXP_XNA 4.0 Game Developement by Example.jpg.png

Tweet this: I’d like to read this book on XNA4 game development! http://is.gd/R42Uoa

And if you don’t so happen to be a lucky winner, fear not, you can still get your hands on any of these for a little quid pro quo, that being to post a review on your blog and Amazon and the like: just drop a line to Shaveer Irani of Packt with the subject “book name- review request copy” to join our Distinguished Fraternity Of Review Writers!

Continue Reading →
0

iBooks Author EULA

So the latest Apple-related brouhaha for those who like to get their knickers in a twist to be all knicker-twisted about is the EULA attached to iBooks Author, as no doubt you’ve heard. Normally we’d just snicker at the lachrymose lamentations of those who profess that strings attached to something given away for free is somehow unprecedentedly evil, but there is a particularly interesting bit in Jeff Lamarche’s display of common sense in punditry here:

How I Learned to Stop Worrying and Love the iBooks Author EULA

… Let’s say, for giggles, that “book stealing” was Apple’s intent, and such an intent was found to be both legal and the actual intent of the contract, and Apple decided to exercise those rights to steal my books. You know what? Even with all that, it’s still a hell of a lot better deal than I’ve ever gotten from a traditional publisher. Apple is offering 70% of the sale price to me. The most favorable contract I’ve ever gotten from a publisher starts at 12% of the net price the publisher gets from the distributor, wholesaler, or retailer (which is half or less of the retail price). That percentage does slowly escalate up to 20% if I sell a ton of books, but if I publish a new edition of an existing book, the escalators go back down to 12% and I have to start all over. To put this in more concrete terms, if I were to sell a book in the iBooks Store for $9.99, I would get $6.99 per book sold, which is about four times what I get when one of my current $39.99 books sells, and I’d get that money months sooner. Oh, and guess what? I don’t own those books published through a traditional publisher, either. My publisher can even have someone else update the book and can continue to use my name to promote it, even if I don’t like the revisions or think the update sucks…

Wow! We were vaguely aware that writing books was for most people a pretty low return endeavour, but we had no idea that terms were on the order of a twentieth of the cover price. That rather puts all the huffing and puffing from excitable quarters into its proper context, doesn’t it now?

UPDATES :

A rather more amusing take on the huffing and puffing types: In Favour Of iBook Author

Lots of thought-provoking iBooks Ideas from @mattgemmell!

Continue Reading →
0

Snippet: Locale Listing

Ever wonder just what those annoyingly obtuse NSLocale codes are? Here’s the snippet to print them out:

- (void)logAllLocales
{
   NSLocale *curentLocale = [NSLocale currentLocale];
   NSArray *locales = [[NSLocale availableLocaleIdentifiers] sortedArrayUsingSelector:@selector(compare:)];
   for (NSString *locale in locales)
      NSLog(@"locale '%@' is: %@'", locale, [curentLocale displayNameForKey:NSLocaleIdentifier value:locale]);
}

And here is your comprehensive list of just what shows up on an iPad 2 with 5.0.1. And comprehensive indeed it is!

  1. ‘af’ is: Afrikaans’
  2. ‘af_NA’ is: Afrikaans (Namibia)’
  3. ‘af_ZA’ is: Afrikaans (South Africa)’
  4. ‘agq’ is: Aghem’
  5. ‘agq_CM’ is: Aghem (Cameroon)’
  6. ‘ak’ is: Akan’
  7. ‘ak_GH’ is: Akan (Ghana)’
  8. ‘am’ is: Amharic’
  9. ‘am_ET’ is: Amharic (Ethiopia)’
  10. ‘ar’ is: Arabic’
  11. ‘ar_AE’ is: Arabic (United Arab Emirates)’
  12. ‘ar_BH’ is: Arabic (Bahrain)’
  13. ‘ar_DZ’ is: Arabic (Algeria)’
  14. ‘ar_EG’ is: Arabic (Egypt)’
  15. ‘ar_IQ’ is: Arabic (Iraq)’
  16. ‘ar_JO’ is: Arabic (Jordan)’
  17. ‘ar_KW’ is: Arabic (Kuwait)’
  18. ‘ar_LB’ is: Arabic (Lebanon)’
  19. ‘ar_LY’ is: Arabic (Libya)’
  20. ‘ar_MA’ is: Arabic (Morocco)’
  21. ‘ar_OM’ is: Arabic (Oman)’
  22. ‘ar_QA’ is: Arabic (Qatar)’
  23. ‘ar_SA’ is: Arabic (Saudi Arabia)’
  24. ‘ar_SD’ is: Arabic (Sudan)’
  25. ‘ar_SY’ is: Arabic (Syria)’
  26. ‘ar_TN’ is: Arabic (Tunisia)’
  27. ‘ar_YE’ is: Arabic (Yemen)’
  28. ‘as’ is: Assamese’
  29. ‘as_IN’ is: Assamese (India)’
  30. ‘asa’ is: Asu’
  31. ‘asa_TZ’ is: Asu (Tanzania)’
  32. ‘az’ is: Azerbaijani’
  33. ‘az_Cyrl’ is: Azerbaijani (Cyrillic)’
  34. ‘az_Cyrl_AZ’ is: Azerbaijani (Cyrillic, Azerbaijan)’
  35. ‘az_Latn’ is: Azerbaijani (Latin)’
  36. ‘az_Latn_AZ’ is: Azerbaijani (Latin, Azerbaijan)’
  37. ‘bas’ is: Basaa’
  38. ‘bas_CM’ is: Basaa (Cameroon)’
  39. ‘be’ is: Belarusian’
  40. ‘be_BY’ is: Belarusian (Belarus)’
  41. ‘bem’ is: Bemba’
  42. ‘bem_ZM’ is: Bemba (Zambia)’
  43. ‘bez’ is: Bena’
  44. ‘bez_TZ’ is: Bena (Tanzania)’
  45. ‘bg’ is: Bulgarian’
  46. ‘bg_BG’ is: Bulgarian (Bulgaria)’
  47. ‘bm’ is: Bambara’
  48. ‘bm_ML’ is: Bambara (Mali)’
  49. ‘bn’ is: Bengali’
  50. ‘bn_BD’ is: Bengali (Bangladesh)’
  51. ‘bn_IN’ is: Bengali (India)’
  52. ‘bo’ is: Tibetan’
  53. ‘bo_CN’ is: Tibetan (China)’
  54. ‘bo_IN’ is: Tibetan (India)’
  55. ‘br’ is: Breton’
  56. ‘br_FR’ is: Breton (France)’
  57. ‘brx’ is: Bodo’
  58. ‘brx_IN’ is: Bodo (India)’
  59. ‘bs’ is: Bosnian’
  60. ‘bs_BA’ is: Bosnian (Bosnia and Herzegovina)’
  61. ‘ca’ is: Catalan’
  62. ‘ca_ES’ is: Catalan (Spain)’
  63. ‘cgg’ is: Chiga’
  64. ‘cgg_UG’ is: Chiga (Uganda)’
  65. ‘chr’ is: Cherokee’
  66. ‘chr_US’ is: Cherokee (United States)’
  67. ‘cs’ is: Czech’
  68. ‘cs_CZ’ is: Czech (Czech Republic)’
  69. ‘cy’ is: Welsh’
  70. ‘cy_GB’ is: Welsh (United Kingdom)’
  71. ‘da’ is: Danish’
  72. ‘da_DK’ is: Danish (Denmark)’
  73. ‘dav’ is: Taita’
  74. ‘dav_KE’ is: Taita (Kenya)’
  75. ‘de’ is: German’
  76. ‘de_AT’ is: German (Austria)’
  77. ‘de_BE’ is: German (Belgium)’
  78. ‘de_CH’ is: German (Switzerland)’
  79. ‘de_DE’ is: German (Germany)’
  80. ‘de_LI’ is: German (Liechtenstein)’
  81. ‘de_LU’ is: German (Luxembourg)’
  82. ‘dje’ is: Zarma’
  83. ‘dje_NE’ is: Zarma (Niger)’
  84. ‘dua’ is: Duala’
  85. ‘dua_CM’ is: Duala (Cameroon)’
  86. ‘dyo’ is: Jola-Fonyi’
  87. ‘dyo_SN’ is: Jola-Fonyi (Senegal)’
  88. ‘ebu’ is: Embu’
  89. ‘ebu_KE’ is: Embu (Kenya)’
  90. ‘ee’ is: Ewe’
  91. ‘ee_GH’ is: Ewe (Ghana)’
  92. ‘ee_TG’ is: Ewe (Togo)’
  93. ‘el’ is: Greek’
  94. ‘el_CY’ is: Greek (Cyprus)’
  95. ‘el_GR’ is: Greek (Greece)’
  96. ‘en’ is: English’
  97. ‘en_AS’ is: English (American Samoa)’
  98. ‘en_AU’ is: English (Australia)’
  99. ‘en_BB’ is: English (Barbados)’
  100. ‘en_BE’ is: English (Belgium)’
  101. ‘en_BM’ is: English (Bermuda)’
  102. ‘en_BW’ is: English (Botswana)’
  103. ‘en_BZ’ is: English (Belize)’
  104. ‘en_CA’ is: English (Canada)’
  105. ‘en_GB’ is: English (United Kingdom)’
  106. ‘en_GU’ is: English (Guam)’
  107. ‘en_GY’ is: English (Guyana)’
  108. ‘en_HK’ is: English (Hong Kong SAR China)’
  109. ‘en_IE’ is: English (Ireland)’
  110. ‘en_IN’ is: English (India)’
  111. ‘en_JM’ is: English (Jamaica)’
  112. ‘en_MH’ is: English (Marshall Islands)’
  113. ‘en_MP’ is: English (Northern Mariana Islands)’
  114. ‘en_MT’ is: English (Malta)’
  115. ‘en_MU’ is: English (Mauritius)’
  116. ‘en_NA’ is: English (Namibia)’
  117. ‘en_NZ’ is: English (New Zealand)’
  118. ‘en_PH’ is: English (Philippines)’
  119. ‘en_PK’ is: English (Pakistan)’
  120. ‘en_SG’ is: English (Singapore)’
  121. ‘en_TT’ is: English (Trinidad and Tobago)’
  122. ‘en_UM’ is: English (U.S. Minor Outlying Islands)’
  123. ‘en_US’ is: English (United States)’
  124. ‘en_US_POSIX’ is: English (United States, Computer)’
  125. ‘en_VI’ is: English (U.S. Virgin Islands)’
  126. ‘en_ZA’ is: English (South Africa)’
  127. ‘en_ZW’ is: English (Zimbabwe)’
  128. ‘eo’ is: Esperanto’
  129. ‘es’ is: Spanish’
  130. ‘es_419′ is: Spanish (Latin America)’
  131. ‘es_AR’ is: Spanish (Argentina)’
  132. ‘es_BO’ is: Spanish (Bolivia)’
  133. ‘es_CL’ is: Spanish (Chile)’
  134. ‘es_CO’ is: Spanish (Colombia)’
  135. ‘es_CR’ is: Spanish (Costa Rica)’
  136. ‘es_DO’ is: Spanish (Dominican Republic)’
  137. ‘es_EC’ is: Spanish (Ecuador)’
  138. ‘es_ES’ is: Spanish (Spain)’
  139. ‘es_GQ’ is: Spanish (Equatorial Guinea)’
  140. ‘es_GT’ is: Spanish (Guatemala)’
  141. ‘es_HN’ is: Spanish (Honduras)’
  142. ‘es_MX’ is: Spanish (Mexico)’
  143. ‘es_NI’ is: Spanish (Nicaragua)’
  144. ‘es_PA’ is: Spanish (Panama)’
  145. ‘es_PE’ is: Spanish (Peru)’
  146. ‘es_PR’ is: Spanish (Puerto Rico)’
  147. ‘es_PY’ is: Spanish (Paraguay)’
  148. ‘es_SV’ is: Spanish (El Salvador)’
  149. ‘es_US’ is: Spanish (United States)’
  150. ‘es_UY’ is: Spanish (Uruguay)’
  151. ‘es_VE’ is: Spanish (Venezuela)’
  152. ‘et’ is: Estonian’
  153. ‘et_EE’ is: Estonian (Estonia)’
  154. ‘eu’ is: Basque’
  155. ‘eu_ES’ is: Basque (Spain)’
  156. ‘ewo’ is: Ewondo’
  157. ‘ewo_CM’ is: Ewondo (Cameroon)’
  158. ‘fa’ is: Persian’
  159. ‘fa_AF’ is: Persian (Afghanistan)’
  160. ‘fa_IR’ is: Persian (Iran)’
  161. ‘ff’ is: Fulah’
  162. ‘ff_SN’ is: Fulah (Senegal)’
  163. ‘fi’ is: Finnish’
  164. ‘fi_FI’ is: Finnish (Finland)’
  165. ‘fil’ is: Filipino’
  166. ‘fil_PH’ is: Filipino (Philippines)’
  167. ‘fo’ is: Faroese’
  168. ‘fo_FO’ is: Faroese (Faroe Islands)’
  169. ‘fr’ is: French’
  170. ‘fr_BE’ is: French (Belgium)’
  171. ‘fr_BF’ is: French (Burkina Faso)’
  172. ‘fr_BI’ is: French (Burundi)’
  173. ‘fr_BJ’ is: French (Benin)’
  174. ‘fr_BL’ is: French (Saint Barthélemy)’
  175. ‘fr_CA’ is: French (Canada)’
  176. ‘fr_CD’ is: French (Congo – Kinshasa)’
  177. ‘fr_CF’ is: French (Central African Republic)’
  178. ‘fr_CG’ is: French (Congo – Brazzaville)’
  179. ‘fr_CH’ is: French (Switzerland)’
  180. ‘fr_CI’ is: French (Côte d’Ivoire)’
  181. ‘fr_CM’ is: French (Cameroon)’
  182. ‘fr_DJ’ is: French (Djibouti)’
  183. ‘fr_FR’ is: French (France)’
  184. ‘fr_GA’ is: French (Gabon)’
  185. ‘fr_GF’ is: French (French Guiana)’
  186. ‘fr_GN’ is: French (Guinea)’
  187. ‘fr_GP’ is: French (Guadeloupe)’
  188. ‘fr_GQ’ is: French (Equatorial Guinea)’
  189. ‘fr_KM’ is: French (Comoros)’
  190. ‘fr_LU’ is: French (Luxembourg)’
  191. ‘fr_MC’ is: French (Monaco)’
  192. ‘fr_MF’ is: French (Saint Martin)’
  193. ‘fr_MG’ is: French (Madagascar)’
  194. ‘fr_ML’ is: French (Mali)’
  195. ‘fr_MQ’ is: French (Martinique)’
  196. ‘fr_NE’ is: French (Niger)’
  197. ‘fr_RE’ is: French (Réunion)’
  198. ‘fr_RW’ is: French (Rwanda)’
  199. ‘fr_SN’ is: French (Senegal)’
  200. ‘fr_TD’ is: French (Chad)’
  201. ‘fr_TG’ is: French (Togo)’
  202. ‘fr_YT’ is: French (Mayotte)’
  203. ‘ga’ is: Irish’
  204. ‘ga_IE’ is: Irish (Ireland)’
  205. ‘gl’ is: Galician’
  206. ‘gl_ES’ is: Galician (Spain)’
  207. ‘gsw’ is: Swiss German’
  208. ‘gsw_CH’ is: Swiss German (Switzerland)’
  209. ‘gu’ is: Gujarati’
  210. ‘gu_IN’ is: Gujarati (India)’
  211. ‘guz’ is: Gusii’
  212. ‘guz_KE’ is: Gusii (Kenya)’
  213. ‘gv’ is: Manx’
  214. ‘gv_GB’ is: Manx (United Kingdom)’
  215. ‘ha’ is: Hausa’
  216. ‘ha_Latn’ is: Hausa (Latin)’
  217. ‘ha_Latn_GH’ is: Hausa (Latin, Ghana)’
  218. ‘ha_Latn_NE’ is: Hausa (Latin, Niger)’
  219. ‘ha_Latn_NG’ is: Hausa (Latin, Nigeria)’
  220. ‘haw’ is: Hawaiian’
  221. ‘haw_US’ is: Hawaiian (United States)’
  222. ‘he’ is: Hebrew’
  223. ‘he_IL’ is: Hebrew (Israel)’
  224. ‘hi’ is: Hindi’
  225. ‘hi_IN’ is: Hindi (India)’
  226. ‘hr’ is: Croatian’
  227. ‘hr_HR’ is: Croatian (Croatia)’
  228. ‘hu’ is: Hungarian’
  229. ‘hu_HU’ is: Hungarian (Hungary)’
  230. ‘hy’ is: Armenian’
  231. ‘hy_AM’ is: Armenian (Armenia)’
  232. ‘id’ is: Indonesian’
  233. ‘id_ID’ is: Indonesian (Indonesia)’
  234. ‘ig’ is: Igbo’
  235. ‘ig_NG’ is: Igbo (Nigeria)’
  236. ‘ii’ is: Sichuan Yi’
  237. ‘ii_CN’ is: Sichuan Yi (China)’
  238. ‘is’ is: Icelandic’
  239. ‘is_IS’ is: Icelandic (Iceland)’
  240. ‘it’ is: Italian’
  241. ‘it_CH’ is: Italian (Switzerland)’
  242. ‘it_IT’ is: Italian (Italy)’
  243. ‘ja’ is: Japanese’
  244. ‘ja_JP’ is: Japanese (Japan)’
  245. ‘jmc’ is: Machame’
  246. ‘jmc_TZ’ is: Machame (Tanzania)’
  247. ‘ka’ is: Georgian’
  248. ‘ka_GE’ is: Georgian (Georgia)’
  249. ‘kab’ is: Kabyle’
  250. ‘kab_DZ’ is: Kabyle (Algeria)’
  251. ‘kam’ is: Kamba’
  252. ‘kam_KE’ is: Kamba (Kenya)’
  253. ‘kde’ is: Makonde’
  254. ‘kde_TZ’ is: Makonde (Tanzania)’
  255. ‘kea’ is: Kabuverdianu’
  256. ‘kea_CV’ is: Kabuverdianu (Cape Verde)’
  257. ‘khq’ is: Koyra Chiini’
  258. ‘khq_ML’ is: Koyra Chiini (Mali)’
  259. ‘ki’ is: Kikuyu’
  260. ‘ki_KE’ is: Kikuyu (Kenya)’
  261. ‘kk’ is: Kazakh’
  262. ‘kk_Cyrl’ is: Kazakh (Cyrillic)’
  263. ‘kk_Cyrl_KZ’ is: Kazakh (Cyrillic, Kazakhstan)’
  264. ‘kl’ is: Kalaallisut’
  265. ‘kl_GL’ is: Kalaallisut (Greenland)’
  266. ‘kln’ is: Kalenjin’
  267. ‘kln_KE’ is: Kalenjin (Kenya)’
  268. ‘km’ is: Khmer’
  269. ‘km_KH’ is: Khmer (Cambodia)’
  270. ‘kn’ is: Kannada’
  271. ‘kn_IN’ is: Kannada (India)’
  272. ‘ko’ is: Korean’
  273. ‘ko_KR’ is: Korean (South Korea)’
  274. ‘kok’ is: Konkani’
  275. ‘kok_IN’ is: Konkani (India)’
  276. ‘ksb’ is: Shambala’
  277. ‘ksb_TZ’ is: Shambala (Tanzania)’
  278. ‘ksf’ is: Bafia’
  279. ‘ksf_CM’ is: Bafia (Cameroon)’
  280. ‘kw’ is: Cornish’
  281. ‘kw_GB’ is: Cornish (United Kingdom)’
  282. ‘lag’ is: Langi’
  283. ‘lag_TZ’ is: Langi (Tanzania)’
  284. ‘lg’ is: Ganda’
  285. ‘lg_UG’ is: Ganda (Uganda)’
  286. ‘ln’ is: Lingala’
  287. ‘ln_CD’ is: Lingala (Congo – Kinshasa)’
  288. ‘ln_CG’ is: Lingala (Congo – Brazzaville)’
  289. ‘lt’ is: Lithuanian’
  290. ‘lt_LT’ is: Lithuanian (Lithuania)’
  291. ‘lu’ is: Luba-Katanga’
  292. ‘lu_CD’ is: Luba-Katanga (Congo – Kinshasa)’
  293. ‘luo’ is: Luo’
  294. ‘luo_KE’ is: Luo (Kenya)’
  295. ‘luy’ is: Luyia’
  296. ‘luy_KE’ is: Luyia (Kenya)’
  297. ‘lv’ is: Latvian’
  298. ‘lv_LV’ is: Latvian (Latvia)’
  299. ‘mas’ is: Masai’
  300. ‘mas_KE’ is: Masai (Kenya)’
  301. ‘mas_TZ’ is: Masai (Tanzania)’
  302. ‘mer’ is: Meru’
  303. ‘mer_KE’ is: Meru (Kenya)’
  304. ‘mfe’ is: Morisyen’
  305. ‘mfe_MU’ is: Morisyen (Mauritius)’
  306. ‘mg’ is: Malagasy’
  307. ‘mg_MG’ is: Malagasy (Madagascar)’
  308. ‘mgh’ is: Makhuwa-Meetto’
  309. ‘mgh_MZ’ is: Makhuwa-Meetto (Mozambique)’
  310. ‘mk’ is: Macedonian’
  311. ‘mk_MK’ is: Macedonian (Macedonia)’
  312. ‘ml’ is: Malayalam’
  313. ‘ml_IN’ is: Malayalam (India)’
  314. ‘mr’ is: Marathi’
  315. ‘mr_IN’ is: Marathi (India)’
  316. ‘ms’ is: Malay’
  317. ‘ms_BN’ is: Malay (Brunei)’
  318. ‘ms_MY’ is: Malay (Malaysia)’
  319. ‘mt’ is: Maltese’
  320. ‘mt_MT’ is: Maltese (Malta)’
  321. ‘mua’ is: Mundang’
  322. ‘mua_CM’ is: Mundang (Cameroon)’
  323. ‘my’ is: Burmese’
  324. ‘my_MM’ is: Burmese (Myanmar [Burma])’
  325. ‘naq’ is: Nama’
  326. ‘naq_NA’ is: Nama (Namibia)’
  327. ‘nb’ is: Norwegian Bokmål’
  328. ‘nb_NO’ is: Norwegian Bokmål (Norway)’
  329. ‘nd’ is: North Ndebele’
  330. ‘nd_ZW’ is: North Ndebele (Zimbabwe)’
  331. ‘ne’ is: Nepali’
  332. ‘ne_IN’ is: Nepali (India)’
  333. ‘ne_NP’ is: Nepali (Nepal)’
  334. ‘nl’ is: Dutch’
  335. ‘nl_AW’ is: Dutch (Aruba)’
  336. ‘nl_BE’ is: Dutch (Belgium)’
  337. ‘nl_NL’ is: Dutch (Netherlands)’
  338. ‘nmg’ is: Kwasio’
  339. ‘nmg_CM’ is: Kwasio (Cameroon)’
  340. ‘nn’ is: Norwegian Nynorsk’
  341. ‘nn_NO’ is: Norwegian Nynorsk (Norway)’
  342. ‘nus’ is: Nuer’
  343. ‘nus_SD’ is: Nuer (Sudan)’
  344. ‘nyn’ is: Nyankole’
  345. ‘nyn_UG’ is: Nyankole (Uganda)’
  346. ‘om’ is: Oromo’
  347. ‘om_ET’ is: Oromo (Ethiopia)’
  348. ‘om_KE’ is: Oromo (Kenya)’
  349. ‘or’ is: Oriya’
  350. ‘or_IN’ is: Oriya (India)’
  351. ‘pa’ is: Punjabi’
  352. ‘pa_Arab’ is: Punjabi (Arabic)’
  353. ‘pa_Arab_PK’ is: Punjabi (Arabic, Pakistan)’
  354. ‘pa_Guru’ is: Punjabi (Gurmukhi)’
  355. ‘pa_Guru_IN’ is: Punjabi (Gurmukhi, India)’
  356. ‘pl’ is: Polish’
  357. ‘pl_PL’ is: Polish (Poland)’
  358. ‘ps’ is: Pashto’
  359. ‘ps_AF’ is: Pashto (Afghanistan)’
  360. ‘pt’ is: Portuguese’
  361. ‘pt_AO’ is: Portuguese (Angola)’
  362. ‘pt_BR’ is: Portuguese (Brazil)’
  363. ‘pt_GW’ is: Portuguese (Guinea-Bissau)’
  364. ‘pt_MZ’ is: Portuguese (Mozambique)’
  365. ‘pt_PT’ is: Portuguese (Portugal)’
  366. ‘pt_ST’ is: Portuguese (São Tomé and Príncipe)’
  367. ‘rm’ is: Romansh’
  368. ‘rm_CH’ is: Romansh (Switzerland)’
  369. ‘rn’ is: Rundi’
  370. ‘rn_BI’ is: Rundi (Burundi)’
  371. ‘ro’ is: Romanian’
  372. ‘ro_MD’ is: Romanian (Moldova)’
  373. ‘ro_RO’ is: Romanian (Romania)’
  374. ‘rof’ is: Rombo’
  375. ‘rof_TZ’ is: Rombo (Tanzania)’
  376. ‘ru’ is: Russian’
  377. ‘ru_MD’ is: Russian (Moldova)’
  378. ‘ru_RU’ is: Russian (Russia)’
  379. ‘ru_UA’ is: Russian (Ukraine)’
  380. ‘rw’ is: Kinyarwanda’
  381. ‘rw_RW’ is: Kinyarwanda (Rwanda)’
  382. ‘rwk’ is: Rwa’
  383. ‘rwk_TZ’ is: Rwa (Tanzania)’
  384. ‘saq’ is: Samburu’
  385. ‘saq_KE’ is: Samburu (Kenya)’
  386. ‘sbp’ is: Sangu’
  387. ‘sbp_TZ’ is: Sangu (Tanzania)’
  388. ‘seh’ is: Sena’
  389. ‘seh_MZ’ is: Sena (Mozambique)’
  390. ‘ses’ is: Koyraboro Senni’
  391. ‘ses_ML’ is: Koyraboro Senni (Mali)’
  392. ‘sg’ is: Sango’
  393. ‘sg_CF’ is: Sango (Central African Republic)’
  394. ‘shi’ is: Tachelhit’
  395. ‘shi_Latn’ is: Tachelhit (Latin)’
  396. ‘shi_Latn_MA’ is: Tachelhit (Latin, Morocco)’
  397. ‘shi_Tfng’ is: Tachelhit (Tifinagh)’
  398. ‘shi_Tfng_MA’ is: Tachelhit (Tifinagh, Morocco)’
  399. ‘si’ is: Sinhala’
  400. ‘si_LK’ is: Sinhala (Sri Lanka)’
  401. ‘sk’ is: Slovak’
  402. ‘sk_SK’ is: Slovak (Slovakia)’
  403. ‘sl’ is: Slovenian’
  404. ‘sl_SI’ is: Slovenian (Slovenia)’
  405. ‘sn’ is: Shona’
  406. ‘sn_ZW’ is: Shona (Zimbabwe)’
  407. ‘so’ is: Somali’
  408. ‘so_DJ’ is: Somali (Djibouti)’
  409. ‘so_ET’ is: Somali (Ethiopia)’
  410. ‘so_KE’ is: Somali (Kenya)’
  411. ‘so_SO’ is: Somali (Somalia)’
  412. ‘sq’ is: Albanian’
  413. ‘sq_AL’ is: Albanian (Albania)’
  414. ‘sr’ is: Serbian’
  415. ‘sr_Cyrl’ is: Serbian (Cyrillic)’
  416. ‘sr_Cyrl_BA’ is: Serbian (Cyrillic, Bosnia and Herzegovina)’
  417. ‘sr_Cyrl_ME’ is: Serbian (Cyrillic, Montenegro)’
  418. ‘sr_Cyrl_RS’ is: Serbian (Cyrillic, Serbia)’
  419. ‘sr_Latn’ is: Serbian (Latin)’
  420. ‘sr_Latn_BA’ is: Serbian (Latin, Bosnia and Herzegovina)’
  421. ‘sr_Latn_ME’ is: Serbian (Latin, Montenegro)’
  422. ‘sr_Latn_RS’ is: Serbian (Latin, Serbia)’
  423. ‘sv’ is: Swedish’
  424. ‘sv_FI’ is: Swedish (Finland)’
  425. ‘sv_SE’ is: Swedish (Sweden)’
  426. ‘sw’ is: Swahili’
  427. ‘sw_KE’ is: Swahili (Kenya)’
  428. ‘sw_TZ’ is: Swahili (Tanzania)’
  429. ‘swc’ is: Congo Swahili’
  430. ‘swc_CD’ is: Congo Swahili (Congo – Kinshasa)’
  431. ‘ta’ is: Tamil’
  432. ‘ta_IN’ is: Tamil (India)’
  433. ‘ta_LK’ is: Tamil (Sri Lanka)’
  434. ‘te’ is: Telugu’
  435. ‘te_IN’ is: Telugu (India)’
  436. ‘teo’ is: Teso’
  437. ‘teo_KE’ is: Teso (Kenya)’
  438. ‘teo_UG’ is: Teso (Uganda)’
  439. ‘th’ is: Thai’
  440. ‘th_TH’ is: Thai (Thailand)’
  441. ‘ti’ is: Tigrinya’
  442. ‘ti_ER’ is: Tigrinya (Eritrea)’
  443. ‘ti_ET’ is: Tigrinya (Ethiopia)’
  444. ‘to’ is: Tonga’
  445. ‘to_TO’ is: Tonga (Tonga)’
  446. ‘tr’ is: Turkish’
  447. ‘tr_TR’ is: Turkish (Turkey)’
  448. ‘twq’ is: Tasawaq’
  449. ‘twq_NE’ is: Tasawaq (Niger)’
  450. ‘tzm’ is: Central Morocco Tamazight’
  451. ‘tzm_Latn’ is: Central Morocco Tamazight (Latin)’
  452. ‘tzm_Latn_MA’ is: Central Morocco Tamazight (Latin, Morocco)’
  453. ‘uk’ is: Ukrainian’
  454. ‘uk_UA’ is: Ukrainian (Ukraine)’
  455. ‘ur’ is: Urdu’
  456. ‘ur_IN’ is: Urdu (India)’
  457. ‘ur_PK’ is: Urdu (Pakistan)’
  458. ‘uz’ is: Uzbek’
  459. ‘uz_Arab’ is: Uzbek (Arabic)’
  460. ‘uz_Arab_AF’ is: Uzbek (Arabic, Afghanistan)’
  461. ‘uz_Cyrl’ is: Uzbek (Cyrillic)’
  462. ‘uz_Cyrl_UZ’ is: Uzbek (Cyrillic, Uzbekistan)’
  463. ‘uz_Latn’ is: Uzbek (Latin)’
  464. ‘uz_Latn_UZ’ is: Uzbek (Latin, Uzbekistan)’
  465. ‘vai’ is: Vai’
  466. ‘vai_Latn’ is: Vai (Latin)’
  467. ‘vai_Latn_LR’ is: Vai (Latin, Liberia)’
  468. ‘vai_Vaii’ is: Vai (Vai)’
  469. ‘vai_Vaii_LR’ is: Vai (Vai, Liberia)’
  470. ‘vi’ is: Vietnamese’
  471. ‘vi_VN’ is: Vietnamese (Vietnam)’
  472. ‘vun’ is: Vunjo’
  473. ‘vun_TZ’ is: Vunjo (Tanzania)’
  474. ‘xog’ is: Soga’
  475. ‘xog_UG’ is: Soga (Uganda)’
  476. ‘yav’ is: Yangben’
  477. ‘yav_CM’ is: Yangben (Cameroon)’
  478. ‘yo’ is: Yoruba’
  479. ‘yo_NG’ is: Yoruba (Nigeria)’
  480. ‘zh’ is: Chinese’
  481. ‘zh_Hans’ is: Chinese (Simplified)’
  482. ‘zh_Hans_CN’ is: Chinese (Simplified, China)’
  483. ‘zh_Hans_HK’ is: Chinese (Simplified, Hong Kong SAR China)’
  484. ‘zh_Hans_MO’ is: Chinese (Simplified, Macau SAR China)’
  485. ‘zh_Hans_SG’ is: Chinese (Simplified, Singapore)’
  486. ‘zh_Hant’ is: Chinese (Traditional)’
  487. ‘zh_Hant_HK’ is: Chinese (Traditional, Hong Kong SAR China)’
  488. ‘zh_Hant_MO’ is: Chinese (Traditional, Macau SAR China)’
  489. ‘zh_Hant_TW’ is: Chinese (Traditional, Taiwan)’
  490. ‘zu’ is: Zulu’
  491. ‘zu_ZA’ is: Zulu (South Africa)’

Continue Reading →
0

Roundup: Analytics

So the latest add to the Wenderlich tutorial empire is a post on adding analytics to your games,

Game Analytics 101

… using yet another analytics service we hadn’t heard of before but does look interesting: Playtomic!

The Playtomic APIs drop right into your game and are so easy novice developers implement it without hassle. The APIs are available for Flash games using ActionScript 3 or ActionScript 2, for HTML5 games using JavaScript (like the awesome ImpactJS), for iPhone/iPod/iPad games using Objective C, and for web/mobile games built on Unity3d, Android games using Java or C# (Mono for Android), and C++ games…

That does sound like a pretty solid choice for the multiplatform game developer, indeed. And their SDK comes as source, which is always a nice feature too.

This looks like a good place to do a bit of a roundup of current major contenders in that analytics space, since it’s been quite a while since our last one. Quite a while indeed.

Localytics that we mentioned recently still looks like what we’d call our first choice for an iOS only app.

Flurry just seems to keep on growing and adding features.

Google Analytics seems to win friends here and there. And hey, it did top this list of Best Real Time Analytic Tools.

Apsalar looks like a definitely interesting contender:

The principle of re-engagement is what Apsalar is pinning its product offering on. It calls the environment it works in “mobile engagement management” (MEM) and is similar to what analytics company Flurry, likely Apsalar’s closest competitor, does with its analytics and AppCircle Re-Engagement tool. Localytics uses its data to help premium publishers push notifications to readers. Socialize and BeInToo have engagement layers based on social and gamification layers. To a certain extent, Apsalar is playing in all of these realms…

This Quora question lists some more you might want to look into.

And if you’re still on the “so what does this all do for me exactly?” side of things, might want to check out

Wooga: Building a Successful Social Game by Combining Metrics With Emotion

Making Better Decisions Based On Tracking Data

Any other of the plethora of analytic tools out there that you think compelling enough to merit in depth evaluation for an iOS project, Dear Reader? Or have any strikingly postive/negative experiences with any of these to report?

Continue Reading →
0

Dependency Graphing

Here’s a little script to help you delight in/be horrified by your program structure:

nst / objc_dep

…So how do we achieve loose coupling in our own code? Well, at first, we need to get a better idea on the current coupling. Let us define class dependancy: class A depends on B iff class A imports class B header. With such a definition, we can draw a graph of dependancies between classes by considering the Objective-C #import directives in each class. We assume here that the files are named according to the classes they contain.

I wrote objc_dep.py, a Python script which extracts imports from Objective-C source code. The output can then be displayed in GraphViz or OmniGraffle. You can then see an oriented graph of dependancies between classes…

687474703a2f2f736572696f742e63682f626c6f672f706963732f6f626a635f6465702f6c617267657270726f6a6563742e706e67.png

Just the thing to hopelessly confuse those documentation-insisting project managers!

h/t: @jomtwi,@myell0w, maniacdev!  

Continue Reading →
0

CeedMath + CeedGL

Here’s a couple of new libraries that look worth keeping an eye on for your hardcore computational needs:

rsebbe / CeedMath

CeedMath is a library for doing computer graphics math on Mac and iPhone, although it could be ported to other environment easily.

CeedMath is about computation with vectors and matrices, as well as boxes, rays, quaternions, and other CG types. It was designed to be easy to use and understand, and at the same time small and efficient.

CeedMath has simple data structures and operates easily with other formats. It is implemented in C with a form of template that allows a single implementation for both float and double types. That makes it possible to use it as is in Obj-C code…

rsebbe / CeedGL

CeedGL is a library that encapsulates OpenGL objects into Objective-C objects. It does not attempt to force a coding style or to define a specific scene graph, but instead aims at making it easier to work with OpenGL from Objective-C.

Modern OpenGL (ES 2.0, Desktop 3.0) defines a number of “objects”, that is, vertex buffers, textures, shaders, programs, framebuffers, etc. that are typically represented by handles (integers). CeedGL proposes to model all these and their relationships with each other as actual Objective-C objects and associated methods. This in turn makes it easier to store and manipulate GL data in your app structure.

CeedGL also defines the concept of “draw command” which ties together vertex buffers, textures, shaders to provide reusable drawing primitives. It also makes it easier to access uniforms and attributes in shaders…

h/t: @rsebbe!

Continue Reading →
0

Autorenewable Warning

Good article here on the problems with using autorenewable IAP subscriptions:

The limited world of auto-renewable subscriptions

We’d particularly like to draw your attention to this bit, what happened after he decided to implement them:

… So I sucked it up and submitted 4.0 with the auto-renewing subscription and the complex server-side code to support it.

It was rejected. I was told via phone about an apparently unwritten rule that I was violating: auto-renewing subscriptions can only be used for apps that deliver “new content” during each renewal period, like magazines. Charging a monthly price for an ongoing service is not allowed.

This Stack Overflow member got it in writing

… Reading between the lines on my rejection call, and seeing it codified more clearly here, it’s obvious that only traditional-style media publishing apps can use auto-renewable subscriptions. They were created solely for the existing newspaper and magazine industry, not web services…

We had one of these rejections happen on one of our projects a little while ago too; “ad-free game play” crosses the unwritten line quite firmly, it seems. That one we had thought was pushing it a bit so we’d found it a mild surprise but not terribly shocking it got rejected; but if you can’t use autorenewables for something that involves ongoing server costs either, well that’s rather more of a design concern, isn’t it?

At the very least, if you’re planning something that’s built around autorenewing revenue, you should carefully read the above links for other people’s experiences, and make sure you have a Plan B ready if Apple in their wisdom decides you’re not playing right!

Continue Reading →
0
Page 1 of 96 12345...»