標籤:配置 開發 模板 結構 ios
新人指導, 大拿繞道。
旨在說明App建立初期需要完善的一些配置, 有利於之後項目有條進行, 也能減少不必要的開發。
主要內容:
1. 新項目建立
常規的, 我們啟動Xcode開發環境,使用Single View Application Project模板建立一個新項目, 這裡有幾項需要注意下。
1.1 在Class Prefix中填上該項目特有首碼
Class Prefix 欄位將有助於遵循蘋果的編碼指導原則,因為項目中的每個類都需要有個 獨一無二的名字。當建立項目時,能夠使用這個欄位的值定義預設的類名首碼,這個首碼 會在建立新類時使用。儘管蘋果的指導原則建議首碼為三個字元,但我通常使用兩個字元作為首碼..畢竟, 哪有那麼巧的事情。(但是蘋果保留所有二個字元所有權的使用權力)
另外, Xcode6 之後, 建立項目預設是沒有Class Prefix選項, 也沒有.pch檔案。所以我們需要手動來建立。具體步驟如下:
- Class Prefix
, 選中Project, 右側可見Class Prefix, 輸入即可。
- .pch檔案
- 添加檔案
- 設定路徑
1.2 Create Local git Repository for This Project/ Create Git repository on
選中這個選項會建立本地 git 存放庫
當選擇這個選項建立本地 git 存放庫時,Xcode 工具會為你自動建立這個存放庫,使你 能夠在項目中使用版本控制。使用版本控制後,Xcode 會對原始碼的變更保持跟蹤,使你 能夠復原代碼到某個版本,提交變更,比較不同版本之間的代碼差異等。如果你正在使用 基於 SVN(subversion system)的伺服器管理原始碼,那麼可以使用 SVN 用戶端或者 SVN 命 令來管理原始碼,因此不需要本地 git 存放庫。如果你不使用基於 SVN 的伺服器,強烈建 議在建立新項目時選中 Create Local git Repository 這個選項。
2. 分組結構
一個好的實踐是在項目目錄結構中使用分組(group)來組織不同的元素,例如,images、 sounds、classes、views、helpers 等。
請在你的項目中建立如下分組
- Externals
- Categories
- Helpers
- Definitions
- Images
:
由於分組僅僅是一個容器,並不是一個存在於檔案系統上的物理檔案夾,因此應該也 在檔案系統的項目根資料夾下建立這些檔案夾。:
或者, 我們可以直接先在根資料夾下建立這寫檔案夾, 然後Add 到項目中即可。
3. 設定檔
iOS開發過程中使用一些常用的宏可以提高開發效率,提高代碼的重用性;
將這些宏放到一個標頭檔裡然後再放到工程中的-Prefix.pch檔案中可直接使用,很方便。
在 Project Explorer 視窗中,導航至 Definitions 這個分組,從操作功能表選擇 New File 選項。建立一個 C 標頭檔,,將其命名為 MyConstants.h。
然後就可以在這裡定義己想要的宏了。
如下是部分我常用的宏:
//// MyConstants.h// GroupTest//// Created by Colin on 15/1/31.// Copyright (c) 2015年 icephone. All rights reserved.//#ifndef GroupTest_MyConstants_h#define GroupTest_MyConstants_h//-------------------擷取裝置大小-------------------------//NavBar高度#define NavigationBar_HEIGHT 44//擷取螢幕 寬度、高度#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)//-------------------擷取裝置大小-------------------------//----------------------顏色類---------------------------// rgb色彩轉換(16進位->10進位)#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]//帶有RGBA的顏色設定#define COLOR(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]// 擷取RGB顏色#define RGBA(r,g,b,a) [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]#define RGB(r,g,b) RGBA(r,g,b,1.0f)//背景色#define BACKGROUND_COLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0]//清除背景色#define CLEARCOLOR [UIColor clearColor]#pragma mark - color functions#define RGBCOLOR(r,g,b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]#define RGBACOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]//----------------------顏色類--------------------------//----------------------系統----------------------------//擷取系統版本#define IOS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]#define CurrentSystemVersion [[UIDevice currentDevice] systemVersion]//擷取當前語言#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])//判斷是否 Retina屏、裝置是否iphone 5、是否是iPad#define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)#define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)//判斷是真機還是模擬器#if TARGET_OS_IPHONE//iPhone Device#endif#if TARGET_IPHONE_SIMULATOR//iPhone Simulator#endif//檢查系統版本#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)//----------------------系統----------------------------#endif
至於如何使用, 之前提到了, 在對應的.pch檔案中, 匯入該標頭檔即可。
如果在.pch這個檔案中匯入標頭檔,那麼它就是全域可用的。
#import <Availability.h>#ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> #import "MyConstants.h"#endif
4. 輔助類
個人建議, 建立一個複製類, 來實現一些常用的靜態方法。這樣會大大提高開發效率。
比如使用 NSUserDefaults 類讀寫設定項的值。
在 Project Explorer 視窗中,導航至 Helpers 分組,從操作功能表中選擇 File | New 選項。 建立一個新的 Objective-C 類,繼承於 NSObject 類,命名為 MyConfigurationHelper, 如下所示:
然後添加如下代碼:
//MyConfigurationHelper.h
#import <Foundation/Foundation.h>@interface MyConfigurationHelper : NSObject+ (BOOL)getBoolValueForConfigurationKey:(NSString *)_objectkey;+ (NSString *)getStringValueForConfigurationKey:(NSString *)_objectkey;+ (void)setBoolValueForConfigurationKey:(NSString *) _objectkey withValue:(BOOL)_boolvalue;+ (void)setStringValueForConfigurationKey:(NSString *) _objectkey withValue:(NSString *)_value;@end
//MyConfigurationHelper.m
#import "MyConfigurationHelper.h"@implementation MyConfigurationHelper+ (BOOL)getBoolValueForConfigurationKey:(NSString *)_objectkey{ //create an instance of NSUserDefaults NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; //let‘s make sure the object is synchronized return [defaults boolForKey:_objectkey];}+ (NSString *)getStringValueForConfigurationKey:(NSString *)_objectkey{ //create an instance of NSUserDefaults NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; //let‘s make sure the object is synchronized if ([defaults stringForKey:_objectkey] == nil ) { //I don‘t want a (null) returned return @""; } else { return [defaults stringForKey:_objectkey]; }}+ (void)setBoolValueForConfigurationKey:(NSString *)_objectkey withValue:(BOOL)_boolvalue{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; //let‘s make sure the object is synchronized [defaults setBool:_boolvalue forKey:_objectkey]; [defaults synchronize];//make sure you‘re synchronized again}+ (void)setStringValueForConfigurationKey:(NSString *)_objectkey withValue:(NSString *)_value{ NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults synchronize]; //let‘s make sure the object is synchronized [defaults setValue:_value forKey:_objectkey]; [defaults synchronize]; //make sure you‘re synchronized again}@end
MyConfigurationHelper 類包含了一些靜態方法,能夠協助你訪 問 NSUserDefaults 對象。它包含對 NSString 類型的值和 BOOL 類型的值的擷取(get)和設定 (set)的方法,這使操作變得簡單很多。
同樣, 你也可以定義自己的常用方法。
iOS開發- 項目配置