10

Using Xcode (to develop on iOS) I want to create a second project that it is the same as a first project but some classes are differents.

Exactly, I'm creating an IPhone App and I want to offer a free version and a premium version. Actually, the code of the projects are identical but changes some classes.

The problem is I don't want support two projects. If I modify a class, then I have to modify the same change on the other project. It is very redundant.

Besides, the project are pushed to a remote GIT respository.

And one last note, an iOS App is identify using an ID associated with the project.

So, I need two differents projects?

Which is the best solution to create two iOS App projects in Xcode sharing the classes, but changing two o three classes?

Thanks

Tim
  • 8,932
  • 4
  • 43
  • 64
jlmg5564
  • 1,380
  • 13
  • 28

3 Answers3

19

I want to offer a free version and a premium version.

In this case, you do not need to create two apps in two projects: all you need is a second target for your premium version. Here is a link that explains how to create and manage multiple targets in Xcode.

The process boils down to adding a target to the project, defining a separate properties plist for it, optionally setting up a preprocessor symbol for conditional compile, and using that symbol to #ifdef portions of your classes not needed in the free version.

Another common approach to managing free vs. premium offering is to provide a single version for free, and let users upgrade it to premium through an in-app purchase.

Sergey Kalinichenko
  • 714,442
  • 84
  • 1,110
  • 1,523
6

You just have to create two targets. So you'll only modify a single code base, perfect!

This tutorial will walk you through (and even uses lite/paid versions as it's example).

Tom Redman
  • 5,592
  • 4
  • 34
  • 42
0
  1. duplicate target of paid version and name it free version

  2. define macro name PaidApp=1 in paid target, then put this line of code in starting of applicationDidfinishLaunching.

    #ifdef PaidApp
    [[NSUserDefaults standardUserDefaults] setInteger:1 forKey:@"adDisabled"];
    #endif
    
  3. when free app running target, if someone purchase paid app feature then set value of @"adDisabled" to 1 (by default value of @"adDisabled" will be 0)

marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459
Ravi Kumar
  • 1,356
  • 14
  • 22