Mac itunes备份的文件在哪里 Mac itunes备份文件路径解析

Mac itunes备份的文件在哪里?想必很多使用Mac的朋友也不知道,今天PC6小编教大家通过两种办法找到Mac itunes备份文件路径,方便大家直接管理自己的iTunes备份文件夹。

一、打开Finder,在菜单栏点击“前往”选项,按住option键会显示“资料库”,点击进入

在资料库中,可以找到“Application support”文件夹,继续前往下级Mobilesync文件夹里面的backup就是备份文件所在的地方了。

二、另外一种更加便捷的方法是在Finder下直接通过快捷键commnd+shift+G打开前往文件夹,直接复制:用户名/Library/application support/mobilesync然后回车,打开backup里面的就是了。

 

Mac 软件推荐(续)之程序猿篇

在前面一篇文章“Mac 软件推荐续(!程序猿篇)” (文章取名装X失败, 悲伤)中, 我已经介绍了一些大众化的软件, 当然作为程序猿的你也应该参考参考.
本篇文章将介绍一些可以提高程序猿工作效率的一些软件和工具及相关配置.

Mac built-in

首先介绍的就是我觉得应该熟悉 Mac 内置的一些软件及配置.

trackpad 配置

  1. 启用 Tap to click: 在 System Preferences -> Trackpad 中启用, 用 tap 替换 click 的操作, 明明轻轻 tap 就可以完成的, 为何还要用力点击才 OK. 现在偶尔用其他人电脑非得用力 click 就太纠结了.
    同时, 还有 “右键”功能, Secondary click, 用两个手指 tap 弹出右键菜单.
    mac trackpad 设置
  2. 开启单词选词查询:
    选中某个中英文单词后, 三指 tab 会弹出词典释义. 这个在之前一篇文章中也有介绍.
  3. Scroll 方向: 这个道是自己习惯就好. 由于我刚开始从 Win 转向 Mac 的时候习惯用 Win 的那种方式, 于是就没有开启 Scroll direction: natural, 然后也一直沿用至今.
  4. 其他手势: 有必要熟悉一下, 比如知道在 Win 环境下用 win+d 可以显示桌面, 相应的功能在 Mac 下如何做.

快捷键

作为程序猿, 肯定离不开各种快捷键. 对于 Mac 内置的一些快捷键, 我们还是很有必要知道的. 基本的复制/粘贴就不说了, 常用的还有

空格键: 预览
cmd + ,: 设置
cmd + -/=: 缩小/放大
ctrl + u: 删除到行首(与zsh冲突, zsh中是删除整行)
ctrl + k: 删除到行尾
ctrl + p/n: 上/下移动一行或者前/后一个命令
ctrl + b/f: 光标前/后移char
esc + b/f: 光标前/后移word(蛋疼不能连续work)
ctrl + a/e: 到行首/行尾
ctrl + h/d: 删前/后字符
ctrl + y: 粘贴
ctrl + w: 删除前一个单词
esc + d: 删后一个单词
ctrl + _: undo
ctrl + r: bck-i-search/reverse-i-search, 输入关键字搜索历史命令

上面的这些快捷键特别是在敲命令时还是很有用的(可能有的确实是在命令行中才生效), 特别是结合 zsh 自动补全等功能. 比较 DT 的是就是 esc 一起用的时候, 不能连续使用. 举个例子, terminal 中输入了 git push origin source, 光标在末尾, 这时按住ctrl 不放, 按一下 w 即向前删除一个单词, 第一次按 w 删除 source, 再按 w 删除 origin. 而 esc + d 不能这样结合使用(如下 gif连续按就不 work), esc 必须中途释放再按才能 work.

bash自动补全

啥? 你说上面快捷键 ctrl + w 等不太好按? 按键特别别扭?
你需要做的就是将 caps lock 映射为 ctrl, Keyboard -> Modifier Keys修改, 目前我笔记本上的 ctrl 键无效. 不过, 一般情况下我用我的 HHKB, 这种映射方式正好符合 HHKB 的布局. (其实我是在买 HHKB 之前就修改的这个映射)

另外, 借助之前介绍的Karabiner, 可以将一些常用的方向键(上下左右)重新映射一下, 比如我目前是 s + h/j/k/l 来表示方向, 手不用太移动就能直接按方向(HHKB 本身按方向太麻烦, Mac 内置键盘有方向键还需要大幅度移动手), 用起来方便多了.

Mac 内置的更多的快捷键列表可以参考 Mac 官网

其他还有一些常用的软件的快捷键, 可以用之前介绍的软件 cheetsheet, 长按 cmd, 可弹出当前 active 的软件的快捷键.

截图

这个从快捷键中单独列出来了, 就强调下这个功能.

cmd + shift + 3 截取整个屏幕.
cmd + shift + 4 部分窗口, 出现十字供选取, 若此时按空格键(这个技能得点赞), 会选取当前应用的窗口, 再 tap 即可完成截图.

上面快捷键是截图后以文件形式保存在桌面(默认是桌面, 当然你也可以自己修改保存位置), 再上面快捷键基础上再同时按 ctrl 就会把图片保存在内存/剪贴板中, 直接去相应窗口粘贴即可.

home brew

类似 centos 的 yum, ubuntu 的 apt-get, 能够方便管理安装软件包.
Mac 上类似的应用还有port, 我刚开始试用过 port, 貌似 brew 上的源会多一些.
brew-cask 是 brew 的一个加强版, 可以安装一些桌面应用, 例如 chrome 等等之类的.

这里就不多介绍了, 详情可以到官网查看.
brew
brew-cask

iTerm2

iTerm2官网有介绍功能. 以下是觉得可能常用的功能.

  1. 分屏功能
    • cmd + d 竖着分屏, cmd + shift + d 横着分屏
    • cmd + t 新建一个 tab, cmd + num 切换到第 num 个 tab
    • 当前窗口含有分屏时, 通过 cmd + [cmd + ] 来进行切换小的分屏
  2. 热键 设置一个热键, 比如我的是 alt + 空格, 弹出 iTerm2, 且以半透明的方式显示在当前 active 的窗口上面.
    iTerm2 hotkey
  3. 搜索
    • cmd + f搜索输入关键字后, 匹配的会黄色高亮, 此时按 tab 或者 shift + tab 会自动向后/前以word 的方式选中高亮的, 并自动 copy 到剪切板.
    • cmd + alt + e, 在所有的 tab 中全局搜索, 搜索出候选项后, 再选着你想要进入的 tab.

iTerm2 search

  1. 其他
    • 新版本的 iTerm2 还支持直接在控制台里 ls 图片文件(图片显示在控制台里).(如上图下半部分, 连 gif 都支持)
    • 自动识别控制台里的内容, 如含有链接或者本地文件路径可以用 cmd 加点击的方式直接打开链接或者文件(如下图上半部分). 这个功能很重要呢, 比如在编译过程中, 出现了 warning 或者 error, 一般会打印出具体文件路径, 此时直接从控制台就能打开文件进行 fix 了.
    • 自动补全, iTerm2 本身是支持自动补全的(cmd + ;), 不过建议直接结合后面的zsh使用. cmd + shift + h 剪贴板历史(下图最后一行).
    • 一些高级的功能目前可能处于测试版本, 你若用的稳定版是不支持的, 需要到官网下测试版. 还有更多的功能请到 iTerm2 官网探索吧.

iTerm2 imgcat

zsh

这个墙裂推荐啊. 结合 oh my zsh, 丰富的插件资源.

语法高亮, 自动补全等特别好, 在此推荐的几个插件或功能.

  1. git: 当前目录若是在一个 git repo 下面的话, 会自动显示当前的分支信息等等. 然后可以自己搞一些 alias, 简写命令, 比如我常用的一些.
alias gs=’git status’
alias gb=’git branch -va’
alias gco=’git checkout’
alias ga=’git add’
alias gc=’git commit -m’
alias gp=’git push’
alias gfom=’git fetch origin master’
alias gfod=’git fetch origin develop’
alias grod=’git rebase origin/develop’
alias grom=’git rebase origin/master’
  1. autojump: 这个也炒鸡赞. 会自动记录你 cd 过的目录, 下次你直接 j keyword 就会自动 cd 到以 keyword 匹配的目录. 输入 d会展示当前会话访问过的目录, 然后对应目录有标号, 接下来按标号即可跳转.
  2. osx: 举个最简单的例子, 比如你现在正在 finder 中浏览一个很深的目录, 现在突然想 cd 到这个目录去做一些命令操作. 如果你用xtrafinder 这样的软件的话道有这样的功能, 如果配上这个插件, 你直接输入 cdf (cd finder)就自动 cd 到 finder 打开的目录下.
  3. zsh-autosuggestions, 如下图所示, 我在 app-in-mac 这个目录下, 刚输入了 git, 此时光标还在 p 前面, zsh 就已经自动给我补全了 git push origin source, 此时我只要按 ctrl + e 跳转到行尾(所以熟悉上文中的快捷键很有必要啊), 回车即可执行命令了.

iTerm2 zsh plugins

更多的, 还是请到官网查看.

sublime text

文本编辑器, 也有丰富的插件支持, 直接官网看吧. 这个 App, 我用得也不是很多.

这里分享一个小的功能, 怎么在命令行用 sublime 打开特定的文件. 其实就是添加一个软链即可. (直接 open filename 会以文件默认关键的软件打开)

➜ app-in-mac git:(source) ✗ subl dungeon-game.cpp
➜ app-in-mac git:(source) ✗ which subl
/usr/local/bin/subl
➜ app-in-mac git:(source) ✗ ls -la /usr/local/bin/subl
lrwxr-xr-x 1 tanglei admin 62 1 24 2016 /usr/local/bin/subl -> /Applications/Sublime Text.app/Contents/SharedSupport/bin/subl

Vim

