a former coworker (artist) and myself (programmer) are currently developing a small game together in our free time. Since he is not at all interested in learning how to use XCode, save making his own builds (I don't blame him, he is a great artist, but with only little understanding for technical stuff), this is how we have been working so far:

  • We share a dropbox folder where we store all the ingame artwork
  • Once enough or important changes have been made, I'd create a build (ad hoc distribution) and send it to him
  • From time to time we'll meet and work together a couple of hours, maybe once a week since we live in different cities

This was ok for most of the time. However now we're busy finetuning the content and game mechanics. In this development stage, our workflow is just to slow and "disconnected". Whenever he is working on the artwork, he'll have to wait for me to make a build to be able to see the changes reflected in the actual context. Since we're not always working at the same time, this sometimes means he'll have to wait for days - not at all satisfying.

So, what I'd like to know..: What would be the best way to allow him to change the content without the need to rebuild the game?

I know the contents of an iOS app bundle cannot be changed once compiled. So here's what I was thinking about so far:

  • move the content to the documents folder during development so that it can be accessed via iTunes (handling propably awkward in light of the amount of files in question)
  • incorporate dropbox into the game, so that the content could be loaded right from our shared folder (extra work needed to implement this, dropbox restricted to 5000 API calls per day while not in production status)
  • load the content from a webserver (even more complicated compared to using the dropbox)

What do you guys think? Are there better and more comfortable ways to achieve smooth collaboration in our case? Am I missing something?

Thanks alot!!

Edit: At the moment, I have no plans whatsoever to teach my artist how to make his own builds. You can seriously consider this to be an option only as long as you don't know him in person. He's a great artist, though.

So this question boils down to:

How do I modify files / get new files into an iPhone app after it has been built - as easily as possible and, again, without rebuilding the app?

This has to work during development only, by the way, so dirty approaches are welcome.

6

There are 6 answers

7
Moshe On BEST ANSWER

In some of the WWDC 2010 videos, Apple discusses this. They advise loading artwork from the web and applying it to UIKit elements or OpenGL contexts programatically.

This is complicated, but a good method, because then you make NO changes to your binary and then your artists can work freely, upload the art to a server and you're golden.

I suggest a good HTTP library, like ASIHTTPRequest, to make those requests easier.

2
Timothy Baldridge On

I would say that your first option is probably the best. You state the issue with transferring a large number of files through iTunes. To fix that I would to the following:

Create an app to create "package" files. It can take a folder of data and save it in a single in file in the following format:

int - length of name string
char[] - filename  
int - length of data chunk
char[] - data chunk

Do this for every file in the folder, and you'll be left with a single image file. Copy that through iTunes, and have your game look at that same folder.

So now his workflow is as follows: 1) edit art 2) run your asset compiler 3) copy the asset file to the device 4) load the game

I hope this helps.

4
NRaf On

I would say set up a CVS repository. When you're happy with what you have, you can commit your code. He can update his code and change the images however he wants. When he's happy, he can commit his changes so you also have the latest images (as long as he doesn't mess around with out files, it should be fine).

Teach him how to update the images, how to deploy to a device, how to commit to the repository and it should go smooth (albeit I think there'd be some teething issues).

0
Nick Moore On

Go with the Web server/dropbox option. You might be able to do this by subclassing or extending UIImage and using the subclass throughout your app.

3
Rajavanya Subramaniyan On

Jailbreak your iPhone, Then you can ssh into the device using Cyberduck. That way you can navigate to the app's Resources folder (or) App's document folder and change files as you want.

You will have to make sure the folder permissions are proper, or else you need to change them. Also in your game, in the first run, make sure all your resources are getting copied to the App's documents folder.

2
garph0 On

You could also do something like this:

  • modify the app so on its first start it copies the images into the document folder
  • load the images from the doc folder instead than from the bundle
  • with a tool like iPhone Explorer you can then overwrite the files in the document folder

it's a bit boring to find the actual app in the list that iPhone explorer gives you, but then it's just a matter of dragging and dropping the files into the right folder.

It may work also with some file in the .app bundle, but I didn't found any suitable app to try it from there. Anyway if you want to keep the thing almost hassle free for your artist you may want to put everything in a Documents subfolder nonetheless :)


EDIT

I just tried to edit something into the .app folder and it worked OK, so you don't even have to change your code if you use iPhone Explorer to replace images.

Just remember to disable the PNG optimization if you're using PNGs. Look here for the explanation (search for "PNGs:")

good luck :)