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)的方法,这使操作变得简单很多。
同样, 你也可以定义自己的常用方法。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。