首页 > 代码库 > iOS开发- 项目配置

iOS开发- 项目配置

新人指导, 大拿绕道。
旨在说明App创建初期需要完善的一些配置, 有利于之后项目有条进行, 也能减少不必要的开发。

主要内容:

  • 新项目创建
  • 分组结构
  • 配置文件
  • 辅助类

1. 新项目创建

常规的, 我们启动Xcode开发环境,使用Single View Application Project模板创建一个新项目, 这里有几项需要注意下。
技术分享

1.1 在Class Prefix中填上该项目特有前缀

Class Prefix 字段将有助于遵循苹果的编码指导原则,因为项目中的每个类都需要有个 独一无二的名字。当创建项目时,能够使用这个字段的值定义默认的类名前缀,这个前缀 会在创建新类时使用。尽管苹果的指导原则建议前缀为三个字符,但我通常使用两个字符作为前缀..毕竟, 哪有那么巧的事情。(但是苹果保留所有二个字符所有权的使用权力)

另外, Xcode6 之后, 创建项目默认是没有Class Prefix选项, 也没有.pch文件。所以我们需要手动来创建。具体步骤如下:

  1. Class Prefix
    如图所示, 选中Project, 右侧可见Class Prefix, 输入即可。
    技术分享
  2. .pch文件
    1. 添加文件
      技术分享
    2. 设置路径
      技术分享

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开发- 项目配置