2008-11-08 52 views
3

我想在App Store上提供兩種不同版本的iPhone應用程序 - 一種免費限制應用程序顯示的項目數量,另一種完全無限制。從同一個源代碼生成「免費/演示」和商業應用程序的最佳方式?

這兩個應用程序的源代碼都是完全一樣的,唯一的區別是存儲項目在應用程序中的SQLite數據庫。

據我所知,這兩個版本的應用程序需要不同的軟件包名稱和不同的圖標。我試圖找到一種方法,以避免完全複製的源代碼目錄,以便能夠自定義其中的一些東西:數據庫,圖標,筆尖字符串等。

有沒有一種很好的方法來做到這一點,而不需要複製一切?

回答

13

在您的項目只需創建一個第二個目標。一個可以是全功能的應用程序,其中包括完整的數據庫,新的目標將是演示數據庫的演示版本。我們用Crosswords來做到這一點,並且它工作正常。然後,您可以將所有來源保存在一個地方,而不必擔心事情不同步。

+0

本,我會玩這個想法。在某些Nib文件中使用不同字符串的問題如何? – jpm 2008-11-08 15:28:53

+0

您可以使用不同的xib文件來做到這一點,或者使用#ifdef語句作爲註釋之下的註釋。我們爲每個目標都有一個不同的pch標題,並且在那裏有一堆#defines來控制演示狀態。 – 2008-11-08 20:05:54

0

創建一個新的項目,然後把它引用(不創建一個本地副本)相同的源文件作爲原始項目。

0

是否有一定的(特定於iPhone的?)原因,您需要爲這兩個版本的應用程序擁有不同的SQLite數據庫?

如果不是這樣,您可以使用可交換密鑰來實現授權機制,從而允許您在僅更改一個文件的情況下編譯單個代碼庫。在運行時,您的應用程序會檢查該文件,並允許減少或無限制的存儲空間。 增加的好處(如果iPhone商店支持這樣的事情)應該是非常簡單的解鎖完整版本而不會丟失數據。

當然,如果您的客戶精通技術並且惡意並且您的代碼易於反編譯,這樣的解決方案可能會損害您的業務。

1

值得注意的是,如果用戶決定升級到完整版本,如果您沒有適當的機制來傳輸現有數據,您可能會看到來自用戶的負面反應。如果數據的內容很小,並且可以大部分由文本表示,那麼我會建議實施一個URL方案來傳遞它。

7

明智地使用條件編譯的。我不知道你在使用什麼語言,但是在C/C++條件編譯中使用宏預處理器和ifdefs來完成。你會寫代碼是這樣的:

#ifdef FULL_APP 
    // unlimited size 
    #define SIZE -1 
#else 
    #define SIZE 100 
#endif 

當你建立你提供的編譯器命令行了恰當的宏定義程序。

gcc program.cc -o program.o -DFULL_APP 

您可以在可執行文件使用條件編譯和宏預處理器在各種不同的方式來打開或關閉各種功能或修改程序的其他方面。

-2

我已經探討過這一點,似乎做一個「下載試用版並通過網絡升級」違反了應用商店的條款。看起來你真的需要商店中的兩個獨立版本的應用程序。 (參考Ben Gottlieb的參賽作品)。所以一個來源,兩個發行版。

相關問題