zoukankan      html  css  js  c++  java
  • 做一个APP

    前言

    有点零乱,但是我想写下来慢慢整理,搭建一个好点的工程-模式MVC,

    会包括一些第三方库,动画库,第三方库管理关联,自定义常用控件的管理和关联

    1.预编译文件的创建

    在build setting 搜索Prefix Header将里面的空白路径改为 

    $(SRCROOT)/xxxxxxxx(你的工程名字)/PrefixHeader.pch

    其中PrefixHeader是你自己创建的pch文件

    文件里一般会添加两个框架:

    #ifndef Carloans_PrefixHeader_pch
    #define Carloans_PrefixHeader_pch
    
    #ifdef __OBJC__
    
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import "Header.h"//自己创建的.h文件来存放需要全工程引用的头文件或者宏定义
    #endif

    #endif

    2.网络请求支持http

    info.plist中添加 App Transport Security Settings ,创建 Allow Arbitrary Loads 为YES

    3.debug模式和release模式

    切换代码:

    #ifdef DEBUG
        NSLog(@"1111");
    #else
        NSLog(@"1111222111");
    #endif

    用途:比如打印信息,比如测试版本和上线版本需要不同的引用,不同的宏定义等。

    4.多个target管理

    (1)按需求使用

    iOS开发中,很可能有以下场景:需要开发多个版本,或因需区分收费版,免费版,或因为网络环境需要区分测试版,发布版,或因渠道不同需要区分企业版,AppStore版等等。解决办法无非就是CheckOut多份代码,然后按照指定需求,修改配置……
    不同的渠道需要不同的证书,不同的BundleID需要不同的描述文件,不同的BundleID也可能对应不同的绑定BundleID的第三方库。甚至于不同的网络环境也需要不同的BaseUrl,虽然这个可以宏定义解决。可以想象,每次CheckOut改这些配置,是有多么麻烦。其实有一种方式可以完美结局以上问题——创建多个Target。

    (2)创建target

    创建一个应用,默认会有一个工程文件名的Target和一个Tester的target,Xcode7创建的话可能也会默认有一个UITest的target。
    选中我们的项目Target右键选择Duplicate,我们就拷贝了这个Target,这个Target共享之前的所有代码。
    之后就是改名字的操作了。默认会生成一个拷贝的Info.plist。这个Info.plist就对应与我们新创建的Target。如果需要改名字转移位置的话,需要先Remove然后文件夹转移后再添加进去即可。然后就可以随意的修改BundleID,证书,描述文件了等等了。之后为新创建的Target在配置一个Schem。

    (3)配置新的target

    除了基本的修改BundleID外,还能控制源文件,第三方库,资源文件的编译选项等情况。在这里就介绍一下我我遇到的不懂BundleID对应不同的第三方静态库吧。首先把两个静态库文件全部添加,然后不同Target加载不同库即可。

    如果新加入了文件或者资源,一定要选择所有的Target,默认貌似的不是所有
    新的target对应plist重新chose后一定要设置相对路径,不需要在前边的$(SRCROOT),不然使用命令诸如xcrun agvtool what-marketing-version就会找不到

    5.判断是真机还是模拟器

    //判断是真机还是模拟器  
    #if TARGET_OS_IPHONE  
    //iPhone Device  
    #endif  
      
    #if TARGET_IPHONE_SIMULATOR  
    //iPhone Simulator  
    #endif  

    6.实时检测网络连接状态RealReachability第三方开源库,苹果的坑就不吐槽了

    下载链接:https://github.com/dustturtle/RealReachability

    (1)有两种用法,但是首先要将监听打开初始化,可以写到appdelegate里面

     [GLobalRealReachability startNotifier];

    (2)实时监听接收通知:可以写到需要实时改变的地方

    (3)触发监听:(可封装网络请求在这里面)

    7.网络请求AFNetWorking3.x封装

    下载链接:http://git.oschina.net/tqh/WJNetWorking 

    上面是我自己的封装,实现get,post,上传图片,下载功能,也可以找其他的封装,或自己根据需求习惯封装

    8.app启动图尺寸,app图标大小,启动动画(这个应该写在前面,不在这里也行啦,别介意~)

    下载链接:http://git.oschina.net/tqh/iOS_icon_image

    尺寸大小就在上面的包里~

    然后可以在启动图片完成之后添加启动动画,原理就是复制启动图片在工程的根视图控制器最上层添加一个UIimageView,然后创建动画,现在流行的启动广告也是一样的,只不过他换成可以点击,并且从网络获取图片而已

    具体实现可参考我这篇博文:http://www.cnblogs.com/hxwj/p/5026281.html

    9.常用第三方库

    POP动画,Masonry自动布局,MJRefresh刷新,FDFullscreenPopGesture丝滑返回,MJExtension模型,可以百度他们的用法

    打包下载链接:http://git.oschina.net/tqh/third-ku

    10.网络请求时候的loading动画,hud提示,弹出自定义的UIAlertView,界面没有数据时候的显示

    (1)进行网络请求的时候可以在开始请求之前检测网络,如果网络失败弹出1秒左右的提示框,然后消失,如果有网络进行请求

    ,请求是有延迟的,做一个loading动画,可以用动态图做也可以自己写动画效果,失败给出失败提示,成功则不返回

    (2)自定义的UIAlertView:进行表单填写的一些验证判断和警告,有确认一些设置的提示

    (3)界面没有数据一般是没有网络或者网络请求失败,如果是一个详情页面可以在详情页请求的时候做一个loading动画,然后失败了的话就在最上层覆盖一个没有数据的视图,如果是一个列表界面,不做持久话缓存的话可以按照上面的方法来做,做了持久化缓存的话就从里面提出数据加载上来,然后请求的时候进行相关提示

    (4)将loading动画封装到网络请求的注意事项:

      如果是单独封装在最上层的视图的话,详情页pop返回的时候需要移除

      tabbar控制器中两个界面请求的时候,一个完成,一个未完成的话,一个没有loading动画,一个有loading动画

      有些界面需要全屏幕覆盖,有些界面需要覆盖导航栏,有些界面需要覆盖标签控制器

      网络监测的loading可以直接封装进去,其他情况需要处理

      方案一:loading视图写在基类里,网络请求的时候传入,根据需要在控制器里面判断

      方案二:loading视图写在网络请求里,根据情况处理 

    ---------------------华丽的分割线----------------------------

    有朋友说可以创一个新工程,把这些全都弄上去做成一个Demo,我觉得不错,抽时间来弄弄

  • 相关阅读:
    设计模式-观察者模式(Observer Pattern)
    设计模式-策略模式(Strategy Pattern)
    数据结构-红黑树
    数据结构-二叉搜索树(BST binary search tree)
    算法-插入排序(Insertion sorting)
    算法-桶排序(Bucket sort)
    设计模式-单例模式(Singleton Pattern)
    算法-基数排序(radix sort)
    算法-计数排序及其变体
    Pytest框架的使用
  • 原文地址:https://www.cnblogs.com/hxwj/p/5404374.html
Copyright © 2011-2022 走看看