Saturday, September 17, 2011

Monday, August 29, 2011

"Put it out there!" - Corona Hackathon 2011

Last weekend I had the opportunity to travel out to the Corona Hackathon in San Francisco with my partner Tim.  Who knew what would happen?   I've never been to California before but it was something that had to be done - it was calling us there!

A quick review of the crazy weekend...

Friday - Travel
Hopped on a plane from Omaha, NE to San Francisco so we got up at 5:00 AM CST and get a 3 hour delay in Vegas so we don't get into SF until about 3 o'clock local time.  Talked to Carlos before hand and he opened up the Ansca office to us so we stopped in for a visit...

Completely in awe of the hospitality and welcoming to two schmucks like us. My point is this, Carlos and Walter want US to succeed, the developers.  In fact after talking to them I would say they are more concerned with others succeeding than themselves.  Why else would they take time to spend with us?  Two guys from Nebraska who by rights haven'd done jack, YET!  I'll treasure the conversations and stories shared as they were candid and from the heart.  I can't put a price on the value of Friday to me.  We met some of the Ansca team in the office who were just as nice and it was just great to see people working hard for something they believe in.

Saturday - Hackathon
Up early and head to the event at the pariSoma Innovation Loft.  This facility was awesome, it had exactly the right vibe and the sponsors of inMobi and Papaya were terrific.  They shared some great tips and suggestions on monetization opportunities.  Since we had a day of travel we basically had the idea of recreating the classic Mattel football game.  This was hilarious as anyone under 30 had no clue was this ancient device could be...we had an actual working on on the trip with us.

We started with a good plan, we limited our time modeling and art so we get into the coding aspect, not sure if Tim got possessed or some kind of moment of clarity washed over him but at one point he grabbed the keyboard and Lua flowed through.  For about 12 minutes he was just a vessel, it was beautiful.  We were happy to get completed what we could in the time allowed, we actually submitted about an hour early, but we were fried form the travel so we threw in the towel and grabbed some much deserved beer!

Here's a short video on where we left off...we plan on finishing this game over the next week and making it turn based to play with friends. There's another out there, but not on Android and developed in 8 hours with Corona SDk and not turn based so why not?

Sunday - Travel
Got up at 6:00 am to make a run to the Golden Gate and to Muir woods and got in a two mile hike.  Would have been especially nice to have actually seen the bridge, we drove over it but it was so foggy you couldn't see it, not even the railings!  No alcatraz, no bay, no nothing - just fog!  Guess we gotta come back now!  Back to the airport by noon and plane ride home at 9pm.


So glad to have participated in this event and so thankful to have met so many wonderfully talented and creative people - all in one room!   I really liked the end when everyone was crowding around to see everyone's creations and all the encouragement and praise towards one another was just great.  Congratulations to the winners, after all "This ain't soccer" - Walter    LOL

Catch the full recap here:  Corona Hackathon 2011

Just goes to show you that you have the most fun when you "Put it out there!"

See you next time!

Friday, July 29, 2011

Viewing Native Text Input field in the Corona Simulator

Working with the native.newTextField() tonight and I needed a way to see the field in the simulator for easy positioning.  Out of the box this is not available within the Corona SDK simulator, but thanks to this post by Jon Beebe it got me thinking... Can we just "overload" the native.newTextField() method and Hi-Jack it when we are in the simulator and instead draw a rounded edge rectangle on the screen for the sake of viewing and positioning things?  Well, yes we can!

Let me walk you through it...  I threw a simple example together to demonstrate this. (I'll keep it as small as possible, you will also need the ui.lua file from Corona examples to run this example, the other two files you need are at the bottom of the post)

In the main.lua file we simply add a label and a text input field (which will not display in the simulator without requiring in the "hijacks.lua" file)

The magic is in overloading the native.newTextField) method to do something different when we are in the simulator, but I want it to behave as normal when running on a device.  Don't let the box.setTextColor declaration in the hijacks file scare you, this is just a placeholder basically because I happen to be setting the text color in my main.lua file for the text input field.  This declaration accommodates this working in simulator mode as well as a device build without me having to toggle things or comment out things, etc.  Of course, there's other tricks for capturing text input as this still won't do that, it's just for visual representation and positioning of things.  For my release build I will just comment out the requires("hijacks") line and away I go!