介绍 Vim 的文章也很多了. 这里就不详细展开了. 分享下我用的部分插件. (最近被 IntelliJ IDEA 搞得恶心了, 准备尝试抛弃),
为了让多台电脑同步我的 vim 配置/插件等, 我直接放 github 了(ref vimconfigs), 不同电脑只需要再建一个软链到github 中的 vimrc 即可.

vim 自动补全

  • Vundle/Pathogen: 插件管理, 我用的Pathogen, 直接将下面 github repo clone 到 ~/.vim/bundle/ 目录下即可
  • NERDTree: 文件目录树nerdtree github src
  • YouCompleteMe: YouCompleteMe github src 自动补全, 对C系列, 结合其他的可支持 Java/Python/Js 等, 跪求 Scala 支持
  • ctrlp.vim: 快速搜索文件
  • minibufexpl.vim: 会把最近打开的文件列出来方便跳转, github src
  • conque-term: shell 跑在 vim 里面, github src
  • ag: 代码搜索, 可结合 ctrlp.vim, 如果后者搜索太慢的话, github src
  • tagbar/taglist: 标签, 能显示类结构信息等, tagbar github src
  • vim-surround: 处理诸如(), "", [] 等配对信息, github src, ref
  • vim-easymotion: 快速跳转, 关键字后会给匹配到的标记, 再选标记并跳转(类似后文介绍 Chrome 插件的Vimium中的链接标记并跳转功能:按键 f 会将本文所有链接突出显示并用字母标记, 然后按相应的字母则会新开标签页打开). github src, ref
  • vim-powerline: 增强状态栏 github src
  • vim-indent-guides: 缩进可视化, github src

具体效果等配置方法可以参考下面的两篇文章, 插件具体用法可阅读具体插件的 doc.

Reference

Dash

其实介绍前文 介绍 Alfred 已经提到过, 这里再介绍一下. 程序猿应该必备啊. 内置各种语言, 各种环境的各种文档. 该 App 还提供各种 API 供其他工具交互使用. 例如 Vim(不是想象当中自动补全功能, 只是能够快捷地搜索 API), Sublime 等. (p.s 要是有人写了一个 Vim 插件, 能够支持调用 dash 的 API(如果有的话) 自动补全代码, 那应该会很受欢迎的)

dash

其他App

chrome

插件

  • AdBlock: 广告屏蔽;
  • EditThisCookie: 修改 cookie;
  • Evernote Web Clipper: 印象笔记;
  • JSONView and JSONLint for Google Chrome™: 请求返回的json进行beautify方便查看;
  • Markdown Here: 在富文本输入markdown, 渲染成 html;
  • Markdown Preview Plus: 渲染 .md 文件, 相当于 preview markdown;
  • Open Screenshot: 网页截图, 能够自动下拉截长图;
  • Postman: 请求伪造/抓包等, 也可以用curl;
  • Proxy SwitchySharp: proxy 切换;
  • RescueTime: 前文有介绍的RescueTime;
  • undirect: google/baidu 搜索结果, 点击直达网站, 这个貌似不太好用了. 征求替代品;
  • Vimium: 操作 vim 一样操作浏览器, 移动查找等功能, 还有前文提到的快速标记链接并跳转;

Charles

类 Windows 下 Fiddler 抓包应用.

相关命令 tcpdump

其他有用的命令行

一些好用的命令(基本的什么ls/cd/cp/rm之类的这里就直接忽略了), 我觉得作为程序猿还是应该了解, 至少只当某个场景下直接用相应的命令就能解决. 具体参数可以再 --help 或者 man commond 再看.

  • screen: 特别是 ssh 到登录远程时用以管理会话
  • curl: 网络请求, 相关的还有 traceroute, dig
  • find: 文件查找
  • grep/zgrep/zcat: 查看日志的时候用
  • awk: 这个本身就很强大了, 具体编程语法不用太掌握但可以了解一些基本的用法, 比如之前用到过给一个log文件, 能够取里面的参数拼接update 的sql(文件里有相应 update 的值和 where 条件值)
  • sed: 文本替换, 还有 tr, 注意 sed 的语法 Mac 和 一般 Linux 还有些不一样( 比如原文替换的时候 mac 里需要用参数 -i ""), 比如之前迁移 wordpress 到 jekyll 上的时候需要将一些链接整体替换成新的路径.
  • cut: 按列取数据, awk 也可以
  • sort: 这个就不多说了
  • uniq: 一般和 sort 一块用, 只能去重相邻的行
  • diff: 比较文件, 类似的还有 comm (输出3列, 分别是: 只在文件1, 只在文件2 和两个文件都在的行)
  • paste: 两个文件按列拼接
  • od: 以16/8/2进制查看文件
  • wc: 统计文件字节数/字数/行数

结合这些命令可能就能完成某些复杂的功能, 举个例子, 如线上的web 访问日志会记录 请求时间, 请求路径, 参数 等等. 现在需要统计 当天请求路径为 A, 排名前10的参数, 就可以 grep 路径A | cut 取出想要的数据列 | sort | uniq 之类的, 或者比如统计http 404 请求最多的10个路径. 再比如, 随机生成3个长度为8包含字母数字的字符串(偶尔会用到, 比如各种生产 secret key 的时候), 直接用如下命令即可

➜ _includes git:(source) ✗ cat /dev/urandom | sed ‘s/[^a-zA-Z0-9]//g’ | head -n 3 | cut -c 1-8
MaL6nEmZ
00m2Ub19
rsc4AOQm

其他的可能较少用, 但一旦用, 能省不少时间. 网上也有一些 online 的工具, 但哪有这个快准狠.

  • openssl sha1/aes-256-ecb/des/base64 等等: 比如当前我们开发用的 MVC 框架play framework用来加密 session 的算法, 可以方便算出 encoded 的 sessionid 进行 debug.
  • md5/base64: 常见的 md5, base64 编码
  • sips: scriptable image processing system 比如批量处理图片大小, 压缩等等

全文完, 关于 Mac 使用技巧和工具软件推荐, 一共如下3篇文章:

p.s 如果你觉得这文章对你有那么一点点收获, 请不要犹豫扫描下面二维码关注我的公众号, 如果你再能帮忙转发一下就更好了. 么么哒.

imac无法进入

你也可以开机的时候按住苹果+S键进入单用户磁盘修复命令模式,输入sh回车,再输入/sbin/fsck -fy回车(看清楚-fy前面是有个空格的),开始修复磁盘, 直到出现 The volume (name这里就是你的磁盘的名) appears to be OK 提示,表示修复完成,如果没有出现就在修复一次直到出现The volume (name) appears to be OK 提示后表示修复成功,最后输入reboot重启进入系统,就可以了,如果一直都有错误,可以考虑更换硬盘了。
sh
/sbin/fsck -fy
………………. (就开始检查修复磁盘错误 )
The volume (name) appears to be OK(表示修复成功)
如果没有出现上面的,就再输入一次
/sbin/fsck -fy
直到The volume (name) appears to be OK(表示修复成功)
reboot(重启进入系统就可以分区了)

iOS 升级HTTPS通过ATS你所要知道的

苹果强制升级的HTTPS不仅仅是在接口HTTP上加个S那么简单:
它所有满足的是iOS9中新增App Transport Security(简称ATS)特性:
那满足ATS我们需要做什么呢
1.必须是苹果信任的CA证书机构颁发的证书
2.后台传输协议必须满足: TLS1.2 (这很重要, 后面的自制证书满足这个条件是前提)
3.签字算法只能是下面的一种:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

4.证书必须使用SHA256或者更好的哈希算法进行签名,要么是2048位或者更长的RSA密钥,要么就是256位或更长的ECC密钥。

目前有两种升级到HTTPS得方法:
1.第三方认证的颁发CA证书(推荐)
2.自己制作证书(这种不知道能不能满足苹果的审核)

一: 第三方认证的颁发CA证书

证书到底长什么样子呢? 取个栗子:
大家请打开https://www.baidu.com
然后看到

百度的证书分析

那些证书机构颁发的证书能用:苹果官方信任证书

收费SSL证书: 网上百度一大把, 收费还挺贵的,自己可以多找几个对比一下
免费SSL证书: 除了收费的CA证书机构, 你还可以去腾讯云申请免费的SSL证书, 教程免费在腾讯云申请SSL证书的方法
沃通(WoSign)免费的SSL证书最近被苹果封杀了, 能不能用大家可以看一下苹果的公告: 您的苹果手机轻点“设置”>“通用”>“关于本机”>”证书信任设置”>”进一步了解被信任的证书”去了解

检测你的接口是否满足苹果的ATS要求, 有以下两种方法:

1.腾讯云提供的检测页面检测

腾讯云的检测页面

2 终端输入 nsurl --ats-diagnostics --verbose 你的接口地址
大家可以参考这篇文章,里面的说的很明白:
关于iOS9中的App Transport Security相关说明及适配(更新于2016.7.1)
里面会详细说明你的证书哪点不符合ATS要求
当然下面自己制作证书去实现HTTPS的,检测不通过的,所以我觉得审核会被拒
这种方法配置好了, 在手机端就什么都不用配置就可以请求了

二: 自己制作证书

苹果官方信任证书里说到有三种证书:

1 可信的根证书用于建立信任链,以验证由可信的根签署的其他证书,例如,与 Web 服务器建立安全连接。当 IT 管理员创建 iPhone、iPad 或 iPod touch 的配置描述文件时,无需提供这些可信的根证书。
2 始终询问的证书不受信任,但不受阻止。使用其中一个证书时,系统将提示您选择是否信任该证书。
3 已阻止的证书视为被盗用,将不再受信任。

自制证书我觉得应该就是属于第二种情况, 所以这种方法我也不知道能不能通过苹果的审核, 只是提供一个方法给大家参考, 看到网上有人说可以,有人说不可以, 不到1月1号,自己没试过都不敢说大话
这种方式拿到后台的接口用谷歌浏览器打开跟百度的证书是有区别的

