我想在 App Store 上提供我的 iPhone 应用程序的两种不同版本——一种是免费的,受通过应用程序显示的项目数量的限制,另一种是完全不受限制的。
两个应用程序的源代码将完全相同,唯一的区别是在应用程序中存储项目的 SQLite 数据库。
我了解该应用程序的两个版本都需要具有不同的包名称和不同的图标。我试图找到一种方法来避免完全复制源代码目录以便能够自定义其中的一些内容:数据库、图标、笔尖字符串等。
有没有不复制所有内容的好方法?
我想在 App Store 上提供我的 iPhone 应用程序的两种不同版本——一种是免费的,受通过应用程序显示的项目数量的限制,另一种是完全不受限制的。
两个应用程序的源代码将完全相同,唯一的区别是在应用程序中存储项目的 SQLite 数据库。
我了解该应用程序的两个版本都需要具有不同的包名称和不同的图标。我试图找到一种方法来避免完全复制源代码目录以便能够自定义其中的一些内容:数据库、图标、笔尖字符串等。
有没有不复制所有内容的好方法?
只需在您的项目中创建第二个目标。一个可以是功能齐全的应用程序,其中包括完整的数据库,新的目标将是您的演示版本,带有演示数据库。我们用填字游戏来做到这一点,而且效果很好。然后,您可以将所有来源保存在一个地方,而不必担心事情会不同步。
明智地使用条件编译。我不知道您使用的是什么语言,但在 C/C++ 条件编译中,是使用宏预处理器和 ifdefs 完成的。你会写出类似这样的代码:
#ifdef FULL_APP
// unlimited size
#define SIZE -1
#else
#define SIZE 100
#endif
当您构建程序时,您在编译器命令行上提供适当的宏定义。
gcc program.cc -o program.o -DFULL_APP
您可以通过多种方式使用条件编译和宏预处理器来打开或关闭可执行文件中的各种功能或修改程序的其他方面。
还值得注意的是,如果用户决定升级到完整版,如果您没有适当的机制来转移现有数据,您可能会看到用户的负面反应。如果数据的内容很小并且大部分可以用文本表示,我建议实现一个 URL 方案来传递它。
创建一个新项目,然后让它引用(而不是创建本地副本)与原始项目相同的源文件。
是否有某种(特定于 iPhone 的?)原因,您需要为您的应用程序的两个版本使用不同的 SQLite 数据库?
如果没有,您可以使用可交换密钥实现许可机制,使您只需更改一个文件即可编译单个代码库。在运行时,您的应用程序将检查该文件并允许减少或无限存储。额外的好处(如果 iPhone 商店支持这样的东西)将是解锁完整版本应该非常简单而不会丢失数据。
当然,如果您的客户精通技术并且恶意并且您的代码易于反编译,那么这样的解决方案可能会损害您的业务。
我对此进行了探索,似乎进行“下载试用版并通过网络升级”违反了应用商店的条款。看来您确实需要商店中应用程序的两个单独版本。(参考 Ben Gottlieb 的条目)。所以一个来源,两个发行版。