hybride APP 设计思路 http://www.jianshu.com/p/2c296dcb53ae
二十一种 设计模式
http://blog.raozhizhen.com/post/2016-05-22
生成器
https://my.oschina.net/daguoshi/blog/504084
生成器 原理解释 和工厂模式的对比
http://blog.csdn.net/cctvzxxz1/article/details/39967961
生成器 模式讲解
http://www.jianshu.com/p/5d34a496e517
既然不信 何必苟且 既然相爱 何必怀疑
IOS 10 适配 系列0 iOS10 UserNotifications 框架解析
http://blog.csdn.net/jiang314/article/details/52502377
切记,要在不同的模拟器上运行一下再上架
切记,适配的图片要注意调整,要在不同的模拟器上进行调整
【Git入门之六】远程仓库
http://blog.csdn.net/jackystudio/article/details/12271839
Swift3.0 新特性
移除了取余运算符的浮点数取余功能
swift3.0 语法改变 关于字符串
http://blog.csdn.net/u012903898/article/details/52865690?locationNum=14&fps=1
https://itunes.apple.com/app/id1165667288
Swift3.0学习笔记----遍历字符串
http://blog.csdn.net/a1610770854/article/details/52770073
app图标生成软件
http://www.cocoachina.com/bbs/read.php?tid=290247
加载xib 文件遇到的问题
this class is not key value coding-compliant for the key view
解决: 在加载controller 的xib 文件时候, 直接用 alloc init 即可
如何把代码 推送到远程git 上
1.在gitos 上创建项目
2.打开xcode 选择checkout 到本地
3.在checkout 到本地的文件夹中创建新项目,就可以push了
UITabBarItem 取消图片渲染的3种方式
http://www.cnblogs.com/MyBlogZH/p/5522728.html
有些三方库,pods 和 Carthage 都没有效果 这个时候就要考录手动拖入库 有可能会报错,去百度就行
或者三者同时进行,哪个成功了就用哪个
打印一个视图包含了哪些子视图
po [[self view] recursiveDescription]
后台记得把 method 写到表格中,方便我复制 不然老是点到URL跳转浏览器
后台 每个接口的errorDescribe 写清楚,移动端只提示后台返回的每个接口的errorDescribe 以后就是要改,后台那边改一下移动端什么都不用变
二维码生成 地址http://www.wwei.cn
所有文档必须要有日期
是小写 errorCode 还是大写 ErrorCode 后台老接口 改起来不方便 后台返回的是大写的ErrorCode 其他的都是小写的
获取版本更新 是小写的ios 不是iOS
码]iOS判断是模拟器还是真机 跳至 [1] [全屏预览]
一定要注意,检测更新的appName 和 推送证书的(发给后台的证书)名字,还有pushId里面的appName(我们公司叫推送尾缀) 要保持一致,不然会收不到推送信息,或者检测不到新版本等
if TARGET_IPHONE_SIMULATOR//模拟器
elif TARGET_OS_IPHONE//真机
endif
学习轮播图
/*< 这是注释/
很好看的北京颜色 白棕色 [UIColor colorWithRed:0.275 green:0.350 blue:0.159 alpha:0.223];
UIViewContentMode 图片显示模式 http://www.jianshu.com/p/7a286c84198b
车乐邦 使用指南
当你说的很爽的时候,记得这很危险!
探探UIViewController 声明的周期的理解和 思维的扩展
load
initialize
init(initWithNibName)
loadView
viewWillDidLoad
viewWillAppear
viewDidAppear
viewWillDisappear
viewDidDisappear
viewWillUnload
viewDidUnload
dealloc
Objective-C 深入理解 +load 和 +initialize http://www.jianshu.com/p/872447c6dc3f
load load 是在被添加到 runtime 时开始执行
而且 调用顺序
父类最先执行,然后是子类,最后是 Category
initialize
收到第一条消息前,可能永远不调用
覆盖类中的方法,只执行分类的实现
init(initWithNibName)
只做初始化操作
initWithFrame
只做初始化操作,因为传进来的frame 经常为0 最好不要在这里面设置子view的frame
initWithCoder
从xib/storyboard中加载 不要在这里面设置frame
awakeFromNib
从文件中加载,可以在这设置frame
l
loadView
dealloc
不要调用[super dealloc] http://www.jianshu.com/p/009759373271 http://www.jianshu.com/p/5e70abc61530
释放代理
http://www.jianshu.com/p/ab39683f94ae
控制器的生命周期
控制器的加载过程
iOS 应用程序的生命周期
main 函数入口
应用程序的框架
layoutIfNeeded
setNeedsLayout 这两个的区别
Main Run Loop
iOS应用程序的生命周期,状态切换 MVC 讲解 http://www.jianshu.com/p/aa50e5350852
车乐邦Bug 每次升级的时候都会丢失自定义铃声
iOS 事件 https://developer.apple.com/library/content/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/Introduction/Introduction.html
事件: 触摸屏幕,摇晃手机 远程多媒体控制
ImageProcess 图片加工
Paypal 开发中文文档 http://download.csdn.net/detail/u014220518/9606515
Paypal iOS 集成教程1.http://blog.csdn.net/u014220518/article/details/52239375
集成教程2.http://blog.csdn.net/aas319/article/details/50549995
集成教程3.http://www.jianshu.com/p/bfe55c889645
集成教程4.http://www.jianshu.com/p/812d9f010b5b
Paypal demo https://github.com/paypal/PayPal-iOS-SDK
Paypal API https://developer.paypal.com/docs/api/
iOS中的URL Scheme http://git.devzeng.com/blog/ios-url-scheme.html
ios开发之使用bundle来管理资源文件 http://blog.csdn.net/chenyong05314/article/details/18226301
使用 pod install 还是 pod update ? http://www.jianshu.com/p/a977c0a03bf4
iOS中的静态库与动态库,区别、制作和使用 http://www.jianshu.com/p/90f5ec723175
iOS10 给控件切圆角. http://www.jianshu.com/p/50b45ac97ae3
iOS开发 之 不要告诉我你会用NSTimer! http://www.jianshu.com/p/330d7310339d
Xcode6在iPhone5+iOS7模拟器上编译,上下有黑边问题 http://blog.csdn.net/gf771115/article/details/43450681
Xcode8设置好约束,但是打印出来全部是(0,0,1000,1000)
在- (void)viewDidLayoutSubviews 中
加上这句 你的控件view layoutIfNeed
今天也遇到这个问题,刚刚解决的
还是不懂可以去我的简书留言
http://www.jianshu.com/users/6b0da6cb659c/latest_articles
或者
-
(void)awakeFromNib {
// iOS10 不加会{{0,0},{1000,1000}}
[self layoutIfNeeded];
}
awakeFromNib 不调用 (已经备份到简书)
当建立控制器并勾选XIB的时候,当是控制器的时候,不会走- (void)awakeFromNib方法,需要在- (void)viewDidLoad里面书写相应的操作。只有当建立UIView的时候并勾选XIB的时候才会走- (void)awakeFromNib方法。切记切记。
Query 查询
单元测试中:
XCTAssertEqual(a1, a2, format...)判断相等(当a1和a2是 C语言标量、结构体或联合体时使用,实际测试发现NSString也可以);
只有当a1 a2不相等的时候才会生效
app更新后,没有收到deviceToken
app 更新后, 自定义铃音失效
非正式协议,即 NSObject 的分类
不要在 init 和 dealloc 中使用 self.property 的方式来访问成员变量
高内聚,低耦合
accessor
英 ['əksesər] 美 ['əksesər]
n. [计] 存取器;访问器
fast-forward ['fɑ:st'fɔ:wəd] Embedded Image
n. 快进功能
swift
输入输出参数 In-out Parameters
函数内部参数默认是常量,不允许改变。
在函数参数的类型前加上inout 关键字 ,此参数可以当做变量使用,不但可以改变内部参数同时更改了传进来的实参
下面的代码,不但intValueOne 的值变了,同时one的值也变了
从函数调用就能看出 swap(&one, &two) 这里传入的是指针,联想到c语言 指针作为函数参数,现在就很好理解了
func swapTwoInts(intValueOne: inout Int, intValueTwo: inout Int){
let temp : Int = intValueOne
intValueOne = intValueTwo
intValueTwo = temp
}
var one : Int = 100
var two : Int = 50
swap(&one, &two)
print("one = (one) two = (two)")
//one = 50 two = 100
方法中有block做参数
方法调用 把block的实现写入,block中的参数是该方法内部传入的,可以把它看做反向传值,在这里吗做我们希望的操作
扩展:我们可以在代理方法中加入block参数
[DXQR_Networking loginWithUserInfo:self.userManager complete:^(NSDictionary *returnObjector, DXNetworkingStatus status) {这里面可以做一些操作}]
方法实现:这里block作为传进来的参数 直接给block传值就成
-
(void)loginWithUserInfo:(DXQR_UserManager *)user
complete:(void (^)(NSDictionary *, DXNetworkingStatus))complete {complete(returnObject, DXNetworkingStatusSuccess);
}
读懂奔溃日志 https://developer.apple.com/library/prerelease/content/technotes/tn2151/_index.html
程序奔溃之后,奔溃日志会存储在手机上
低内存奔溃会有内存警告
低内存不需要符号化(Symbolicating)
Debug Symbol (dSYM) file
UUID含义是通用唯一识别码
appStore 发给你的奔溃文件是未经过 符号化的(低内存不需要符号化(Symbolicating)) 你需要自己去符号化他
获取手机上的奔溃信息:https://developer.apple.com/library/content/qa/qa1747/_index.html
通过TestFlight 出现的奔溃文件被上传到appStore
Bitcode 是编译程序的中间产物,方便appStore 根据bitcode把崩溃信息传到开发者手中
未符号化的奔溃日志 中看不到方法名 里面只有16进制的地址
奔溃日志分为三种:
全部没有符号化:文件中没有一个方法名
部分符号化 :文件中有一部分方法名
全部符号化 :文件中全部是方法名
xcode 符号化奔溃日志的要求
1.本地必须要有 binary文件和dSYM文件
http://www.cocoachina.com/ios/20141219/10694.html
什么是 dSYM 文件
Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<用户名>/Library/Developer/Xcode/Archives 目录下,对于每一个发布版本我们都很有必要保存对应的 Archives 文件 ( AUTOMATICALLY SAVE THE DSYM FILES 这篇文章介绍了通过脚本每次编译后都自动保存 dSYM 文件)。
dSYM 文件有什么作用
当我们软件 release 模式打包或上线后,不会像我们在 Xcode 中那样直观的看到用崩溃的错误,这个时候我们就需要分析 crash report 文件了,iOS 设备中会有日志文件保存我们每个应用出错的函数内存地址,通过 Xcode 的 Organizer 可以将 iOS 设备中的 DeviceLog 导出成 crash 文件,这个时候我们就可以通过出错的函数地址去查询 dSYM 文件中程序对应的函数名和文件名。大前提是我们需要有软件版本对应的 dSYM 文件,这也是为什么我们很有必要保存每个发布版本的 Archives 文件了。
如何将文件一一对应
每一个 xx.app 和 xx.app.dSYM 文件都有对应的 UUID,crash 文件也有自己的 UUID,只要这三个文件的 UUID 一致,我们就可以通过他们解析出正确的错误函数信息了。
1.查看 xx.app 文件的 UUID,terminal 中输入命令 :
dwarfdump --uuid xx.app/xx (xx代表你的项目名)
2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中输入命令:
dwarfdump --uuid xx.app.dSYM
3.crash 文件内第一行 Incident Identifier 就是该 crash 文件的 UUID。
使用下面的命令,找到奔溃的方法名和类名
atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH
xcrun atos -arch arm64 -o /Users/achen/Desktop/crashAnalyze/111.app.dSYM/Contents/Resources/DWARF/来访通 -l 0x100054000 0x1000a5f34
最后一个是地址,倒数第二个是偏移
binary image 二进制映象
第三方crash 分析
腾讯的bugly 集成地址https://bugly.qq.com/iosfast
用户主目录,就是那个小房子图标标识的目录
有时候,浏览器下载东西太慢老是下载失败,可以考虑使用迅雷来下载
from email.MIMEText import MIMEText
from import : 从车里把矿泉水拿出来,给我
import : 把车给我
Python之reload函数
reload()函数将以前导入过的模块再加载一次。重新加载(reload)包括最初导入模块时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的Python模块。
若干注意事项:
- 如果模块在语法上是正确的,但在初始化过程中失败,则导入过程不能正确地将模块的名字绑定到符号表中。这时,必须在模块能被重新加载之前使用import()函数加载该模块。
- 重新加载的模块不删除最初旧版本模块在符号表中的登记项。
- 如果一模块利用from。。。import。。。方式从另一模块导入对象,reload()函数不重新定义导入的对象,可利用import。。。形式避免这个问题。
- 提供类的重新加载模块不影响所提供类的任何已存实例---已存实例将继续使用原来的方法定义,只有该类的新实例使用新格式。这个原则对派生类同样适用。
http://www.zg118.com:7998/push?key=V4.gps889.13725562702,a195ed82055a606848454cb9c7b5e3128754301cf804890b73ac404567400f29,gps889={"infoType":"1","from":"V4.myautogps.9e27078a372f9228d53b6dc3596548f1c4cbd9bb24ee1c6e37a515427d367fda","date":"2015-12-21T03:49:51","data":[{"info":"","title":"ACC报警","classify”:"3","macid":"Q15D1063","OffStr":”ACC报
警"}]}&svr=xyXinguangheng&tokenid=S6&isdb=1&msg=梁行你好&sound=warning.caf&userInfo={"type":1,"data":{"type":16,"id":"123"}}
HTTP超文本传输协议-HTTP/1.1中文版 http://javadocs.wikidot.com/hypertext-transfer-protocol-http1-1
[iOS翻译]《iOS 7 Programming Pushing the Limits》系列:你可能不知道的Objective-C技巧 http://www.cnblogs.com/yangfaxian/p/3825336.html
《iOS 7 Programming Pushing the Limits》系列:你可能不知道的ObjC技巧 http://www.cocoachina.com/ios/20140709/9073.html
iOS项目自动化构建实践(Jenkins+Pgyer+Email
http://www.jianshu.com/p/32aa42f57bb3
mac ssh key 的获取 http://blog.csdn.net/yhqbsand/article/details/22763411
终端命令 :ssh -v 查看ssh版本信息,如果系统安装了ssh就会有版本信息打印,如果没有打印则说明电脑中没有安装ssh
ssh-keygen 一路 enter 下去,没有必要设置密码
这个时候,会提示你Your identification has been saved in /Users/mac/.ssh/id_rsa.
Your public key has been saved in /Users/mac/.ssh/id_rsa.pub.
说明ssh key 已经生成,
如何打开id_rsa.pub 文件(因为我们的ssh key)存储在这个文件中 https://www.zhihu.com/question/26071345
终端: cd /Users/mac/.ssh (id_rsa.pub 在.ssh文件夹中)
终端: more id_rsa.pub (即可打印ssh key)
或者 直接复制id_rsa.pub文件内的信息
终端:pbcopy < ~/.ssh/id_rsa.pub http://www.jianshu.com/p/31cbbbc5f9fa/
id_rsa id_pub 公钥与私钥 http://blog.csdn.net/diyxiaoshitou/article/details/52471097
id_rsa 私钥 id_rsa.pub公钥
在oschina上添加SSH公钥 http://blog.csdn.net/dlg1992/article/details/51290604
创建公钥的目的: 使用SSH公钥可以让你在你的电脑和码云通讯的时候使用安全连接(git的remote要使用SSH地址)1.打开终端进入.ssh目录
cd ~/.ssh
如果.ssh文件夹不存在,执行指令自动创建
mkdir ~/.ssh
2.生成RSA密钥对
ssh-keygen -t rsa -C "你的邮箱@xxx.com"
为了方便全程回车即可(不用输入ras文件名及密码)
3.查看公钥内容
cat ~/.ssh/id_rsa.pub
4.将公钥内容复制并粘贴(注意:公钥内容以ssh-rsa开头,你的邮箱结尾)
粘贴地址 http://git.oschina.net/profile/sshkeys
5.添加公钥完成后进行测试公钥
测试SSH链接
ssh -T git@git.oschina.net
当终端提示welcome to Git@OSC ... 表示链接成功
至此以后只要拷贝ssh链接地址,然后利用git指令即可进行相关操作!
find中的钥匙串文件:finder-菜单栏点击前往-长按住option键选择资源库-在里面选择keychain的文件夹
我们选择login.keychain 文件(对应钥匙串中的登录选项,里面储存了所有的开发证书相关)
QQ邮箱的POP3与SMTP服务器是什么 https://zhidao.baidu.com/question/368402993166895164.html
jenkins 卸载插件之后,重启下就可以了
iOS Provisioning Profile(Certificate)与Code Signing详解 http://www.cnblogs.com/lrr0618/p/5388350.html
linux下echo命令详解 http://www.cnblogs.com/perfy/archive/2012/07/24/2605903.html