自己制作证书

很明显没有绿锁, 当打开的时候会询问是否连接这个不受信任的连接才会进一步打开, 下面就来一步步的实现(包括怎么制作证书)
iOS使用自签名证书实现HTTPS请求
iOS Https协议 自签证书访问数据参考这个例子的时候,博主自带的Demo AFN框架请求不了数据, 我用了最新AFN版本的成功返回数据
还可以参考一下
iOS 10 适配 ATS app支持https通过App Store审核

我在利用原生的代码测试时遇到的问题

@interface ViewController () <NSURLSessionDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {


}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];

   NSURLSessionDataTask *task =  [session dataTaskWithURL:[NSURL URLWithString:@"https://www.baidu.com"] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];
   [task resume];
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
 completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {
    NSLog(@"接收到服务器响应");
    //注意:这里需要使用completionHandler回调告诉系统应该如何处理服务器返回的数据
    //默认是取消
    /**
     NSURLSessionResponseCancel = 0,            默认的处理方式,取消
     NSURLSessionResponseAllow = 1,             接收服务器返回的数据
     NSURLSessionResponseBecomeDownload = 2,    变成一个下载请求
     NSURLSessionResponseBecomeStream           变成一个流
     */
    completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data {
    NSLog(@"获取到服务段数据");
    NSLog(@"%@",[self jsonToDictionary:data]);
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(nullable NSError *)error {
    NSLog(@"请求完成%@", error);
}

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler {
    NSLog(@"证书认证");
    if ([[[challenge protectionSpace] authenticationMethod] isEqualToString: NSURLAuthenticationMethodServerTrust]) {
        do
        {
            SecTrustRef serverTrust = [[challenge protectionSpace] serverTrust];
            NSCAssert(serverTrust != nil, @"serverTrust is nil");
            if(nil == serverTrust)
                break; /* failed */
            /**
             *  导入多张CA证书(Certification Authority,支持SSL证书以及自签名的CA),请替换掉你的证书名称
             */
            NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"ca" ofType:@"cer"];//自签名证书
            NSData* caCert = [NSData dataWithContentsOfFile:cerPath];

            NSCAssert(caCert != nil, @"caCert is nil");
            if(nil == caCert)
                break; /* failed */

            SecCertificateRef caRef = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)caCert);
            NSCAssert(caRef != nil, @"caRef is nil");
            if(nil == caRef)
                break; /* failed */

            //可以添加多张证书
            NSArray *caArray = @[(__bridge id)(caRef)];

            NSCAssert(caArray != nil, @"caArray is nil");
            if(nil == caArray)
                break; /* failed */

            //将读取的证书设置为服务端帧数的根证书
            OSStatus status = SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)caArray);
            NSCAssert(errSecSuccess == status, @"SecTrustSetAnchorCertificates failed");
            if(!(errSecSuccess == status))
                break; /* failed */

            SecTrustResultType result = -1;
            //通过本地导入的证书来验证服务器的证书是否可信
            status = SecTrustEvaluate(serverTrust, &result);
            if(!(errSecSuccess == status))
                break; /* failed */
            NSLog(@"stutas:%d",(int)status);
            NSLog(@"Result: %d", result);

            BOOL allowConnect = (result == kSecTrustResultUnspecified) || (result == kSecTrustResultProceed);
            if (allowConnect) {
                NSLog(@"success");
            }else {
                NSLog(@"error");
            }

            /* kSecTrustResultUnspecified and kSecTrustResultProceed are success */
            if(! allowConnect)
            {
                break; /* failed */
            }

#if 0
            /* Treat kSecTrustResultConfirm and kSecTrustResultRecoverableTrustFailure as success */
            /*   since the user will likely tap-through to see the dancing bunnies */
            if(result == kSecTrustResultDeny || result == kSecTrustResultFatalTrustFailure || result == kSecTrustResultOtherError)
                break; /* failed to trust cert (good in this case) */
#endif

            // The only good exit point
            NSLog(@"信任该证书");

            NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
            completionHandler(NSURLSessionAuthChallengeUseCredential,credential);
            return [[challenge sender] useCredential: credential
                          forAuthenticationChallenge: challenge];

        }
        while(0);
    }

    // Bad dog
    NSURLCredential *credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
    completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge,credential);
    return [[challenge sender] cancelAuthenticationChallenge: challenge];
}

- (NSDictionary *)jsonToDictionary:(NSData *)jsonData {
    NSError *jsonError;
    NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:&jsonError];
    return resultDic;
}

@end

下面说说我在配置自己制作证书过程中遇到的问题:
1.转换证书: 把后台给你的.crt证书转化为.cer后缀
终端命令行openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der

2.利用系统的方法来不到- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler { NSLog(@"证书认证"); }这个方法的时候, 是因为后台的传输协议还没升级到TLS1.2, 叫后台升级后就可以来到验证证书的这个方法了.

3.拖入证书读取不出证书数据
参考: https的证书错误,错误码-1012问题及解决方案

SDWebImage: 项目中大家用到AFN请求网络数据, 升级验证SSL证书的方案相信你看完上面的参考文章已经没问题了, 我给出的代码, 自定义网络请求也没问题了, 还有就是SDWebImage框架的请求HTTPS的图片时,大家可以绕过证书验证去加载图片[imageView sd_setImageWithURL:[NSURL URLWithString:urlString] placeholderImage:self.placeholder options:SDWebImageAllowInvalidSSLCertificates];

恩, 这就是这几天升级HTTPS觉得有帮助的参考和总结.希望帮到你

 

文/床前明月_光(简书作者)
原文链接:http://www.jianshu.com/p/2d72ef8dbf5a
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

技术周刊 Vol.7 – 【iOS丨好好学习,从娃抓起~】

我有一程序员朋友阿温,92 年,高个子,体型偏瘦,平时不善言辞,比较低调。最近,阿温家小娃出生,让他当了一回公司的热议人物。

事情是这样的,那会儿大家都还在睡午觉,只听阿温一声猝不及防的喊声,接下来便是以迅雷不及掩耳之势跑了出去,留下被惊醒群众一脸懵逼。向来稳重的他,今天如此异常的行为引来了不少同事的关注,群里有人开始调侃是不是预定的 7 到了,也有人说是不是手机刷 iOS 10 砖头了……但事实的真相,在之后的一个小时都没有得到当事人阿温的亲自证实。

「还在高速,结果娃已经……」阿温突然在群里发了言,打破了公司群的宁静。

「儿子比手机先到啊」阿温先生紧接着又发了个言,原来本该 10 月中旬出生的娃,提前来到了这个世界。

「你还惦记着手机- -」测试大妹子忍不住骂道。
「儿子生气了,要提前出来……」前端大哥笑着附和。
「升级了啊!」移动端小哥为荣升为爸爸的阿温送上恭喜。
「阿温,公司 10 后程序员就靠你~」CTO 正儿八经地说着笑话。
……

「可以开个程序员从入门到育儿的课程了」运营妹子也加入了这热闹的讨论,并贴心地抛出了几篇 iOS 入门指南,吓得我的朋友阿温再也不敢在群里发言了。

iPhone7 上市,iOS 10 发布,运营妹子都说了编程要从小娃娃抓起,就顺势接个招,分享一些和 iOS 相关的知识。本期周刊,内容包括 iOS 的入门知识、进阶演练,并配有系列学习,也为大家整理了在 iOS 开发过程中经常会遇到的问题及解决方法,最后还会和大家分享部分 iOS 开发过程用到的工具,比较齐全的 iOS 汇总资源

(﹁”﹁)希望此时的你已习惯刚升级的 iOS 10~

iOS day day up

此部分将和大家分享 iOS 入门及进阶的一些知识,另有 Auto Layout,自定义控件等特辑的学习,希望能让你的 iOS 学习 day day up~

入门

进阶

系列学习

扩展阅读

问题解决篇

get 了比较基本的 iOS 学习知识,并通过不少实例来巩固了一下基础,但 iOS 开发之路上,还是有那么多坑需要填,以下是社区小伙伴躺枪后吸取教训,并找出的一些解决方式,希望你能够少走弯路,多点成长。

工具类及资源汇总

最后,为你带来了提高效率的工具篇,进一步扩展知识的学习资源汇总,希望能更好地帮助到走在 iOS 开发路上的你~

工具类

资源汇总

(本期完)


往期周刊传送门:

 

Homebrew 完全卸载

字数42 阅读218 评论0
$ cd `brew --prefix`
$ rm -rf Cellar$ brew prune
$ rm -rf Library .git .gitignore bin/brew README.md share/man/man1/brew
$ rm -rf ~/Library/Caches/Homebrew

重装Homebrew

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

iOS App上架流程(2016详细版)

一、前言:

作为一名iOSer,把开发出来的App上传到App Store是必要的。下面就来详细讲解一下具体流程步骤。

二、准备:

  1. 一个已付费的开发者账号(账号类型分为个人(Individual)、公司(Company)、企业(Enterprise)、高校(University)四种类型,每年资费分别为$99、$99、$299、免费。)。
  2. 一个已经开发完成的项目。

三、检查:

  1. 你的Xcode必须是正式版的,beta版本的Xcode是不能上传项目的。
  2. 上传使用的 Mac 的 OS X系统必须也是正式版的,beta版本也不行。
  3. 请确认你安装的Xcode是从App Store或者是开发者网站下载的,而不是从其它渠道获取的安装包安装的,因为非官方途径下载的Xcode可能带有XcodeGhost 病毒。如何检查?

    检查方法

