ios開發時,在Xcode中添加多個targets進資料列版本設定

來源:互聯網
上載者:User

標籤:blog   http   os   io   strong   檔案   ar   art   問題   

  在ios開發時,我們經常會遇到對同一個app開發多個版本(Pro、Lite、Free)的情況,這裡就涉及到xcode裡通過添加多個targets來進資料列版本設定的問題了,下面就簡單說明一下:

     點擊左側的工程名稱,右側會出現PROJECT和TARGETS,點擊你現在的target,假如叫A,右鍵快顯功能表中,選擇Duplicate,複製一個相同的target,複製的target一般叫A copy,A copy和A的設定(編譯條件、源檔案、資源檔)完全一樣,此時你可以根據需要修改A copy的編譯條件和資源檔了;

 

1、A copy的名稱是不是顯得不夠專業?現在來修改一下:

1)首先修改Xcode左上方的target名稱:

點擊xcode左上方Run、Stop右邊的工程名稱,下拉框中選擇Manage Schemes,在彈出框中,點擊A copy那行,點擊一次、再點擊一次,就可以修改A copy為你想要的名字了,比如ALite;

2)修改xcode左下方Products下的A copy.app名稱:

點擊Targets下你剛才改名後的ALite,點擊Bulid Setting,搜尋Packaging下的Private Headers Folder Path,修改A copy.app/PrivateHeaders為:ALite.app/PrivateHeaders;

 

2、修改Bundle Identifier和選擇不同的認證,讓app區分開來

1)新target需要的.plist檔案

      建立一個檔案夾X,添加X到項目中,添加時選擇target為ALite,不要選target A了,因為不是共用的;複製原來target的A-Info.plist到X,修改其名稱為ALite-Info.plist,xcode中右鍵Add File To ...,選擇添加到target ALite中;

2)點擊target: ALite ->Summary:提示你需要選擇plist檔案,選擇1)中添加的ALite-Info.plist;

3)點擊target: ALite ->Summary:設定Bundle Idenfitier;

4)點擊target: ALite->Build Settings->Code Signing:選擇另外的認證;

 

3、修改程式名稱

     一般說來,多個target的程式名稱不同,複製zh-Hans.lproj和en.lproj下的InfoPlist.strings檔案到X,xcode中右鍵Add File To ...,選擇添加到target ALite中;然後修改InfoPlist.strings的內容:CFBundleDisplayName="程式名稱Lite";

 

4、2個target到現在就建立好了,你添加資源檔的時候,通過選擇添加的target來控制不同版本的內容;再說一下先行編譯宏的事情:target->Build Setting,搜尋:Preprocessor Macros,設定Debug和Release裡的先行編譯宏內容,比如TARGET_VERSION_LITE=1表示lite版本(注意=前後不能右空格,有空格會編譯不過),程式中對不同版本這樣判斷:

 

#if TARGET_VERSION_LITE ==1

...

 

#elif TARGET_VERSION_LITE ==2

...

 

#endif

 

 

 

參考文章:

1、http://blog.163.com/lengfeng_04/blog/static/80470603201273111549529/

 

XCode 同一Project建立多個target  

 

 

由於項目需求,同一項目需要發兩個版本,兩個版本只有小部分不同,特地研究了一下target,小有瞭解,把建立target的經過記錄在案,方便過後查看,如有疏漏,請網友指正。

 

建立target有兩種方式,

1是通過建立target可以通過File-->New-->Target,然後選擇其中一個模板來建立,app類型的target,可以選擇Empty Application模板,不過建立的target有自己的AppDelegate和main,這點還沒研究好,如何與原來的AppDelegate和main複用

2.另一種方法是通過對原有的target做duplicate,複製一份,目前只研究了如何通過duplicate來建立target,做下記錄。

假設原來的target名字為A,我們需要建立一個target B

 

1. 在原來的target上右鍵,選擇duplicate,Xcode會複製一個名為A copy的target對象,同時產生一個A copy-info.plist和A copy的scheme