local ui = require("ui")

local function init()

local g = display.newGroup()
local background = display.newRect(0,display.screenOriginY, display.contentWidth, display.contentHeight-display.screenOriginY)
background:setFillColor(111, 111, 255)


-- Handler for the native keyboard
   local fieldHandler = function( event )
-- Hide keyboard when the user clicks "Return" in this field
  if ( "submitted" == event.phase ) then
    native.setKeyboardFocus( nil )

local label = display.newText( "Location: ", 10, 252, native.systemFont, 18)

-- A native text input field (requires XCode Simulator build or device build)
inputField = native.newTextField( 100, 252, 200, 24, fieldHandler )
inputField.font = native.newFont( native.systemFont, 20 )
inputField.text = "Papillion, NE" -- example of searchable location
inputField:setTextColor( 45, 45, 45 )





module(..., package.seeall)

local priorNativeNewTextField = native.newTextField
native.newTextField = function(left, top, width, height, listener)

  local box
  if system.getInfo( "environment" ) == "simulator" then

     box = display.newRoundedRect(left, top, width, height, 12)
     box.setTextColor = function(...)
     box = priorNativeNewTextField(left, top, width, height, listener)

  return box


Tuesday, July 12, 2011

Getting your Bundle ID correct for App Store Submission using Corona SDK

My first app submission got bounced back for one simple reason:

3.4: App names in iTunes Connect and as displayed on a device should be similar, so as not to cause confusion

This is a pretty easy thing to screw up so I attempted to document the correct way to align your App name and Bundle ID so you can avoid getting bounced back like I did...

Step 1 - iTunes Connect
As soon as you know the name of your next app, you should go create a new App ID in your iTunes connect account so you can get that name reserved.

In this example I gave it an App ID of "Cool App", choose how you want the App ID Prefix created and finally set the App ID Suffix to "com.domainname.coolapp"

App ID - this is how your App is going to be searched and displayed to users
App ID Prefix -  this gets generated for you based on your provisioning profile being used
App ID Suffix - reverse DNS pattern to further uniquely identify this application

Piece of cake, no go get your application created and ready to upload!

Once you have filled in the remaining information about your application and you are ready to upload it (complete this process in iTunes Connect and your app is "Waiting for Upload" you are ready to continue...

Step 2 - build.settings

Before creating our deployment build, we need to add a couple of entries into the build.settings file, based on the information we put into iTunes Connect above...

These entries assure that the .zip package that gets submitted by Corona will match up with the expectations of the iTunes Connect information.

Now we are ready to build our deployment package, on to the last step...

Step 3 - Corona

This step is a bit tricky to me, and admittedly I don't know if it is 100% correct, however it is working for me and generating expected result in the App Store and the display device so if you have a better way please let me know!

Notice that in this dialogue for "Application name" I entered the reverse DNS Bundle ID from the iTunes Connect data.

My guess is that what happens is that Corona builds the Bundle ID based on the "Application name:" field in this dialogue box.  When I attempted to put in the App ID Description (IE Common name) of "Cool App" you will get a deployment upload error from Corona stating that your package doesn't match anything that iTunes Connect is expecting from you (based on my example here), but I still ran into a scenario where my package name passed the check but I was missing the Display Name entry in the build.settings that we did above.   This ultimately gets you the 3.4 rejection.

That's how it worked for me, so I hope it helps you!   Also, if I have made an error of if you know of another way to configure this data please let me know, but this process successfully got my application through the review and onto the market with the correct names after first getting rejected for this reason...

And just to clarify, in this example the final .zip file that gets uploaded to iTunes Connect would be called  NOT

Don't let a poor package name get you rejected and sent back around the review cycle!

Good Luck