Question

The situation:

I have a basic app with some central functionality.
My clients (potentially many dozens) all want their own customized apps in the app store.

The problem

If I have dozens of apps in the app store and I want to change some of the core functionality, I would have to update each file in the corresponding project, compile, go through iTunes Connect, upload etc. Every small change could potentially take days of mindless work.

The question

Is there a way I can use a versioning system like git to administer the parts of my code with the core functionality separately, so that all projects are updated automatically when I commit a change to the core files?

Is there any other way to make this process easier to manage?

Was it helpful?

Solution

I'm not real familiar with the Xcode "target" structure, so that may in fact be a better approach. But you can definitely use git for this.

Probably you want a "master" branch where all the universal stuff lives, then a branch for each "customized" version of the app.

When there are changes in the master, you'll merge those changes through each of the custom branches. Then from each branch, you'll build a product to submit to the store.

In each branch, you'll separately set the app id, whatever art and text changes are needed from one version to the next, whatever key setup is appropriate to this version, etc. All those settings can stay local to the custom version branch.

This is a perfectly valid workflow in git. It's not how most people use it, but that's because most people are headed to ONE production product, not many.

OTHER TIPS

Typically if you have some core functionality that you need to reuse in iOS you'll either create a static library that you can include in your other projects or (if the core functionality includes things like assets which can't be included in a static library) you'll have a sub-project. In both cases, though, you'll want to make sure each of your app projects has a target dependency with your core functionality project so it is always rebuilt with the latest changes.

  1. Create a MundiCoreFramework xcode project that has all your core functionality and which compiles without having to reference client-specific code
  2. Create a git repo for this core framework project
  3. In each of your app projects that use this core functionality, add the MundiCoreFramework as a git submodule and add it as a subproject to the app project.
  4. Whenever you update the core framework you can issues git sumodule update for each app and recompile.

Another option might be using git submodules to organize common code, and then have each individual project simply add your common code as a submodule.

You can use Target to customize the app for each client, this would mean that you could keep one code base and have multiple apps with the same code base.

This will not solve the updating the app in the appstore part, which you would still have to do by hand as var as I'm aware of.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top