2. 改名

a)對A copy target改名,可以直接單擊target來修改,改成B

b)A copy-info.plist,預設產生在程式環境根目錄,也就是A.xcodeproj的同級目錄中,如果想放到裡層(比如與A-info.plist放在同級目錄),可以先在Xcode刪除A copy-info.plist索引,然後拷貝檔案到制定目錄中,然後更名為B-info.plist,在add到project中。在Project的Build Settings中,修改Info.plist File選項為B-info.plist的目錄(相對路徑),這樣就可以看到Info頁了(就是B-info.plist),接著修改ProductName和Bundle identifier,使之成為另一個app。Prefix Header的路徑,視具體需求而定是否要修改,如果兩個target可以公用同一個Prefix Header,那麼就不需要修改這裡的路徑

c)修改scheme,在調試的Stop按鈕邊上,我們可以選擇本工程中所有的target來做編譯,如果不修改,在這裡選擇出來的名字就是A copy,為了與建立的target統一起來,同樣也要修改這裡的名字。點擊scheme選擇區,然後選Manager Scheme,找到A copy,然後改成你需要的名字,比如B

 

用duplicate的好處是,如果兩個target的相同點很多,用duplicate,就可以把相關的設定全部拷貝過來,而不需要做過多的修改

 

產生一個新的target,一定會與原target有區別,這裡可以定義先行編譯宏,來區分兩個版本的不同代碼,先行編譯宏可以在Build Settings中Preprocessor Macros定義,比如在我們建立的target B中定義先行編譯宏MACRO,然後在代碼中通過

#if defined (MACRO)

//target  B需要執行的代碼

#else

//target A需要執行的代碼

#endif

來區分

 

其他:Build Phases(各target編譯所包含的內容,需要注意的是,如果建立了target B後,再往A裡面添加資源或檔案,target B中不會自動增加這些資源,需要手動添加)

1.Compile Sources

需要編譯的代碼檔案

2.Link Binary With Libraries

編譯所依賴的庫

3.Copy Bundle Resources

編譯需要的資源

每個target可以根據具體需要增減裡面的內容

 

2、http://kan.weibo.com/con/3550176548481250?_from=text

http://stackoverflow.com/questions/1807377/xcode-multiple-targets-multiple-internationalized-names

 

同一份代碼多個Target,在支援多語言下分別設定其名稱的方法

真不好用一個標題來概括這個東西。Xcode 4.2+ 在項目多語言套件 xx.lproj 裡引入了一個叫 InfoPlist.strings 的檔案,可以對同一個 App 在不同系統語言下顯示不同的 Display Name。比如:

InfoPlist.strings (English) -

"CFBundleDisplayName" = "English Name";
InfoPlist.strings (Chinese) - "CFBundleDisplayName" = "中文";

在單 Target 下很容易做,多 Target 的時候就需要做一點額外的處理。在項目目錄下建立與 Target 同名的檔案夾(同名是為了方便區分),然後將 xx.lproj 檔案夾 複製 到各個 Target 下面,目錄結構會是這個樣子:

./Target1/          
en.lproj/InfoPlist.strings          
 zh-Hans.lproj/InfoPlist.strings
./Target2/          
en.lproj/InfoPlist.strings          
 zh-Hans.lproj/InfoPlist.strings

複製後保持項目目錄下還有 xx.lproj 檔案夾,裡面保留 Localizable.strings,因為多語言化一般是通用的,沒必要針對每一個 Target 做多語言。複製後的 Target1/xx.lproj 下只有 InfoPlist.strings。然後添加到 Xcode 項目裡,開啟 Xcode - Views - Utilities (Command+Option+0),在 Target Membership 下針對不同的 Target 把對應檔案夾下的 InfoPlist.strings 對應串連起來,Done。

 

 原文地址:http://blog.csdn.net/ysysbaobei/article/details/10951991

ios開發時,在Xcode中添加多個targets進資料列版本設定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.