做一个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(@"");
#else
NSLog(@"");
#endif
用途:比如打印信息,比如测试版本和上线版本需要不同的引用,不同的宏定义等。
4.多个target管理
(1)按需求使用
iOS开发中,很可能有以下场景:需要开发多个版本,或因需区分收费版,免费版,或因为网络环境需要区分测试版,发布版,或因渠道不同需要区分企业版,AppStore版等等。解决办法无非就是CheckOut多份代码,然后按照指定需求,修改配置……
不同的渠道需要不同的证书,不同的BundleID需要不同的描述文件,不同的BundleID也可能对应不同的绑定BundleID的第三方库。甚至于不同的网络环境也需要不同的BaseUrl,虽然这个可以宏定义解决。可以想象,每次CheckOut改这些配置,是有多么麻烦。其实有一种方式可以完美结局以上问题——创建多个Target。
(2)创建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,我觉得不错,抽时间来弄弄
做一个APP的更多相关文章
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- 做一个App前需要考虑的几件事
本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后, ...
- 涨姿势:创业做一个App需要花多少钱(8个人,6个月,就要100万,附笔记心得)
(原标题:涨姿势:创业做一个App要花多少钱?) 作为互联网从业者,被外行的朋友们问及最多的问题是,“做一个网站需要多少钱?”或者“做一个APP需要多少钱?”. 作为做过完整网站项目和APP的人,今天 ...
- [转载]做一个 App 前需要考虑的几件事
本文转自http://limboy.me/tech/2016/07/06/starting-an-app.html ========================================= ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- 创业成本?亲身经历告诉你做一个app要多少钱
导语:作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网站需要多少钱?”或者“做一个APP需要多少钱?” 作为一名苦逼的移动互联网创业者,被外行的朋友们问及最多的问题是“做一个网 ...
- 尝试用kotlin做一个app(写在前面)
学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...
- 如何利用php+android+新浪sae服务器做一个app下载应用
功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面, ...
- 尝试用kotlin做一个app(五)
JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前 ...
随机推荐
- POJ 3280 Cheapest Palindrome(区间dp)
dp[i][j]表示处理完i到j的花费,如果s[i] == s[j] 则不需要处理,否则处理s[i]或s[j], 对一个字符ch,加上ch或删掉ch对区间转移来说效果是一样的,两者取min. #inc ...
- Luogu [P1248] 加工生产调度
题目链接 这个题可以贪心 我们首先想:对于所有产品,我们大致可以将其分为三类: ①.在A车间的时间要比B车间长. ②.两者一样. ③.在B车间的时间要比A车间长. 对于这三大类,怎么安排顺序? 可以看 ...
- 关于后台获取不到HiddenField值的有关问题
服务器加载aspx程序时,首先要执行后台cs文件中的page_load等方法中的代码,其它按钮事件等是不执行的,生成页面发送到客户端.客户端执行时会响应js脚本,提交到服务器后除了执行page_loa ...
- NoSQL - KVstore -Redis
Redis键迁移 在使用Redis的过程中,很多时候我们会遇到需要进行键迁移的问题,需要将指定Redis中的指定数据迁移到其他Redis当中,键迁移有三种方法,我们来进行一一介绍. 一.move mo ...
- ES6-总结
在最近进行的项目中,已经全面使用到ES6,这里对ES6进行整理总结.用得比较多的是带*的内容,这些语法.新增类型.模块调用等从代码量上.可读性上.操作上给项目带来了不少便利. 1.语法 1.1.命 ...
- PHP判断时关于null,0,true,flase的值
<?php// $wh = 0; //等于整数0,等于字符串'0',等于空字符串,等于空格字符串, 等于空(null),等于字符串('null')// $wh = '0'; //=>等于整 ...
- nginx的缓存服务
都知道缓存的目的是为了减小服务端的压力,可以在客户端直接取到数据 客户端---------------nginx(代理缓存)------------------服务端 代理缓存的描述: 就是客户端发送 ...
- 02.VUE学习二之数据绑定
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Python知识点入门笔记——Python文件操作、异常处理及random模块使用
文件是存储在外部介质的数据集合,通常可以长久保存,前提是介质不易损坏 Python的绝对路径写法: E:\\编程学习资料\\爬取某社区高清无码大图.py E:/编程学习资料/爬取某社区高清无码大图.p ...
- 学习Pytbon第七天,集合
list_1=[5,22,2,6,5,66,6,8] list_1=set(list_1)#把列表转成集合,天生不允许 重复 print(list_1,type(list_1) list_2=set( ...