四、生成发布证书

  1. 打开苹果开发者中心:https://developer.apple.com
    打开后点击:Account

    苹果开发者中心

    下面输入已付款过的Apple账号和密码登录(如果你的电脑已经保存了密码,会直接进入)

    开发者登录账号
  2. 点击:Certificates, Identifiers & Profiles (专门生成证书,绑定Bundle Id,绑定device设备,生成描述文件的地方)

    Member Center
  3. 点击Certificates生成证书
    1. 选择iOS, tvOS, watchOS
    2. 选择All
    3. 点击右上角新添加证书

      添加新证书1
    4. 由于是做App上传,选择生产证书(选择App Store and Ad Hoc)

      选择App Store and Ad Hoc

      注意:一个开发者账号只能创建(1-2个开发(测试)证书,2-3个生产(发布)证书),如果你的App Store Ad Hoc 前面的按钮不能选择,则代表你的这个账号无法再创建新的生产证书了。
      解决方法:

      1. 从共同使用这个账号的人电脑上生成.p12文件,导入自己的电脑。(尽量不要执行下面第2步)
      2. 如果你想生成的话,把现有的删除一个(建议删除时间比较靠前的)。注意:如果删除一个证书,那么正在使用这个证书的人将不能再使用了,除非重新生成,然后利用.p12重新导入自己的电脑里!
        注意:如果你想删除证书,执行下面步骤,否则略过。

        删除证书

      然后接上上图,生产证书部分继续

      生成证书2

      生成证书3

      生成证书4
    5. 上传CSR文件去获取证书(CSR文件需要我们到本机钥匙串里去创建)
      1. 在Launchpad的其他里面,点击钥匙串访问弹出如下界面

        其他

        钥匙串访问
      2. 工具栏选择钥匙串访问->证书助理->从证书颁发机构请求证书…

        请求证书

        证书信息
      3. 将CSR文件保存到MAC磁盘的某个位置(这里我选择的是桌面,进行存储)

        存储证书

        点击完成

        CertificateSigningRequest.certSigningRequest 文件
    6. 然后回到浏览器,点击choose File..

      选择CSR文件
    7. 选择创建好的:CertificateSigningRequest.certSigningRequest 文件,点击选取

      选取CSR文件

      点击Generate上传证书

      上传CSR证书
    8. 跳转到如下界面,点击 DownLoad 下载生成的证书(cer后缀的文件),然后点击Done,你创建的发布证书就会存储在帐号中。

      下载生成的证书

cer后缀的文件

注意:这个证书只能下载一次。点击下载后,关闭页面后就不能再回到下载页面了。
如果不需要给别的电脑使用,则直接跳过下面附加项,跳转到第五步(绑定Bundle Identifier)

附加项:生成p12文件在其他电脑上使用这个发布证书

  1. 双击安装证书后,打开钥匙串访问,选择安装的证书右键单击

    安装的发布证书

    注意:如果没有导出,可以把这个证书删除,然后重新双击下载的证书文件安装。

    1. 导出证书

      导出证书
    2. 存储证书

      存储导出的证书

      注意:存储的文件格式一定要是.p12

    3. 设置密码
      可以为证书设置密码,也可以不设置密码;如果设置了密码,那么别人安装这个证书的时候就要输入密码,否则无法安装。这里就不设置密码了。

      设置密码
    4. 保存导出的证书

      p12发布证书

      如果需要在其它电脑上也能发布App,那么就必须要安装这个发布证书。

五、创建App IDs和绑定你的App的Bundle Identifier

回到刚才的页面:https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action

  1. 点击App IDs,进入如下界面,点击右上角的 +

    点击App IDs
  2. 填写App IDs和Bundle Identifier

    填写App IDs和Bundle Identifier

    注意:

    1. 上传App使用的Bundle Identifier(不要有-,都是英文+数字)必须是固定的,不能使用占位符。
    2. 如果你的Bundle Identifier已经在网站上绑定了,如果你又修改了你工程里面这个Bundle Identifier的话,需要重新进入到开发者账号里面绑定。

      修改工程的Bundle Identifier

      下面选择App中包含的服务,默认有两项,其余的根据自己项目的需求进行选择

      App Services
  3. 点击continue

    点击continue
  4. 点击Register

    点击Register
  5. 点击Done

    点击Done

六、生成描述文件(描述文件的作用就是把证书和Bundle Identifier关联起来)

  1. 找到Provisioning Profiles ,点击All,然后点击右上角 + 号

    Provisioning Profiles
  2. 因为是发布,所以选择下面App Store这个描述文件,点击Continue

    选择App Store
  3. 在App ID 这个选项栏里面找到你刚刚创建的:App IDs(Bundle Identifier) 类型的套装,点击Continue

    选择发布项目的Bundle Identifier
  4. 选择你刚创建的发布证书(或者生成p12文件的那个发布证书),根据自己电脑上的发布证书日期来选择,点击Continue

    选择创建的发布证书
  5. 在Profile Name栏里输入一个名字(这个是PP文件的名字,可随便输入,在这里我用工程名字,便于分别),然后点击Generate

    给描述文件起个名字
  6. Download生成的PP文件,然后点击Done,双击安装(闪一下就完事了,没其它效果)

    Download生成的PP文件

    生成的描述文件

六、在App Store开辟空间

  1. 回到Member Center,点击iTunes Connect

    点击iTunes Connect
  2. 登录开发者账号(还是之前已付费的账号)

    Snip20160315_68.png
  3. 登录成功后,点击我的App

    点击我的App
  4. 点击左上角那个+号,点击新建(注意:我们是iOS App开发,不要选Mac App啦)

    新建 App
  5. 依次按提示填入对应信息(SKU是公司用于做统计数据之类的id,根据公司需求填写),然后点击创建

    填写App信息

    注意:如果都填好以后,可能会告诉你,你的App名称已经被占用,那么不好意思,你只能改名了!(而且建议大家起名不要往比较出名的App上靠,否则审核可能会被拒绝)

  6. 填写App其它信息

    App信息
  7. 填写价格和销售范围(由于我的开发者账号没有签订纳税合同,所以不能上线收费应用,所以只能暂时免费)

    填写价格和销售范围
  8. 依次把不同尺寸的App截图拉入到对应的里面
    需要填写不同尺寸的手机屏幕截图(也就是拿不同尺寸的模拟器运行后,挑出至少3页最多5页进行截图然后拖到响应的区里)(在模拟器Command+S 就可以保存屏幕截图到桌面了)(注意:如果提示拖进去的图片尺寸不对,则把模拟器弄成100%然后再Command 加 S) 尺寸参照表在下面

    设置不同尺寸的App截图

    尺寸参照图

    尺寸参照图
  9. 填写App简介

    填写App简介
  10. 按提示依次输入

    按提示依次输入

    错误提示:如果上传App 图标失败,提示Alpha错误的话,看下面。
    打开你的图标图片,勾掉这个

    勾掉这个
  11. 点击分级后面的编辑,如实填写后,点击完成

    分级信息
  12. 填写审核信息

    填写审核信息

    版本发布就是:(然后最下面选择自动发布的话就是如果审核通过,就自动上传到App Store供人下载)

  13. 此时这个构建版本还没有生成,我们先把基本信息填写完毕,然后再进入Xcode中把项目打包发送到过来。
    注意:填写完一定要点击右上角的保存。

七、在Xcode中打包工程

找到你刚刚下载的发布证书(后缀为.cer)或者p12文件,和PP文件,双击,看起来没反应,但是他们已经加入到你的钥匙串中。

  1. 在Xcode中选择iOS Device(这里不能选择模拟器),按照下图提示操作

    选择iOS Device
  2. 如果你的应用不支持横屏,把这两个勾去掉

    如果你的应用不支持横屏,把这两个勾去掉
  3. 查看版本号和构建版本号

    查看版本号和构建版本号
  4. 配置发布证书

    配置发布证书

    注意:如果这里没有黄色叹号,代表你的配置没问题,如果有,那就是证书和描述文件不匹配,或者描述文件里刚才选的Bundle和现在的工程的Bundle Identifier不一致,去develop.apple.com 上找到你的描述文件在确认下绑定的bundle Identifier和你工程是不是一样的?

    检查
  5. 断点全局断点僵尸模式等都要去掉。

    去掉断点、全局断点

Snip20160315_36.png

Snip20160315_37.png

去掉僵尸模式

6.设置Release模式(Debug是测试的,Release是发布用的)

Snip20160315_39.png

Snip20160315_40.png

Snip20160315_41.png

Snip20160315_42.png

7.选择 Xcode下 Product 下 Archive(专门用于传项目,或者打包项目)

选择Archive

Snip20160315_45.png

Snip20160315_46.png

8.出现下图说明你没有添加开发者账号,点击右下脚Add… 按钮就可以添加

没有添加开发者账号

9.输入付费的开发者账号

输入开发者账号

可能会弹出下面这个界面,如果不弹出,按Command加。

10.然后回到Archive(选择已付费的账号),然后点击Choose

选择已付费的账号

然后等待

等待

11.选择Upload提交

Upload提交

12.如下就代表上传成功,如果出错,请参照iOS App上传项目遇到的问题

上传成功

13.返回ItunesConnect网站上你自己的App信息中查看一下

在App信息中查看

14.在这个构建版本这里就可以添加代码

添加代码

点击+号之后选择代码版本

添加构建版本

15.提交以供审核

提交以供审核

16.App已经从准备提交,变成正在等待审核状态

正在等待审核状态

17.等待苹果的审核…

 

文/冰晨(简书作者)
原文链接:http://www.jianshu.com/p/b1b77d804254
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

iOS 学习资料整理

这份学习资料是为 iOS 初学者所准备的, 旨在帮助 iOS 初学者们快速找到适合自己的学习资料, 节省他们搜索资料的时间, 使他们更好的规划好自己的 iOS 学习路线, 更快的入门, 更准确的定位的目前所处的位置.

该文档会持续更新, 同时也欢迎更多具有丰富经验的 iOS 开发者将自己的常用的一些工具, 学习资料, 学习心得等分享上来, 我将定期筛选合并, 文档尚有一些不完善之处, 也请不吝指出, 感谢您对 iOS 所做的贡献, 让我们一起把国内的 iOS 做得更好, 谢谢.

