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)的方法,这使操作变得简单很多。

同样, 你也可以定义自己的常用方法。

时间: 2024-08-29 11:13:20

iOS开发- 项目配置的相关文章

ios开发环境配置及cordova安装与常用命令

一.ios开发环境配置 1.首先要有台Mac Book,如果有Mac Book,跳过步骤2.3.4,如果没有,执行步骤2.3.4: 2.下载并安装VMware Workstation,最好是下最新版本: 3.下载并安装unlock-all(VMware Workstation默认限制安装Mac虚拟机,需要安装此文件后解除限制); 4.下载Mac OS操作系统的镜像文件(需要是.ios文件)如果下载的是.dmg文件,需要用 anytoiso.exe工具转换成.ios文件,下载完成后在VMware

iOS开发项目-01环境搭建

iOS开发项目-01环境搭建 一.基本过程 1.新建一个项目 (1)删除storyboard (2)在配置界面中,把main  删除,手动设置 2.准备素材 图片素材如下: 这个项目是模仿新浪,实现一个山寨的新浪微博系统,新版本的系统中已经放弃了非视网膜屏幕. 说白了,这种情况下,如果手机是3.5英寸的ios7系统,则看不到该启动动画. 设置方法,右键单击show in finder,修改json文件. Contents.json,对文件进行修改,让系统启动画面对3.5英寸的ios7系统提供支持

iOS开发项目篇-01环境搭建

iOS开发项目篇-01环境搭建 一.基本过程 1.新建一个项目 (1)删除storyboard (2)在配置界面中,把main  删除,手动设置 2.准备素材 图片素材如下: 这个项目是模仿新浪,实现一个山寨的新浪微博系统,新版本的系统中已经放弃了非视网膜屏幕. 说白了,这种情况下,如果手机是3.5英寸的ios7系统,则看不到该启动动画. 设置方法,右键单击show in finder,修改json文件. Contents.json,对文件进行修改,让系统启动画面对3.5英寸的ios7系统提供支

iOS开发项目-02添加子控制器以及项目分层

iOS开发项目-02添加子控制器以及项目分层 一.添加子控制器 1.设置根控制器(自定义) 说明:分析新浪微博应用,观察其整体建构层次.而系统的控制器不能满足项目开发的需求,这里把项目中原有的控制器删除. 自己定义一个TabBarViewController类.让这个类作为window窗口的根控制器. YYAppDelegate.m文件代码: 1 #import "YYAppDelegate.h" 2 #import "YYTabBarViewController.h&quo

iOS开发项目篇—16OAuth授权简介

iOS开发项目篇—16OAuth授权简介 一.资源的授权 在互联网行业,公司要能长期存活下来,用户量很重要,比如腾讯.新浪,它们的用户量是非常巨大的 要想长期留住用户,用户资源(数据)的管理也很重要,如果你经常在不经过用户同意的情况下,把用户的一些资源共享出去,那肯定是留不住用户的,甚至会遭到法律的制裁 但是,有时候确实要把某些用户资源共享出去,比如第三方想访问用户的QQ数据.第三方想访问用户的新浪微博数据 要想把用户资源共享出去,就必须取得用户的同意,那么这里就有个资源授权的问题 资源授权的方

学习IOS开发项目篇--如何让程序在后台保持挂起状态

程序的状态分为:前台运行,后台挂起,后台休眠,为了让项目的网络请求保持活跃状态,需要对程序进行设置. 在applicationDidEnterBackground方法中调用下面的方法,可以让程序进入挂起状态,但在未知时间内,可能会被系统设置为休眠,如果在将程序设置为播放器,并且循环播放一个MP3文件,可以保持永久挂起状态. UIBackgroundTaskIdentifier task =[application beginBackgroundTaskWithExpirationHandler:

iOS开发项目篇—28自定义UITextView

iOS开发项目篇—28自定义UITextView 一.简单说明 1.要实现的效果 2.分析 (1)UITextField 1.最多只能输入一行文字 2.能设置提醒文字(placehoder) 3.不具备滚动功能 (2)UITextView 1.能输入N行文字(N>0) 2.不能设置提醒文字(没有placehoder属性) 3.具备滚动功能 需求:技能输入多行文字,又具备文字提醒功能. 这里选择自定义一个类,让其继承自UITextView类,为其添加一个设置文字提醒的功能. 二.实现 自定义UI控

iOS开发项目篇—20存储账号信息

iOS开发项目篇—20存储账号信息 一.简单说明 1.不论请求是否成功,都在发送Post请求后,隐藏遮罩. 2.在授权成功后,切换根控制器. (1)说明 切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”. 没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了. 判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性

iOS开发项目篇—54&quot;设置&quot;界面的搭建

iOS开发项目篇—54"设置"界面的搭建 一.实现 新建一个设置控制器,当点击“我”控制器导航栏“设置”按钮时,即跳转到该界面 1.在“我”控制器中对导航栏“设置按钮”的处理 1 // 2 // YYProfileViewController.m 3 // 4 5 #import "YYProfileViewController.h" 6 #import "YYCommonGroup.h" 7 #import "YYCommonItem