編輯:關於Android編程
通常,我們在開發過程中,總是需要兩套以上的環境進行測試、生產發布。如果只是簡簡單單的進行一個API的切換,那麼只是進行不同的宏定義即可,但是要求應用的不同版本將使用相同的基礎代碼,但可以有不同的圖標、切圖等資源文件,bundle ID 和指向不同的數據庫,這時就需要進行多版本構建管理。雖然這種方法也許快捷,方便,但是它有一些重要的限制。首先,因為我們在不同的環境中使用一個Bundle ID,你不能在一台設備上安裝應用的多個版本。下面通過詳細的步驟進行講解如何使用Xcode的target進行多版本構建:
1、選擇項目工程,在Targets區域下,右鍵單擊現有目標並選擇 `Duplicate` 復制現有的目標,這時當前target下的bundle id可以命名為pro(簡寫)
2、復制之後會自動生成一個test copy的target和build scheme工程,這時我們按住“Enter”鍵,將其命名為“dev”,也要將其bundle id命名為dev(理由:在不同的環境中使用一個Bundle ID,你不能在一台設備上安裝應用的多個版本),如下
3、點擊build scheme工程,會有兩個工程,這時點擊----Manage Schemes,
出現一個彈出框,選擇其中的一個,按住“Enter”鍵,輸入dev,修改其build scheme名稱
4、為了區分icon,右鍵”Assets.xcassets“----右擊圖標 ---- App Icons & Launch Images ---- New iOS App Icon. 新圖標重命名為“AppIcon-Dev”同時添加自己的圖片。這時就有兩個Applcon圖標了
要根據不同的版本使用不同的icon時,在工程中的App Icons處進行選擇即可
5、復制時還會自動生成一個plist文件,在根文件目錄下的最底部,這時我們可以將其命名為dev.plist,將其移動到指定位置;
這時再選擇target時,會發現dev下的Identity是空的,這時點擊“Choose Info.plist File”
選擇工程路徑下的plist文件
在target的“Build Settings”,滾動到“Packaging”,查看(也可直接在此修改)
6、最後,我們會為不同版本的target配置預處理宏/編譯器標識,之後我們就可以使用該標識在我們的代碼來檢測應用程序正在運行的版本。
`Build Settings`下`Apple LLVM 7.0 - Preprocessing`。拓展`Preprocessor Macros`在Rebug和Release區域添加一個變量。對於開發target(即todo Dev),將該值設置為`DEVELOPMENT = 1`。另一個,將值設為`DEVELOPMENT=0`來表示生產版本。
7、使用Target進行宏定義,創建一個pch文件,進行宏定義(這時定義不同的API;顏色、字體等)
//開發 #if DEVELOPMENT #define IMAGE_PATH [UIColor greenColor] //生產 #else #define IMAGE_PATH [UIColor grayColor] #endif8-1、(根目錄下圖片)如果要使用不同的圖片、以及第三方庫時(以圖片為例):在根文件目錄下創建實體文件夾,引入圖片文件,不同的版本使用不同的實體文件夾路徑,但是圖片名字可以保持一致,使用時如上也使用相同的bundle路徑;在不同target下的Build Phases下的Copy Bundle Resources 中選擇不同路徑的圖片(名字保持一致),這裡的圖片是加在工程的根目錄下的,是通過Add File To 添加進來的,且是一個實體文件夾;
使用時,如下
- (void)viewDidLoad { [super viewDidLoad]; UIImageView *imgView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 100, 288, 180)]; imgView.backgroundColor = IMAGE_PATH; NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"picture" ofType:@"jpg"]; UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; imgView.image = image; [self.view addSubview:imgView]; }
8-2、(Assets.xcassets圖片----推薦使用;拖入Assets.xcassets文件夾中的圖片最後會被打包成一個Assets.car文件,我們不能根據路徑讀取圖片。而拖入Supporting Files文件夾中的圖片可以根據路徑讀取。另外,從某種程度上講,拖入Assets.xcassets文件夾中的圖片因為被打包成了Assets.car文件,可以得到一定程度上的保護,以防止盜圖)
以下這是沒辦法之時:如果要通過Assets.xcassets導入的圖片,博主嘗試過了即使創建相同的圖片名字後綴但是不同版本還是只會使用同一張圖片的,方法就是宏定義:#define IMAGE_PATH(str) [UIImage imageNamed:[NSString stringWithFormat:@"%@-pro.jpg",str]],然後圖片名字是一樣樣的,只是後綴也要提前設置好。
(1)、右擊工程----Resource----AssetCatalog----Next
(2)、輸入名稱,選擇Targets--dev,因為pro使用原本工程創建時生成的Assets.xcassets文件
(3)、重新在新生成的Media.xcassets文件下創建AppIcon-dev,導入相同圖片名字的不同圖片
(4)、在不同target下的Build Phases下的Copy Bundle Resources 中選擇不同名字的.xcassets文件夾(圖片名字保持一致)
使用
imgView.image = [UIImage imageNamed:@"img.jpg"];
Images.xcassets中的圖片資源只能通過imageNamed:方法加載,通過NSBundle的pathForResource:ofType:無法獲得圖片路徑。因此,Images.xcassets只適合存放系統常用的,占用內存小的圖片資源。
9、給target添加新資源時(如是第三方庫等需每個target都加入),如是圖片,給需要的target加入勾選即可,如下:
最後給予總體效果,不同版本下的相同圖片名字的不同圖片,以及icon
經過前面兩篇文章的學習,我想大家對ActionBar都已經有一個相對較為深刻的理解了。唯一欠缺的是,前面我們都只是學習了理論知識而已,雖然知識點已經掌握了,
1.概述 視頻講解都已經錄了好幾天,但是最近實在抽不開身一直在忙Unity3D,就連光棍節都在寫,上次我們只是寫了Android 6.0 運行時權限處理解析,但是並未對
實現轉輪的選擇功能,效果見下圖:本項目是由這個項目修改而成,不過基本上除了原來的大體框架以外,內部的實現邏輯全都做了大量修改,各位看官可以對比參考,在此必須感謝原作者給我
動畫(Animation) Android提供了2種動畫: Tween動畫 通過對 View 的內容進行一系列的圖形變換 (包括平移、縮放、旋轉、改變透明度)來實現動