如果您有任何意见或建议也可以通过邮件或微博@李锦发联系我
我的微信:lijinfa894330982

本文章由 The EST Group 成员 @Aufree 整理而成, 转载请注明出处.

视频教程(英文)

视频 简介
Developing iOS 7 Apps for iPhone and iPad 斯坦福开放教程之一, 课程主要讲解了一些 iOS 开发工具和 API 以及 iOS SDK 的使用, 属于 iOS 基础视频
iPad and iPhone Application Development 该课程的讲师 Paul Hegarty 是斯坦福大学软件工程学教授, 视频内容讲解得深入, 权威, 深受好评
Advanced iPhone Development – Fall 2010 iOS 开发的进阶课程, 开始涉及到 Core Animation, Core Data, OpenGL 等框架的应用
iOS Dev Center 苹果官方提供的 iOS 学习视频
Lynda Lynda 上面 iOS 和 Objective-C 的学习资料比较多, 从初级到高级的都有, 覆盖面比较广, 无论 iOS 走到哪个层次, 都可以在上面挑到适合自己的课程
Code School CodeSchool 上面的 iOS 不多, 不过质量都不错, 一些课程也挺有趣的
Udemy Udemy 帮助初学者规划了视频学习路线, 从新手到高级分的比较详细
Developing iOS 8 Apps with Swift 斯坦福白胡子老爷爷的 iOS8 和 Swift 课程, 已经翻译完成 GitHub
Developing iOS 9 Apps with Swift 斯坦福白胡子老爷爷最新的 iOS9 和 Swift 课程, 现在 GitHub 正在翻译

视频教程(中文)

视频 简介
iOS 7 应用开发 斯坦福白胡子老爷爷的系列视频, 所有视频皆完成翻译, 视频较新, 翻译质量也很高
iPhone 开发教程 2010 年冬 全部视频翻译完毕, 较为深入的讲解 iPhone 开发, 视频适合给有一定 Objective-C 基础的人观看
使用 Swift 开发 iOS8 App 实战 慕课网的视频, 主要讲 Swift 的一些基本使用, 并在讲解的过程中做了几个小 APP, 最后还讲了 Sketch 制作分享按钮
征战 Objective-C 视频还未完结, 讲了一些 C 和 Objective-C 的基本语法, 适合零基础的人观看
Developing iOS 8 Apps with Swift GitHub 上正在翻译的斯坦福最新的 iOS8 课程, 目前正在翻译, 未完结

书籍

书籍名称 推荐理由
Objective-C Programming 内容不多, 却都是精华, 有了一点 C 语言基础可以快速阅读此书, 大概一天时间就可以看完, 看完后对 iOS 开发能够有个基本的印象, 该书的官方论坛有各个章节习题的解答.
iOS Programming 这本书在 Quora 上被评为 iOS 入门最佳书籍, 具体评价可见豆瓣下方该书籍的评论
Cocoa Design Patterns 适合打算深入了解 Cocoa 的人看
Learn Objective-C 短小精练, 适合有编程基础的人在半小时内对 Objective-C 有个一定了解
Programming with Objective-C 看完 Learn Objective-C 可以接着看这个官方对 Objective-C 更为深入的介绍
Objective-C 基础教程 该书作者 Scott Knaster 是 Mac 开发界的传奇人物, 目前在 Google 出过多数书籍都广受许多程序员好评, 此书适合从初级跳到中级的 iOS 开发者阅读
iOS 开发进阶 该书作者唐巧是国内 iOS 开发界的名人, 曾参与多个知名软件的开发, 目前该书尚在预售中, 书本内容由浅入深, 将读者一步一步引入到 iOS 中去, 同样适合初级跳到中级的 iOS 开发者阅读
Programming in Objective-C 这本书在亚马逊上面深受欢迎, 有关 Objective-C 的东西讲得非常详细
iOS 测试指南 该书作者是豆瓣的员工, 书中写的多数内容都是作者在平时的工作实践当中提炼出来的测试经验, 重点讲述了各个测试阶段的具体实践方法, 并且通过持续集成串联了各个测试阶段的活动。
Objective-C 编程之道 解析 iOS 的开山之作, 详细介绍了 MVC 在 Cocoa Touch 上的运作过程, 该书适用于 iOS 中级开发者阅读
Objective-C 高级编程 本书主要介绍 iOS 与 OS X 多线程和内存管理, 深入破析了苹果官方公布的源代码, 告诉你一些苹果公司官方文档中不会出现的知识, 适合中级以上 iOS 开发人员阅读
Effective Objective C 2.0 书里写了编写高质量 iOS 与 OS X 代码的 52 个有效方法, 适合 iOS 开发的进阶使用
Swift Fundamentals 估计将来这本书会成为 Swift 的经典入门书籍, 它的 Stars 数说明了一切
The Swift Programming Language 中文版 90 后开发者梁杰组织翻译的 Swift 编程语言中文版

博客

博客地址 博主信息
OneV’s Den 王巍(喵神), 现居日本, 就职于 LINE, 知名 iOS 开发者, 写的文章大多深入浅出, 内容广泛, 目前在维护的Swifter 也值得收藏
唐巧的技术博客 唐巧, 国内知名 iOS 开发者, 现就职于猿题库, 博客推出的 iOS 移动开发周报很受欢迎, 更新频繁
txx’s blog 90 后 iOS 开发者, 人称虾神, 文章内容讲解大多浅白易懂, 很值得看
破船之家 博主也是 iOS 大神一个, 经常更新一些 iOS 教程, 文章的质量都很高, 非常值得看
NSHipster NSHipster 的中文网站, 主要对 NSHipster 的英文网站进行翻译, 博文出自 Mattt 大神之手, 文章大都写得很深入, 详细, 每周一更
Limboy 无网不剩 李忠, 知乎前员工, 目前在负责花瓣 iOS 开发, 不少文章里面有介绍博主个人的学习方法, 让读者在学到技术的同时也掌握学习的技巧
念茜的博客 iOS 圈的女神人物, 写的关于安全问题的文章都值得一看, 由于新博客刚开通不久, 目前文章较少, 可以去看下她以前的博客
iOS技术周报 吴发伟, 天猫资深软件开发工程师, iOS 技术周报每周一更, 推送一些 iOS 技巧, 代码库, 设计等资讯.
iWangKe.me 王轲, IndieBros Studio 创始人, 优秀的 iOS 开发工程师, 写的文章深入浅出, 很多问题分析透彻, 非常有条理性
叶孤城 叶孤城, 优秀 iOS 开发工程师, 发表的文章都有很多干货, 对源码解析类文章写得浅显易懂, 并时常总结一些 iOS 开发技巧, 值得一读
Kevin Blog 周楷雯, 秒视创始人, 知名 iOS 工程师, 做出了 PNChartWaver 这样的好项目, 在博客中也有谈到具体的实现过程
IMTX 图拉鼎, 知名 Apple 平台开发者, 曾经的 Ubuntu 平台开发者, 文章有不少干货, 大多讲解技术实现和学习经验
更多 唐巧收集的中文 iOS/Mac 开发博客列表, 更新频繁, 值得收藏

文章

标题 内容简介
Learn Objective C: The Path to iPhone Development Udemy 写的文章, 说明了一些学习 Objective-C 的前提条件, Objective-C 的发展历史, 学习方法以及学习资源
I Want to Write iOS Apps. Where Do I Start? 主要对 iOS 的开发环境进行了介绍, 并且涉及到了 Swift 的学习, iOS 上架的注意事项, iOS 的设计, 测试, 代码托管等, 讲解较为广泛, 同时也给出不少学习资源
How to become a professional iOS developer 文章写的很有条理, 文中多次强调了版本控制系统的重要性, 主要内容是对学习 iOS 开发到就职, 给出了自己的建议
Learning iOS Programming 作者总结了一些自己学习 iOS 的血的教训, 最后给出了一些不错学习建议
Become an iOS Developer 作者列举了一些学习 iOS 的方法以及常用的库, 以及自学 iOS 的一些建议
iOS 开发如何提高 唐巧写的一篇文章, 主要是对 iOS 技术的提高做的一个总结, 文中不少资源, 工具, 学习方法
自学 iOS 开发的一些经验 文章从入门到进阶到高级, 分为三个阶段, 有条理的讲出了 iOS 的整个学习过程中开发者可能遇到的问题, 并给出了解决办法, 奉献了不少好工具, 资源还有珍贵的学习经验
如何从 0 开始学 iOS 开发 作者给出了学习 iOS 的流程, 并给出一些不错的学习资源
如果我可以重新学习 iOS 开发 作者在文中给出了学习的一些建议, 也谈到了自己的学习方法
iOS 开发学习路径的一些建议 文中谈到了英语的重要性, 以及写博客, 看源代码的好处
iOS 开发入门 作者分享了自己学习 iOS 的经验和资源
Mac 和 iOS 开发资源汇总 破船之家发布的资源汇总
CocoaPods 使用教程 文章讲解了 CocoaPods 的基本使用, 并且配上 AFNetworking 做出了一个小 Demo, 值得一看
iOS 开发路线简述 作者简单介绍了一下自己 iOS 开发的感受,也是他学习 iOS 开发的一个体系架构.
iOS 干货文章、blog 作者收集的 iOS 干货文章、blog.

相关网站

网站 简介
tutsplus 不定时更新一些 iOS 教程
WWDC 苹果官方每年一度的 WWDC 视频, 可以了解历年有关 iOS 发布的内容
ASCIIwwdc WWDC 的文字版
Awesome Swift 该网站收集了很多关于 Swift 的学习资料, 新闻
Appcoda 经常发布一些 iOS 编程教程, 更新比较频繁, 想了解更多可以查看该网站的 About 界面
NSHipster NSHipster is a journal of the overlooked bits in Objective-C, Swift, and Cocoa. Updated weekly.
Think and Build Some tutorials about Core Graphic and Core Animation.
Tutorials 大把的 Objective-C, Swift, iOS 教程, 且全部免费, Raywenderlich 真是业界良心, 赞!

社区

社区 简介
CocoaChina 全球最大苹果开发者中文社区
code4app 经常更新一些很不错的 iOS 代码片段和一些 iOS 资源
objc 定期发布一些有关 Objective-C 的高质量的文章
objc中国 喵神组织的对 objc.io 的翻译网站, 旨在推进国内技术圈整体水平, 翻译质量非常高
DevDiv 发布一些 iOS 的最新资讯及教程
Cocos2d-x Cocos2d-x 论坛
iPhone Dev SDK 国外较有名的 iOS 开发者论坛
Learn Cocoa and iOS Development Forum Learn Cocoa on the MacBeginning iOS 7 Development 这两本书籍的官方论坛, 用户活跃度较高
Apple Developer Forums 苹果官方的开发者论坛
Swiftist Swift 中文社区

工具/插件

工具/插件 简介
CocoaPods 开发 OS X 和 iOS 应用程序的一个第三方库的依赖管理工具, 本身是 Ruby 的一个 Gem, 极大的简化了 Objective-C 的开发流程
Alcatraz Alcatraz 是一款管理 Xcode 插件、模版以及颜色配置的工具
XcodeColors 使 Xcode 调试控制台色彩更丰富
xctool Facebook 开源的一个 iOS 编译和测试的工具
XToDo 一款注释辅助插件,主要用于收集并列出项目中的TODO, FIXME, ???, !!!
KSImageNamed-Xcode 自动补全图片命名的一款插件
VVDocumenter 一个自动生成代码注释的工具
ImageOptim 用于压缩图片一款工具
fastlane 开发流程工具,将开发过程流程化,极大提高开发效率
iOS 必备的 75 个工具 其中包含了非常多好用的工具, 涉及到设计, 分析, 部署等, 总结的十分详细, 有中文翻译
更多 唐巧总结的一些图形应用工具, 命令行工具, Xcode 插件, 并介绍了一点基础的用法

指南/教程

网址 简介
App Store Review Guidelines iOS 应用商店审核指南, 有中文翻译版
Swift 语言指南 有很多丰富的 Swift 学习资料, 学习 Swift 有这份资料可以省下很多力气
苹果 Xcode 帮助文档阅读指南 Tinyfool 推出的一篇对于帮助新手阅读官方文档的指南
Get started with your iOS developer pragram 苹果写的一篇入门指南, 粗略讲解了 iOS 程序从开发到上架的整个流程
Teamtreehouse 文章主要讲解 Objective-C 的一些语法, 文章内容有趣且通俗易懂
A map for iOS development 一张 iOS 开发地图, 做得很赞, 看完对 iOS 开发流程有一定的认知
Start Developing iOS Apps Today 苹果官方给出的 iOS 入门教程, 看过之后能够做一个 To-Do 小程序
Ry’s Objective-C Tutorial 讲解 Objective-C 的教程, 图文并茂, 适合新手阅读
Objective-C Style Guide Ray Wenderlich 推出的 Objective-C 风格指南
iOS8 Day-by-Day 每日一个 iOS8 的小教程, 所有的 DEMO 都可以在其 GitHub上面的找到相关代码
iOS9 Day-by-Day 每日一个 iOS9 的小教程, 所有的 DEMO 都可以在其 GitHub上面的找到相关代码

邮件订阅

  • iOS Dev Weekly (每周一期,内容多为这一星期里值得关注的 GitHub 项目、文章、工具等)
  • iOS Design Weekly (Tips, news and inspiration delivered each week)

文档

Awesome 系列

Raywenderlich 系列 (以下书籍目前均已更新至xcode7.0和swift2.0)

书籍名称 简介
Swift Apprentice 非常棒的 Swift 入门书籍,同时也提及了函数式编程,泛型,面向协议编程等话题
The iOS Apprentice 从零构建 4 个不同类型的 App,深入浅出各种 iOS 开发的技术,配合上面那本 Swift Apprentice 效果更佳
tvOS Apprentice 开发 Apple TV 应用的入门教程
iOS 9 by Tutorials iOS9.0 的新特性的介绍与实践
watchOS 2 by Tutorials 开发 Apple Watch 应用的入门教程
Core Data by Tutorials 深入浅出 Core Data
iOS Animations by Tutorials 深入浅出 iOS 动画
2D iOS & tvOS Games by Tutorials iOS 与 tvOS 2D 游戏开发入门教程
3d-ios-games-by-tutorials iOS 3D 游戏开发教程

知乎上的讨论

Quora 上的讨论

国内知名的程序员开发日报

iOS Xcode全面剖析

前言

一、创建新一个工程

二、Xcode界面详细介绍

三、Xcode菜单详解

四、Xcode快捷键介绍

五、结语

六、参考资料

前言

前几天在公司内部做了一次关于iOS的入门分享,听众有PHP、Web、Android、测试、产品、UI等,主旨是力求不懂iOS的人能了解iOS的开发流程,听后都能创建一个iOS项目并打印HelloWorld。(这是背景) 你想想就这么点需求,没啥东西吧,又因为最近项目还特别忙就什么也没有准备,以至于分享中就有了一些小尴尬::>_<:: 总结下来,像听众有技术和非技术这样而且是不懂iOS得其实是最难兼顾的,不准备还不是等死。。。

当然最大的感受还是自己掌握的iOS基础太渣,对于一个没有接触过iOS的技术或非技术,视角不一样看到的东西就不一样,他会对所有的东西都好奇都想知道是怎么回事,所以他会问一些iOS开发中不重要但是确实是属于iOS的问题, so随着分享的深入什么设计模式MVVM、runtime、乱七八糟的都讲了,但也掩盖不了自己基础的薄弱,所以近期打算重新梳理一下自己的iOS知识体系,把自以为自己懂得的知识好好总结,用博客的形式表现出来,毕竟写博客是最能检验一个人知识巩固好坏的方法了,最近一段时间一直在写PHP、JS等方向的分享,是时候回归一下本职了,希望能帮助自己巩固基础更希望能帮助跟我一样基础不是那么牢固的童鞋们

一、创建新一个工程

Xcode一直没有升级%>_<%,目前最新版本是Xcode7.3了,但本篇依据的是我目前使用的Xcode7.1.1,不过区别也不会很大的。

1、第一步打开Xcode,找到Xcode程序图标并点击

2、如下界面,我们点击新建一个项目,即第二项

1、Get started with a playground

Playground是苹果公司在2014年WWDC(苹果开发者大会)随Swift一起推出的,可以实现一边写代码,一边预览效果(即实时预览代码的效果)的工具。 相对于以前写代码要经过Build→Run漫长的等待才能看到代码的效果来说,Playground给程序员带来的方便不言而喻。 Playground的不足之处是:无法直接将Playground文件直接用到工程中,暂时不支持Objective-C 。 我们开发者可以利用Playground来快速测试一些代码和效果。

2、Create a new Xcode project

创建一个新的Xcode项目,一般正式的项目都是从此选项开始的。

3、Check out an existing project

打开一个已经存在的项目

3、选择一个项目模板创建,如下,图中已经标出不同,并点击Next

左侧栏: 左侧栏中四个分类分别代表了手机/pad、手表、电视、及PC端的开发选项,就是一款Xcode足可以开发苹果所有产品线中的所有软件,是不是特别叼? Application:即创建一个完整的项目。 Framework & Library:即写一个框架或者库(这个初学者用不到,但是等入门之后会发现这个很有用的,具体不在阐述,这可以再引申出一大篇文章了)

右侧详细: 各种预定义的模板,具体可从图中显示看出各个模板的样式,一般而言项目会选择最简单的即第三个模板。

4、填写并选择一些所创建项目的信息,如下并点击Next

1、Product Name 项目名称,比如本例中名称就是XcodeIntroduction(驼峰式命名)

2、Organization Name 组织或公司的名称,目前是王隆帅(本人^_^),可随便写。

3、Organization Identifier 组织或名称的标识,目前是本人所在的公司,可随便写。

4、Bundle Identifier 程序包标识,新建项目时是根据你创建的项目名称自动生成的不可更改,可在内部修改。

5、Language 开发语言选择,目前Xcode提供Objective-C、Swift两个选择,这里选择OC。

6、User Core Data 是否使用CoreData,iOS开发常用的一种数据库。

7、Include Unit Tests 是否添加模块单元测试Target

8、Include UI Tests 是否添加UI单元测试Target

5、选择路径创建项目,如下图,选择桌面,并点击Create。

1、create Git repository on My Mac

是否创建版本控制系统,创建的话可以选择是在本地还是在服务器。版本控制系统,或者说修改控制系统,实际上是一种检测源文件的改变并将其保存留作以后参考使用的机制(软件)。此外,它还能记录其他有用信息,比如是哪个开发者修改了代码,何时修改的,修改了哪一部分,以及其他历史信息。版本控制系统可以比较不同版本代码的不同,有必要时能恢复整个项目到以前的版本,追踪有害代码从而减少产品的错误。 通过版本控制系统,开发者可以在一个项目的不同分支上工作,当项目的各个部分开发完备时,将它们放到一起形成最终的版本,这个过程被称为合并。事实上,这种做法再团队和软件公司中相当常见:每个人负责项目的一部分,最终所有部分被整合到一起形成最终产品。

6、创建成功后的界面如下

此界面就是Xcode的主界面了,接下来,会带你一点点揭开Xcode神秘的面纱,66666。

二、Xcode界面详细介绍

五大区域介绍,如下图

1、 第一部分:顶部区域

① 程序运行相关: 从左至右依次:运行按钮、 停止按钮、 为工程选择运行平台。

② 编辑器相关: 从左至右依次:标准编辑器、 辅助编辑器、 版本编辑器。

③ 面板控制相关: 从左至右依次:隐藏(显示)左侧面板、 隐藏(显示)底部面板、 隐藏(显示)右侧面板。

2、第二部分:左面版 该面板是 Xcode 工程导航面板, 上方的八个按钮用于切换导航模式。从左至右 : 项目导航、符号导航、 搜索导航、 问题导航、 测试导航、 调试导航、 断点导航、 日志导航。

① 项目导航

项目导航组成 :

源文件 : 在 XcodeIntroduction 目录下的 “.h” 和 “.m” 后缀文件是源文件; 属性文件 : 在 XcodeIntroduction 下的 Supporting Files 目录下是属性文件 图片等; 单元测试项目 :XcodeIntroductionTests、XcodeIntroductionUITests 是工程的单元测试项目; 目标应用 :Products 目录下的 XcodeIntroductionTests.app 是目标应用;

② 符号导航

符号导航简介 : 用符号显示工程中的 类, 项目 和 属性; 表示方式 : C 表示类, M 表示方法, P 表示属性; 快速定位 : 点击对应的方法或者属性, 能快速定位到这个类中;

③ 搜索导航

在搜索框中输入要搜索的字符串, 按回车就可以搜索出包含该字符串的类;

④ 问题导航

显示项目中存在的警告或者错误;

⑤ 测试导航

点击 testExample 后面的执行按钮, 就会运行该单元测试;

⑥ 调试导航

调试导航面板中显示了各线程的详细信息;

⑦ 断点导航

列出所有的断点, 方便管理断点

⑧ 日志导航

列出项目开发过程中构建、生成、运行过程,每次该过程都可以通过日志面板查看

3、第三部分:调试面板

用于 Xcode 显示 控制台调试输出信息。

① 添加断点 如上图,在第20行打印“王隆帅的简书”代码上添加一个断点。

② 开始调试(自动判断) 点击顶部面板中的调试按钮, 如果代码中有断点, 就会自动进入调试状态, 执行到断点时会自动停止, 详细调试信息显示在底部的调试输出面板;

③ 调试面板按钮介绍(上图红框中从左至右) 1、Continue program execution : 继续执行下面的代码; 2、Step over : 单步调试, 点击一次该按钮, 执行一行代码, 如果有方法调用, 不会进入方法中; 3、Strp in : 步入调试, 点击该按钮, 会进入方法中; 4、Step out : 步出调试, 在方法中, 点击该按钮, 会退出方法, 执行方法外的单步调试; 5、点击会出现此时项目的视图层次结构 6、点击会让你选择你的地理位置

4、第四部分:右面板 包括两个部分上侧的检查器面板和下侧的库面板。


① 检查器面板

检查面板分类 : 普通源文件 : 包含 文件检查器快速帮助器; 故事版 : 界面文件, 除了文件检查器快速帮助器之外, 还有 身份检查器, 属性检查器, 大小检查器, 连接检查器;

1)文件检查器

Identity and Type : File Name(文件名), File Type(文件类型), Full Path(路径); Text Settings : Text Encoding(文件编码使用字符集), Indent Using(缩进), Wrap lines(自动换行);

2)快速帮助器

界面设计相关检查器

用户选中 “.storyboard” 或者 “.xib” 后缀的文件时, 会多出另外四个检查器;

3)身份检查器

管理界面组件类 实现类, 恢复ID 等标识性的属性;

4)属性检查器

管理界面组件 拉伸方式, 背景色 等属性;

5)大小检查器

管理界面组件 宽高 xy轴坐标 等属性;

6)连接检查器

管理界面组件 与程序代码之间的关联性;


② 库面板(从左至右)

项目的各种库文件,方便查找使用。

1)文件模板库

管理文件模板, 可以快速创建指定类型文件, 可以直接拖入项目中;

2)代码片段库

管理各种代码片段, 可以直接拖入源代码中;

3)对象库

界面组件, 可以直接拖入 故事板中;

4)媒体库

管理各种 图片, 音频 等多媒体资源;


5、第五部分:详细编码区 该区域是代码编写的主要区域。

三、Xcode菜单详解

四、Xcode快捷键介绍

Xcode中的快捷键确实会让人眼花缭乱,在此只介绍主界面上按钮点击的快捷键(有很强的记忆规律),代码相关、运行相关的代码可以看这里,这里面的道道还是很多的Y^o^Y

1、第一个需要知道的是Xcode的各区域与修饰键的关系,下面是一个快速浏览

Command:用来导航,控制导航区域 Alt:控制右边的一些东西,比如Assistant Editor,utility editor Control:编辑区域上的Jump bar的一些交互

如下图

下面是最常用的组合键:

Command 1~ 8: 跳转到导航区的不同位置 Command 0 :显示/隐藏导航区 Command Alt 1~ 6:在不同检测器之间跳转 Command Alt 0: 显示/关闭工具区. Control Command Alt 1~4: 在不同库之间跳转 Control 1~ 6: 在Jump bar的不同标签页的跳转。

最后也是最简单的就是回车键,当它和Command组合使用时,可以是你在Xcode中不同编辑器来回切换。

Command + Enter: 显示标准单窗口编辑器 Command Alt Enter:你可以猜下它的作用,它的功能是打开Assistant editor Command Alt Shift Enter: 打开版本控制编辑器

同样重要的是显示/隐藏调试区的快捷键是 Command + Shift + Y ,要记住这个你可以通过这句话来记忆 “Y is my code not working?” (译者注:Y谐音Why)。 如果你忘记了一些快捷键,你可以在Xcode的菜单栏Navigate一项中找到大部分快捷键。在即将完成这一部分的学习之时,你会惊奇的发现你仅仅只是用了键盘就让Xcode发生这各种变换。

五、结语

工欲善其事必先利其器, Xcode如此叼, 掌握了它, iOS还不随你玩!目前最新的版本为Xcode7.3, 提醒大家, 谨慎升级, 根据认识朋友的升级感受, 目测比较坑, 尤其是自动补全机制, 升级前可自行谷歌先行者的感受…( ⊙o⊙ )千真万确。

本文由作者 王隆帅 编写,转载请保留版权网址,感谢您的理解与分享,让生活变的更美好!

六、参考资料

http://www.360doc.com/content/15/0324/17/20918780_457719719.shtmlhttp://jingyan.baidu.com/article/4b07be3cb3c94048b380f3de.htmlhttp://www.cocoachina.com/ios/20140524/8536.htmlhttp://blog.csdn.net/shulianghan/article/details/38424965http://www.jianshu.com/p/8bcdf44b6cf1http://www.cocoachina.com/ios/20140731/9284.html

27个iOS开源库,让你的开发坐上火箭吧

27个iOS开源库,让你的开发坐上火箭吧

你不会想错过他们,真的。

我爱开源。

并且我喜欢开发者们,把他们宝贵的私人时间用来创造神奇的东西,然后他们会和其他人分享并且不求回报。开源作者和贡献者,你们是最帅的。感谢你们一直以来的工作。


所以,因为我是一个分类整理狂,这是我从iOS开源库中选出的最喜欢的这些项目的顺序都是随机的,全部都很酷。

绝大部分库是支持CocoaPods的,所以把它们添加到你的Xcode项目中轻而易举。

文章的尾部你会看到一个太长不看的版本——一个简单的列表,只有标题和到项目的链接。如果你发现这篇文章是有用的,把它和你的iOS开发者兄弟们分享。好东西需要被传播。

DZNEmptyDataSet

这本应该是iOS中一个标准、内置的解决空table和collection view的方式。默认的如果你的table view是空的,屏幕就是空的。但这不是你能提供的最好的用户体验。

用了这个库,你只需要遵循一系列协议,iOS会优雅地接管你的collection view并且会正确、好看地显示给用户信息。很明显,每个iOS项目都应该采用。

这是完全可自定义的。

CocoaPods:

pod ‘DZNEmptyDataSet’

GitHub

2. PDTSimpleCalendar

你的app是否需要一个简单、好看并且有效的日历组件呢?

现在你有了——PDTSimpleCalendar很有可能是最棒的iOS日历组件。有很多方式来自定义它,逻辑有效而且好看。

CocoaPods:

pod ‘PDTSimpleCalendar’

GitHub

3. MagicalRecord

他们说,Core Data很简单。他们说,它很好很简单。哈哈,你是认真的吗,苹果?一顿陈词滥调的代码被添加到每个项目里,这真的不够优雅和简单。更不用说添加、移除和更新很多实体,保存上下文,为不同的环境创建不同的Core Data栈,等等等等。我当然很喜欢Core Data,但是苹果真的可以通过一个简单的好方法来简化它——MagicalRecord方法。

MagicalRecord的工作就像一个Core Data的包装,并且向开发者隐藏了所有无关的东西。如果你曾经用过活跃纪录模式(例如Ruby on Rails),那你已经掌握它了。如果你在app里用Core Data的话真的真心推荐这个库。

CocoaPods:

pod ‘MagicalRecord’

GitHub

4. Chameleon

如果你读到了这一点,你是一个很好的程序员,而不是一个设计师。这就是为你准备的。

Chameleon是iOS的一个颜色框架。它用好看、摩登的扁平化颜色扩展了UIColor。它也给了我们能力来创建调色板,里面是我们自己定义的颜色。它可以做很多其他事,探索readme文件。如果你想要好看的应用程序,快把这个库加到你的项目里吧。

Chameleon基础扁平化颜色

CocoaPods:

pod ‘ChameleonFramework’

GitHub

5. Alamofire

Alamofire是一个用Swift写的优雅的网络库。你曾经用过AFNetworking吗?ALamofire是它的弟弟。年轻也更有才华,当然啦(AFNetworking是用Objective-C写的)。

需要做网络相关比如下载、上传、获取JSON等等?Alamofire是为你准备的。GitHub上8000人的选择不会错。

CocoaPods:

pod ‘MagicalRecord’

GitHub

6. TextFieldEffects

你不觉得标准的UITextField有一点无聊吗?我也是——所以对TextFieldEffects说hello吧!我不会写太多,我只会展示你一些这个库可以做的例子:

是的,这些就是简单的易用的控制器。你甚至可以用storyboard里的IBDesignable!

不幸的是这个库不支持CocoaPods(如果你来自未来,而这在一些时间之前改变了的话,请在Twitter上让我知道),但它支持Carthage。你也可以简单的从GitHub下载项目,并且把它添加到你的workspace里。

Carthage:

github “raulriera/TextFieldEffects”

GitHub

7. GPUImage

你曾经创建过一个摄像机app吗?如果没有,看完这个库你就肯定会的。

GPUImage可能性

GPUImage提供我们一个GPU-accelerated摄像头效果(图像和视频都可以),熊熊燃烧般的速度。App Store里有几百个app使用这个库——其中就有我的一个:

我的一个app中用的GPUImage

GitHub上8869个收藏并且还在持续增加。

CocoaPods:

pod ‘GPUImage’

GitHub

8. iRate

在App Store获得更多评价最好的方式是什么?我没有明确的数据来回答这个问题,但如果要我来猜测的话,我会说只要简单的询问用户就可以了。也许这是一个老套的方式——大部分开发者现在创建自定义的app内置提醒——但如果你没有时间或者不想所有事都从头做起,用iRate比不用要好。并且这就是iRate——一个小库,你包含在你的项目里并且忘记询问用户去评价了——iRate会自动替你完成,在合适的时间里。

CocoaPods:

pod ‘iRate’

GitHub

9. GameCenterManager

喜欢或讨厌一个人,在这种情况下管理Game Center非常简单,只需要一点我们最著名的反模式的帮助(你的游戏里只有Game Center,对吧?)

诚实地说,在iOS里香草管理Game Center并不是那么困难,但用这个库就是简单和快速。更好的是好的敌人。

我的一个游戏里就用了它,真是一个愉悦的体验。

CocoaPods:

pod ‘GameCenterManager’

GitHub

10. PKRevealController 2

这是一个真正的宝石,我最喜欢的iOS控件之一。PKRevealController是一个可滑动的侧边栏(向左、向右或者都可以),用你的手指来滑动(或者只通过点击按钮,但这样就没有滑动酷了)。

我使用过一些其它库,提供这种空间,PKRevealController是最好的。设置起来很简单,高度可自定义,手势识别非常非常好。它可以在iOS SDK中包含作为一个标准空间,真的。

CocoaPods:

pod ‘PKRevealController’

GitHub

11. SlackTextViewController

你曾经用过Slack iOS app吗?如果你在一个更大的软件公司工作的话,很有可能回答是。对于没有这么回答的人——Slack很坚硬。Slack的iOS app也是,特别是对于很好的、自定义的文本输入控件…就是你现在有的——你的app里可以用的代码!

自增长文本域?对的。手势识别,自动填充,多媒体粘贴?对的。简单的易用的?对的。你还可能需要什么?

CocoaPods:

pod ‘SlackTextViewController’

GitHub

12. RETableViewManager

RETableViewManager会帮助你动态创建和管理你的table view,都用代码。它提供我们预先定义好的cell(布尔型、文本、日期等等。——看下面的截图),你也可以创建你的自定义视图,和默认的一起使用。

左侧截图好老套!

这些你都可以在storybard里做而不需要这个库的帮忙,但有的时候代码比可视化编辑器更简单。

CocoaPods:

pod ‘RETableViewManager’

GitHub

13. PermissionScope

有用的库,通过在询问用户之前提示用户需要系统许可带来更好的用户体验。高度可接受程度->更多用户活动使用app->更好的留存->更好的数据->更多的下载。被高度推荐的pod。

CocoaPods:

pod ‘PermissionScope’

GitHub

14. SVProgressHUD

这个图片正在被正确的加载,不会等很久也不需要刷新页面。这就是SVProgressHUD在你的app里看起来的样子。如果你需要自定义等待指示,这里就有一个(很有可能就是最好的)。

CocoaPods:

pod ‘SVProgressHUD’

GitHub

15. FontAwesomeKit

Font Awesome很酷,用这个库你可以轻松地添加字体到你的项目里,并且在多种方式里使用它。

CocoaPods:

pod ‘FontAwesomeKit’

GitHub

16. SnapKit

喜欢auto layout?你应该!

至少在storyboard里创建的时候。

用代码创建constraints是痛苦的,如果没有帮助的话,但幸运的是SnapKit在这里,使用它你可以轻松写你的constraints,声明方式。看看吧。

CocoaPods:

pod ‘SnapKit’

GitHub

17. MGSwipeTableCell

另一个UI组件,在很多app里都常见,苹果应该考虑在iOS标准库里加入类似的东西。可滑动的table cell,这是这个pod最好的描述。最好的一个。

这些只是3个动画种类,还有很多。探索readme文件。

CocoaPods:

pod ‘MGSwipeTableCell’

GitHub

18. Quick

Swift里的单元测试,给Swift(好吧,要给Objective-C),和Xcode融为一体。如果你是一个Objective-C粉,我会推荐你Specta而不是这个,但对于Swift Quick很有可能是最好的。

CocoaPods:

pod ‘Quick’

GitHub

19. IAPHelper

app内购带给我们很多陈词滥调的代码,用这个库就不需要了,把最有关交易金钱的普遍的任务从iOS用户到你的(或者你的公司的)钱包简单包装起来。

CocoaPods:

pod ‘IAPHelper’

GitHub

20. ReactiveCocoa

好吧,这里我们有一个小怪兽。

ReactiveCocoa并不是很小、易用的项目,就像这个列表里其它项目一样。ReactiveCocoa带给我们一种完全不同的编程方式/结构,基于值的信号和流。这是完全的头脑风暴,首先你需要忘记你曾经学习的来理解它是如何工作的。这不是一个简单的任务,但是是有回报的。

这不是一个合适的地方来教你使用ReactiveCocoa,但我会给你一些好的资源,如果你感兴趣的话。

Getting Started with ReactiveCocoa

ReactiveCocoa

ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2

CocoaPods:

pod ‘ReactiveCocoa’

GitHub

21. SwiftyJSON

让Swift里的JSON解析更简单。

CocoaPods:

pod ‘SwiftyJSON’

GitHub

22. Spring

做动画更简单、可链和声明。

CocoaPods:

pod ‘Spring’

GitHub

23. FontBlaster

在app里加载自定义字体更简单。

CocoaPods:

pod ‘FontBlaster’

GitHub

24. TAPromotee

交叉推销你的app是最棒的销售策略之一,你可以在它们中免费实现。用这个库非常简单,你不再能为自己辩解为什么不用它——增加TAPromotee到你的podfile,配置、然后免费享受更多下载。

CocoaPods:

pod ‘TAPromotee’

GitHub

25. Concorde

在你的app加载很多JPEG吗?用Concorde你可以加载地更好看。有进度的方式。

CocoaPods:

pod ‘Concorde’

GitHub

26. KeychainAccess

管理钥匙串权限的小帮手库。

CocoaPods:

pod ‘KeychainAccess’

GitHub

27. iOS-charts

最后但重要的——iOS图表库!很简单和有效,我不会在这儿写太多——滑动到下面去看在你的app用它可以干嘛。

是的,所有东西都是可用的,作为一个可放进去(好吧,也许是“可写进去”)的组件。

不幸的是目前还没有CocoaPods支持,所以你需要手动拖动项目到你的Xcode workspace中。

所有库的太长不看列表,快速访问:

1. DZNEmptyDataSet [UI, 空table view解决方案]

2. PDTSimpleCalendar [UI, 可放入日历组件]

3. MagicalRecord [Core Data帮手实现活动记录模式]

4. Chameleon [UI, 颜色框架]

5. Alamofire [Swift网络]

6. TextFieldEffects [UI, 自定义外观text fields]

7. GPUImage [快速图像处理]

8. iRate [获得用户评价]

9. GameCenterManager [轻松管理Game Center]

10. PKRevealController [UI, 滑动边栏]

11. SlackTextViewController [UI, 高度自定义text field]

12. RETableViewManager [用代码动态创建table view]

13. PermissionScope [UI, 巧妙的提前问用户要系统许可]

14. SVProgressHUD [UI, 自定义等待菊花]

15. FontAwesomeKit [轻松地添加酷字体到你的app中]

16. SnapKit [用代码轻松auto layout]

17. MGSwipeTableCell [UI, 可滑动的table view cells]

18. Quick [Swift 单元测试框架]

19. IAPHelper [app内购封装帮手]

20. ReactiveCocoa [FRP框架]

21. SwiftyJSON [Swift JSON库]

22. Spring [动画框架]

23. FontBlaster [轻松在app中加载自定义字体]

24. TAPromotee [在你的app中交叉提示,置入界面]

25. Concorde [下载和解码进度化JPEGs]

26. KeychainAccess [轻松管理钥匙串]

27. iOS-charts [漂亮的图表库]


感谢阅读,真是一个长列表!如果你认为创建是有价值的,请分享它,通过点击文章下方的分享按钮——更多人会从中受益。并且如果你是一个Meduim用户,请点击推荐按钮——它会鼓舞我创建更多iOS开发文章!

One more thing——如果你在读这篇文章,你很有可能是个iOS开发者。很多iOS开发者也是iPhone用户——所以我有一些你可能感兴趣的东西。

我运行着一个每周一次手选最好的iOS app和游戏——看看吧,我关注高质量并且只挑选酷的app。连接也会很酷!

你也可以在推特上follow我,我最经常讨论iOS开发的地方。

推荐阅读:

27 places to learn iOS development. Best ones.

52 people every iOS developer should follow on Twitter

 

文/张嘉夫(简书作者)
原文链接:http://www.jianshu.com/p/228535226656
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。