使用 Grafana+collectd+InfluxDB 打造现代监控系统

想打造 New Relic 那样漂亮的实时监控系统我们只需要 InfluxDB/collectd/Grafana 这三个工具,这三个工具的关系是这样的:

采集数据(collectd)-> 存储数据(InfluxDB) -> 显示数据(Grafana)。

  • InfluxDB 是 Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据,看版本号(v0.8.8)就知道这个项目还很年轻;
  • collectd 就不用介绍了吧,C 语言写的一个系统性能采集工具;
  • Grafana 是纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等。

下面的安装和配置步骤在 Ubuntu 14.04 Server 64bit 版上完成。升级整个系统后重启:

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo reboot

安装 InfluxDB

InfluxDB 是 Go 写的,不依赖任何其他包或库,很干净。安装很容易:

$ wget https://s3.amazonaws.com/influxdb/influxdb_latest_amd64.deb
$ sudo dpkg -i influxdb_latest_amd64.deb

启动 InfluxDB:

$ sudo /etc/init.d/influxdb start
Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]

启动后打开 web 管理界面 http://192.168.2.183:8083/ 默认用户名和密码是 root 和 root. InfluxDB 的 Web 管理界面端口是 8083,HTTP API 监听端口是 8086,如果需要更改这些默认设定,修改 InfluxDB 的配置文件重启就可以了。

InfluxDB

在刚安装好的 InfluxDB 上创建一个名为 collectd 的数据库,可以用命令行创建,也可以用 Web 管理界面操作:

$ curl "http://192.168.2.183:8086/db?u=root&p=root" -d "{\"name\": \"collectd\"}"

InfluxDB

安装 collectd

安装 collectd:

$ sudo apt-get install collectd

配置 collectd 为客户端,收集到数据后直接发给 InfluxDB:

$ sudo vi /etc/collectd/collectd.conf
...
LoadPlugin network
...
<Plugin network>
        Server "192.168.2.183" "25826"
</Plugin>
...

重启 collectd:

$ sudo /etc/init.d/collectd restart

InfluxDB 现在自带一个 collectd 插件来获取 collectd 客户端发来的数据,以前可没这么方便哦,0.8.4 版本以前只能通过 influxdb-collectd-proxy 这样的第三方程序来连接 collectd 和 InfluxDB. 如果你检查一下服务器上打开的端口就会发现 influxdb 插件启动了一个 25826 端口,如果发现 InfluxDB 数据库里没有(收集到)数据,务必检查这个 25826 端口是否正常启动了:

$ sudo netstat -tupln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      622/sshd
tcp6       0      0 :::8086                 :::*                    LISTEN      668/influxdb
tcp6       0      0 :::22                   :::*                    LISTEN      622/sshd
tcp6       0      0 :::8090                 :::*                    LISTEN      668/influxdb
tcp6       0      0 :::8099                 :::*                    LISTEN      668/influxdb
tcp6       0      0 :::8083                 :::*                    LISTEN      668/influxdb
udp6       0      0 :::25826                :::*                                668/influxdb

InfluxDB 自带的 collectd 插件默认是关闭的,需要手动配置打开 enabled = true,并填上 database = “collectd” 这一行,这里的 “collectd” 就是我们上面创建的那个数据库,更改配置后记得重启 InfluxDB:

$ sudo vi /opt/influxdb/current/config.toml
$ sudo vi /opt/influxdb/shared/config.toml
...
  # Configure the collectd api
  [input_plugins.collectd]
  enabled = true
  # address = "0.0.0.0" # If not set, is actually set to bind-address.
  # port = 25826
  database = "collectd"
  # types.db can be found in a collectd installation or on github:
  # https://github.com/collectd/collectd/blob/master/src/types.db
  # typesdb = "/usr/share/collectd/types.db" # The path to the collectd types.db file
...

$ sudo /etc/init.d/influxdb restart
Setting ulimit -n 65536
Setting ulimit -n 65536
influxdb process was stopped [ OK ]
Setting ulimit -n 65536
Starting the process influxdb [ OK ]
influxdb process was started [ OK ]

现在 InfluxDB 已经准备好接受和处理 collectd 传来的数据了。用命令行或者 Web 管理界面验证一下数据库里是否有数据:

$ curl -G 'http://192.168.2.183:8086/db/collectd/series?u=root&p=root&q=list+series&pretty=true'
[
    {
        "name": "list_series_result",
        "columns": [
            "time",
            "name"
        ],
        "points": [
            [
                0,
                "192.168.2.183/cpu-0/cpu-idle"
            ],
...
        ]
    }
]

InfluxDB

安装 Grafana

下载 grafana 后解压发到 web 服务器上就可用。这里省去配置 Nginx/Apache 之类的麻烦,直接用最简单的 Web 服务器 python -m SimpleHTTPServer 驱动:

$ wget http://grafanarel.s3.amazonaws.com/grafana-1.9.1.tar.gz
$ tar xzvf grafana-1.9.1.tar.gz
$ cd grafana-1.9.1.tar.gz
$ cp config.sample.js config.js

$ vi config.js
...
      // InfluxDB example setup (the InfluxDB databases specified need to exist)
      datasources: {
        influxdb: {
          type: 'influxdb',
          url: "http://192.168.2.183:8086/db/collectd",
          username: 'root',
          password: 'root',
        },
        ...
      },
...

$ sudo python -m SimpleHTTPServer

用浏览器访问 Grafana,这里的默认端口是 8000:

Grafana

Troubleshooting

下面有多个网友评论提到修改配置文件后端口 25826 也无法起来的问题,和 influxdb 启动时候使用的是哪个配置文件有关,用 ps aux | grep influxdb 可以看到当前 influxdb 使用的是哪个配置文件:

$ sudo vi /opt/influxdb/current/config.toml
$ sudo vi /opt/influxdb/shared/config.toml

$ ps aux | grep influxdb
influxdb   668 19.1  8.1 2655964 82336 ?       Sl   Mar31 6375:52 /usr/bin/influxdb -pidfile /opt/influxdb/shared/influxdb.pid -config /opt/influxdb/shared/config.toml
...

两个配置文件 /opt/influxdb/current/config.toml 和 /opt/influxdb/shared/config.toml 的确很坑爹

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)"

在CI中实现持续Web安全扫描

一. 当前Web应用安全现状

随着中国互联网金融的爆发和繁荣,Web应用在其中扮演的地位也越来越重要,比如Web支付系统、Web P2P系统、Web货币系统等。对于这些金融系统来讲,安全的重要性是不言而喻的, 一旦黑客利用安全漏洞入侵系统后,损失的不仅仅是数据,还包括企业或者客户的财产。

国内著名的乌云漏洞平台,每天都会爆出十几条甚至几十条各大网站的安全漏洞,比如:

  • 中国电信某省任意用户登陆(可恶意扣费)
  • 中石化某销售物流系统后台远程命令执行的服务器沦陷(客户信息泄漏&&可内网渗透)
  • 盛大某游戏总管理权限泄露可随意更改游戏玩家数据
  • 招商银行某服务器存在漏洞可Shell(穿透边界防火墙连通内网)

这里面包括了通信、金融、银行、能源、游戏等各个行业的Web应用的各种漏洞,有一些已经造成了影响广泛的严重安全事件,例如:CSDN、12306、小米用户信息泄露事件,携程网信息安全门事件、某快递官网遭入侵1400万条用户信息被转卖等等。

对于很多公司而言软件系统安全关注的重点还在网络和操作系统层面上,比如配置昂贵的网络入侵检测系统以等;很多开发人员安全意识薄弱,比如使用直接在代码中组装SQL语句,使用简单的数据加密和认证的方案,使用弱口令以及在产品中嵌入一些特定的调试信息;很多测试人员也不会进行基于业务流程的安全测试;系统管理和运维人员对于不可预知的应用组件和依赖的安全漏洞无法及时发现和修补。很多中小型公司基本不可能对于Web安全投入太多,比如无法在开发的过程中持续关注安全问题,从而导致系统上线之后还存在很多问题。因此,开发、测试和运维人员能充分理解安全的重要性以及掌握自动化安全扫描的方法和工具,对于开发一个安全的Web系统至关重要。

针对Web应用如此多的安全问题,全球范围内的有志之士成立了OWASP(Open Web Application Security Project),致力于宣传各种Web应用的安全问题。以及如何扫描、防御等知识,并且每2~3年还会发布世界范围内排名前十的安全问题。虽然OWASP提供如此丰富的安全知识,但是很多开发团队并没有充分利用,有些甚至还不知道,有些知道却不愿意投入。各种原因导致当前中国互联网上的众多Web应用拥有大量安全问题。

二.持续安全扫描

面对当前如此复杂和危险的互联网环境,如果一个在线金融系统(比如网银,P2P金融)存在安全问题,而系统管理员又没有及时发现安全问题和修复,那么时间越久,攻击者对其利用的程度越高,系统遭受的损失越大。这些安全问题可能是系统本身业务设计或者编码遗留的问题,也可能是依赖的第三方组件或者服务的问题。对于一些金融系统,修复安全漏洞哪怕只是晚几个小时,损失也可能是巨大的。如果不及时发现系统的安全问题并及时修复,那么开发成本和系统损失随着时间的推移可能会成指数级的增长。所以尽早发现安全问题并修复是节省成本和避免损失的有效方法。

对于软件安全,当前许多企业只会在发布或者上线之前进行一次渗透测试,如下图:

这种一次性的解决方案存在很多问题。其结果的有效性很难保证,如果发现问题可能会严重拖延发布时间等。为了解决它们,可以引入内建开发流程-BSI(Build Security In),如下图:

其中自动化的静态代码扫描,动态系统扫描,依赖扫描以及初级的渗透测试都可以比较容易的在CI中实现。示意图如下:

1. 静态代码扫描

利用静态代码扫描工具对代码在编译之前进行扫描,并在静态代码层面上发现各种问题,其中包括安全问题。部分工具列表:

工具 支持语言 版权 主页地址
Fortify 大部分语言 收费 http://www8.hp.com/us/en/software-solutions/static-code-analysis-sast/
Checkmarx 大部分语言 收费 https://www.checkmarx.com/
Flawfinder C/C++ 免费 http://www.dwheeler.com/flawfinder/
LAPSE Java 免费 http://www.owasp.org/index.php/Category:OWASP_LAPSE_Project
Brakeman Ruby on Rails 免费 https://github.com/presidentbeef/brakeman

利用动态安全扫描工具在系统部署之后对运行中的系统进行安全扫描。

2.动态安全扫描

动态扫描一般分为两种类型:主动扫描和被动扫描。

  • 主动扫描是首先给定需要扫描的系统地址,扫描工具通过某种方式访问这个地址,如使用各种已知漏洞模型进行访问,并根据系统返回的结果判定系统存在哪些漏洞;或者在访问请求中嵌入各种随机数据(模糊测试)进行一些简单的渗透性测试和弱口令测试等。对于一些业务流程比较复杂的系统,主动扫描并不适用。比如一个需要登录和填写大量表单的支付系统,这个时候就需要使用被动扫描。
  • 被动扫描的基本原理就是设置扫描工具为一个Proxy Server,功能测试通过这个代理服务访问系统,扫描工具可以截获所有的交互数据并进行分析,通过与已知安全问题进行模式匹配,从而发现系统中可能的安全缺陷。一般在实践中,为了更容易地集成到CI,会在运行自动化功能测试的时候使用被动扫描方法,从而实现持续安全扫描。示意图如下:

部分工具列表:

工具 扫描漏洞类型 版权 主页地址
ZAP 通用Web应用漏洞 免费 https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
SQLMap SQL注入 免费 http://sqlmap.org/
Burp Suite 通用Web应用漏洞 收费 http://www.portswigger.net/
N-Stalker 通用Web应用漏洞 收费 http://www.nstalker.com/

3.依赖扫描与监控

虽然自动扫描工具可以发现大部分基本的Web安全漏洞,比如XSS,CSRF等,但是它不能发现业务逻辑、身份认证以及权限验证等相关的安全漏洞,而对于这些类型的漏洞则需要开发相应的自动化安全功能测试。

由于当前服务器应用依赖的第三方的库和框架越来越多、越来越复杂,比如SSL、Spring、Rails、Hibernate、.Net,以及各种第三方认证系统等。而且系统开发的时候一般选定某个版本后在很长一段时间内都不会更新,因为更新的成本一般都比较高。但是往往这些依赖为了添加新的功能和修复各种当前的问题——当然包括安全问题,却会经常更新。开源项目的安全问题只要被发现以后,通常都会被公布到网上去,比如CVECWE乌云等,导致很多人都可能利用它去攻击使用这些依赖的系统。

依赖扫描就是通过扫描当前Web系统使用到的所有第三方依赖,并和网上公布的安全漏洞库进行比较,如果当前某个第三方依赖存在某种危险级别(需要自己定义)的漏洞,就立即发出警告(比如阻止CI编译成功等)来通知开发人员或者系统管理员,从而在最短的时间内修复这个问题,防止攻击,避免或者减少损失。示意图如下:

图示

部分工具列表:

工具 漏洞数据源 版权 主页地址
OWASP Dependency Check NVD和CVE 免费 https://www.owasp.org/index.php/OWASP_Dependency_Check
Victims CVE和Redhat 免费/收费 https://victi.ms
https://github.com/victims

三. 在CI中实现自动化安全扫描

将这三种类型的自动化安全扫描实践集成到CI服务器中就可以实现对系统的持续性安全扫描。

图示

1、在项目构建阶段进行依赖扫描与监控

对项目使用到的依赖进行安全扫描和监控是非常必要的,而将这一过程自动化能够进一步加强它的效果。这里以OWASP Dependency Check为例,介绍如何在项目构建阶段进行依赖扫描和监控。OWASP Dependency Check是一款开源免费的自动化依赖扫描工具,它由OWASP开发并维护,使用NVDCVE作为漏洞数据源,自动识别依赖并扫描其是否存在安全问题。它提供Shell脚本、Ant插件、Maven插件和Jenkins插件。

以Maven插件为例,首先在pom.xml文件里添加这个插件 。

然后使用Maven对项目进行构建,OWASP Dependency Check插件会自动识别项目的依赖(包括间接依赖),对其进行安全扫描并生成报告。

在Jenkins中运行扫描并保存安全报告的配置如下:

图示

下面的扫描报告中列出了Struts2和commons-fileupload两个依赖存在安全漏洞,以及严重程度等信息,如下图:

图示

如果项目没有使用Maven, OWASP Dependency Check还提供Jenkins插件,同样能对依赖进行扫描,但这种方式需要明确指定所需扫描依赖的目录或者文件名,Jenkins配置如下:

图示

OWASP Dependency Check以自动化的方式对项目的依赖进行扫描,极大的降低了人力成本、提高了效率。不过目前它仅能扫描JAVA和.NET项目的依赖,针对Node.JS、客户端JavaScript库的支持还处于计划阶段。另外,目前它没有提供Gradle的插件,如果您的项目使用的是Gradle,则只能用命令行的方式来运行它。

2、在自动化测试阶段进行被动方式的动态安全扫描

针对Web应用的安全扫描工具非常多,其中OWASP ZAP是免费软件里面最为常用的。虽然OWASP ZAP官方并没有提供相应的方案和构建系统以及CI进行集成,但是有一些第三方的开源工具可以帮助其集成。下面将以Gradle项目为例,介绍如何在CI自动化测试阶段集成ZAP并进行被动方式的动态安全扫描。

第1步:下载安装ZAP。

第2步:在Gralde构建脚本中配置security-zap插件用于集成ZAP。

第3步:配置WebDriver,为其设置代理。

默认配置下,security-zap插件在启动ZAP之后,ZAP会侦听本地7070端口,因此需要将WebDriver的代理设置为localhost:7070,参见示例代码18。

第4步:启动ZAP并运行测试。

使用zapStart命令来启动ZAP,用build来运行一次构建,在运行所有测试的同时进行被动扫描,命令如下:

gradle zapStart build -Dzap.proxy=localhost:7070

第5步:生成安全报告。

在所有的测试都执行完毕后,使用zapReport命令生成报告,命令如下:

gradle zapReport

它会在项目根目录下新建一个名为zap-reports的目录,并将安全扫描报告放置其中。下面是一份示例安全报告,它列出了所测试的Web应用的安全漏洞,按照严重程度以及类别进行了统计,还包含了每个安全漏洞的细节信息,报告如下:

图示

第6步:关闭ZAP。命令如下:

gradle zapStop

第7步:Jenkins集成。Jenkins配置如下:

图示

3、在测试环境部署阶段进行主动方式的动态安全扫描

继续以Gradle项目和OWASP ZAP为例,在安装好ZAP并且在构建脚本里配置好security-zap插件后(同上一阶段的步骤1、2), 只需要使用zapStart和zapScan命令就可以启动主动式扫描,命令如下:

gradle zapStart zapScan

主动扫描的检查能力更强,可以弥补被动扫描的不足,但缺点是耗时长,以及在扫描需要身份验证的系统的时操作复杂。

默认配置下主动扫描启动后,security-zap插件会主动检测扫描进度,默认扫描等待时间为60分钟。如果主动式安全扫描的执行时间超过了这一时间,security-zap会因为超时而终止运行,不过ZAP安全扫描并不会因此而停止,它还将继续运行,直到完成所有的安全扫描为止。若要了解当前扫描进度,可以通过运行zapScanStatus命令查询,命令如下:

gradle zapScanStatus

扫描完成后,通过运行下面的命令生成安全扫描报告,并关闭ZAP:

gradle zapReport zapStop

四. 总结

自动化持续Web安全扫描是一个复杂的课题,很大程度上依赖于自动化Web安全扫描工具的能力。当前绝大部分Web安全扫描工具并不能发现所有的安全问题,就算OWASP TOP10也无法全部包括,但是它可以在较小投入的情况下持续发现大部分Web系统的基础安全问题,从而防止大部分中级和几乎所有初级的黑客攻击。如果需要更高级别的安全保障,人工渗透性测试和威胁建模等必不可少,但是成本也是相对较高的。

所以对于Web系统的安全,首先要分析系统的安全需求和可用资源,在资源有限的情况下应该首先实施自动化持续安全扫描。如果系统的安全需求很高,并且在资源允许的情况下再投入人工渗透性测试等,从而获得安全上的最高投资回报比。


刘冉,ThoughtWorks高级软件质量咨询师, 超过10年软件开发和测试工作经验。熟悉嵌入式系统开发、Linux系统开发、各种脚本、测试工具、自动化测试系统开发、以及Agile中的QA。对服务器性能测试、Web功能测试,以及测试分层一体化解决方案有较深的理解。现在关注于全方位自动化QA的工作,包括自动化安全扫描。

马伟,ThoughtWorks高级软件开发咨询师,长期从事企业级软件开发工作,拥有丰富的Web应用开发经验。熟悉Java、C#、Ruby、JS、HTML等前、后端开发技术,在工作中积累了丰富的Web应用安全经验。目前专注于安全技术的创新与实践,热衷于探索和研究各种Web应用漏洞,对如何将安全实践集成到敏捷开发流程中有浓厚的兴趣和深入的实践,同时也是敏捷软件开发的实践者。

感谢张凯峰对本文的策划,魏星对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

基于深度学习的商品检索技术

图 7:商品垂类特征学习框架
垂类数据挖掘
基于这套框架,特征学习就可以依靠大量的标注数据来完成。如何来获取标注数据呢? 简单粗暴的全量数据标注会非常耗时耗力。 这里针对同款数据与类别数据分别给出了数据挖掘的方法, 如图8所示。
(a) 同款数据挖掘。 基于已有的检索特征模型以及大类属性分类模型, 可以将互联网数据按照类别预测结果进行划分, 并根据子类进行单独的聚类。 对于每个cluster, 根据一些准则(如特征数目、平均距离、距离方差等)来判定噪声并进行筛选; 最后通过人工标注的方式进一步切分每一个cluster来获取同款的商品。
(b) 类别数据挖掘。 首先, 通过爬虫抓取以及人工构造的方式, 可以获得大量的关键词集合; 并将它们进行多词组合的方式在图像搜索引擎获取top-K的检索结果, 放入类别图像候选集合; 之后, 基于已有的大类属性模型, 对候选集进行提纯, 去除低质量以及语义错误的图像。
图 8:同款与类别数据挖掘
技术应用
本节介绍一种新商品检索技术应用方向: 服装搭配。 服装搭配是指根据用户给定的一件衣服单品, 推荐出能够与之搭配的时尚款式。它的应用场景包括时尚资讯推荐、电商导购等。由于服饰品类繁多、穿着标准各异, 如何定义并获取时尚的款式以及给用户个性化推荐搭配方案, 都面临很大的挑战。 下文将围绕这两个问题, 介绍一种基于商品检索技术的服饰搭配方法。
定义时尚款式
“工欲善其事必先利其器”。在服饰搭配过程中,构建时尚款式的数据库是非常必要的。然而,时尚是一种比较感性的认识, 且人们对于时尚的理解各不相同,“时尚款式”的定义是没有一个统一的量化标准的。下图给出了一些时尚图像的例子, 可以看出, 图像中服装的时尚取决于很多方面: 服装样式、发型、 鞋子、 拍照场景、 身材等等。
图 9:时尚库中的四款搭配
为了解决这个难题,数据来源选自多个顶级时尚网站。这些网站往往通过时尚达人编辑的方式来推荐出时尚图片,确保了服装的时尚性与新颖性; 除此之后, 从视觉上影响图像时尚程度的因素还有很多, 如背景灰暗、T台秀、非全身图、身材差、分辨率低等; 基于这类数据训练低质图片过滤模型, 就能获取最终的高质时尚库。
服装搭配技术
简单讲,服饰搭配就是一种通过用户上衣(下装),推荐时尚下装(上衣)的技术。这里根据优化目标的不同将现有方法分为两大类: 基于上下衣度量学习的方法以及基于相似服饰检索的方法。前者的实现基于不同服装部件的度量学习: 适合搭配的上下装距离应该尽量的近,而不适合搭配的则要尽量的远。 后者假定时尚库的图像拥有优质的搭配, 将用户服装单品输入时尚服装数据库的检索引擎, 获得语义与表观相似的时尚推荐结果。目前,时尚搭配App—FOLLOW, 采用的就是基于检索技术的解决方案。 图10中个给出了FOLLOW搭配的效果, 欢迎扫码试用。
图 10:服饰搭配。上排:灰色短袖T恤;下排:黑色七分阔腿裤
总结与展望
本文回顾了基于深度学习的服装检索技术,并且基于这些方法, 概括出一套通用的商品特征学习框架。针对不同种类商品图像的采集, 给出了基于图像搜索引擎的数据挖掘方法。后续仍有待进一步探究的方向包括多品类商品检索技术、基于大规模同款数据的特征学习以及全自动数据挖掘方法等。

工具武装的前端开发工程师

Awesome Mac

jaywcjlove/sb jaywcjlove/sb jaywcjlove/sb Gitter

 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issues 给我推荐优秀好用的Mac应用,很显然我是一个资深Mac用户,我需要它们帮助我快乐、高效的工作,同时也分享给你。格式参照awesome的清单。

https://github.com/jaywcjlove/awesome-mac

说明

中文 | English

Open-Source Software 表示开源软件,点击进入开源仓库;
Freeware 表示免费使用,或者个人免费
hot 表示热门的软件;
tuijian 表示推荐的软件;
必备 表示装机必备的软件;
1 star 表示强烈推荐的必装神器,星星的数量来表达强烈的程度;

目录

编辑器

一种用于编辑纯文本文件的程序,建议使用免费开源的编辑器

  • Atom – GitHub推出的开源编辑器。star 4 Open-Source Software Freeware hot
  • Sublime Text – 一个比较简洁大方带插件管理系统的流行编辑器。hot tuijian 必备
  • Brackets – Adobe推出的Brackets免费/开源编辑器。Open-Source Software Freeware
  • Visual Studio Code – 微软推出的免费/开源编辑器,TypeScript支持杠杠的。Open-Source Software Freeware hot
  • Emacs – Emacs是基于控制台的编辑器和高度可定制的。
  • LightTable – 下一代代码编辑器。Open-Source Software Freeware
  • TextMate – 文本编辑器软件,与BBedit一起并称苹果机上的emacs和vim,这是以前。Freeware
  • BBEdit – 强大的文件编辑器,用于编辑文件,文本文件及程序源代码。
  • Coda2 – 编写Web应用长得漂亮的编辑器。
  • Vim – Vim古老命令行中使用的编辑器。Freeware hot
    • Vundle.vim – Vim插件管理工具。Open-Source Software Freeware
    • vim-plug – 一个简约的vim插件管理器。Open-Source Software Freeware
    • WebVim – 倾向于开发JavaScript和Web的vim。
    • vim-web – 一个前端开发工程师的vim。Open-Source Software Freeware
    • Neovim – 提高Vim可扩张灵活性。Open-Source Software Freeware hot
    • Spacevim – 模仿Spacemacs的使用方式。
    • Spf13 – 一套全方位的配置项目。
  • Vimr – Vim客户端,升级Vim体验。Open-Source Software Freeware
  • HBuilder – HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。Freeware hot
  • Tincta – 一个免费的文本编辑器。Freeware
  • IntelliJ IDEA – 一款Java开发集成环境。(学生免费)hot tuijian
  • Webstorm – 是jetbrains公司旗下一款JavaScript开发工具。
    • 学生免费,点击这里 查看更多。
    • 一些很好的插件
      • NodeJS – 集成Node.js,你肯定需要它,很多功能需要它。
      • EditorConfig – 帮助开发者在不同的编辑器和IDE之间定义和维护一致的代码风格。
      • Material Theme UI – Google为React开发的主题。
  • Deco IDE – React Native IDE 支持控件拖拽界面实时变更。Open-Source Software Freeware hot tuijian
  • Xamarin Studio – 免费的跨平台的C# IDE。支持iOS、Android和.net开发。Open-Source Software Freeware
  • NetBeans IDE – A free and open source IDE, mainly used for Java development, but supports many other languages and frameworks. Open-Source Software Freeware
  • Eclipse – 流行的开源IDE,主要用于Java,但为多种语言和平台的插件支持。Open-Source Software Freeware hot

开发者工具

  • WeFlow – 一个基于 tmt-workflow 前端工作流的开发工具。Open-Source Software Freeware
  • Koala – 预处理器语言图形编译工具,支持Less、Sass、CoffeeScript、Compass framework 的即时编译。Open-Source Software Freeware
  • CodeKit – 自动编译Less、Sass、Stylus、CoffeeScript、Jade & Haml等文件。
  • Hosts.prefpane – 编辑 hosts 文件的工具。Open-Source Software Freeware
  • SwitchHosts – 一个管理、切换多个 hosts 方案的工具。Open-Source Software Freeware
  • Gas Mask – 编辑 hosts 文件的工具,更简单方便。Open-Source Software Freeware hot 必备
  • DiffMerge – 可视化的文件比较(也可进行目录比较)与合并工具。Freeware
  • Beyond Compare – 对比两个文件夹或者文件,并将差异以颜色标示。
  • Kaleidoscope – 一款很强大的文本文件和图像比较工具,同时和 git、svn 等版本控制工具能够完美的结合。
  • Fanvas – 把swf转为HTML5 canvas动画的系统。Open-Source Software Freeware
  • EnvPane – 图形终端查看环境变量的应用工具。Open-Source Software Freeware
  • Dash – 强大到你无法想象的API离线文档软件。star 5 Freeware hot tuijian 必备
  • Dlite – 简单的使用Docker的一个软件。Open-Source Software Freeware
  • SnippetsLab – 管理和组织你的代码片段。
  • StarUML – 强大的软件建模软件。
  • Vagrant Manager – 管理你本地服务。Open-Source Software Freeware
  • zeplin – 前端与设计协同工作专用工具。Freeware hot
  • Go2Shell – 从Finder打开命令行。Freeware hot
  • SecureCRT – 一款支持SSH、Telnet等多种协议的终端仿真程序。
  • MJML – 简化设计回应电子邮件的方式。Open-Source Software Freeware
  • TeXstudio – 集成创建LaTeX文档的写作环境。 Open-Source Software Freeware

正则编辑器

  • Patterns – 正则表达式编辑器。
  • Reginald – 正则表达式测试应用程序,使用 RegexKitLiteOpen-Source Software Freeware
  • Regex – 感觉是用过最漂亮的正则表达式测试工具。
  • Reggy – 正则表达式编辑器。Open-Source Software Freeware
  • RegExRX – 正则表达式的开发工具。hot

测试工具

  • Charles – 一个代理工具,允许你查看所有的HTTP和HTTPS流量。
  • Insomnia 3.0 – 漂亮的HTTP请求测试工具。Freeware
  • Cocoa Rest Client – 比Postman看起来漂亮的客户端,测试HTTP/REST endpoints。Open-Source Software Freeware
  • Paw – 先进的 HTTP 客户端。
  • Cellist – HTTP调试客户端。
  • Integrity – 轻松找到无效链接。Freeware
  • Postman – Postman 帮助我们快速测试API。Freeware hot 必备

命令行工具

  • iTerm2 – 免费的终端工具,直接替代自带的Terminal,有非常多惊人的特性。star 4 Open-Source Software Freeware hot tuijian 必备
  • cool-retro-term – 怀旧的命令行终端。Open-Source Software Freeware
  • Oh my zsh – 拥有大量的有用的功能,助手,插件,主题,等特性的命令行工具插件。Open-Source Software Freeware hot tuijian 必备
  • Glances – 在命令行中查看你系统运行状态的工具。Open-Source Software Freeware
  • CakebrewHomebrew 的客户端软件。摆脱命令方便安装、查看、卸载软件。Open-Source Software Freeware
  • Black Screen – 来自 21 世纪的强大终端。Open-Source Software Freeware
  • Fish Shell – 智能且用户友好的命令行终端。hot tuijian
  • oh-my-fish – 和Oh my zsh相似,建立在Fish Shell框架上。hot tuijian
  • bash-it – 一个社区的bash的框架。Open-Source Software Freeware
  • color-retro-term – 一款复古风格的终端,非常酷炫。
  • HyperTerm – 一款基于Node开发的终端软件,逼格很高。Open-Source Software Freeware
  • itunes-remote – 通过终端控制您的iTunes。Open-Source Software Freeware

版本控制

GUI

  • Gitbar – 开源,在你的菜单栏上显示GitHub贡献统计。Open-Source Software Freeware
  • GitHub Desktop – 使用GitHub的GUI应用。Freeware
  • Oh My Star – GitHub的star功能弱,比如分类,本地组织你的GitHub star!
  • GitUp – 一个简单功能强大的git客户端。star 3 Open-Source Software Freeware
  • Hub – 将GitHub接口和git命令进行包装。Open-Source Software Freeware
  • SourceTree – 强大的Git跨平台客户端。Freeware hot
  • Tower2 – 最强大的Git客户端。
  • Versions – Mac上最好的SVN管理工具。
  • Cornerstone – Mac上最佳的SVN管理工具。

版本控制系统

  • GitLab – 一个用于仓库管理系统的开源项目。Freeware hot tuijian 必备
  • Coding.net – 代码托管,项目管理,WebIDE,演示部署,开启云端开发模式,让开发更简单。Freeware
  • phabricator phabricator支持Git、SVN、HG 基于 PHP + Mysql 的开放源代码软件开发平台。Freeware
  • Gogs – 一款极易搭建的自助 Git 服务。Open-Source Software Freeware
  • Gerrit Gerrit 是一个免费、开放源代码的代码审查软件,使用网页界面。Freeware
  • GitHub GitHub代码托管,项目管理,演示部署,瞧,您现在就访问GitHub。Freeware hot tuijian 必备

数据库

  • Sequel Pro – 一个MySQL数据库管理软件。Open-Source Software Freeware hot 必备
  • MySQL Workbench – MySQL数据库官方管理软件。
  • Postico – 现代PostgreSQL客户端,漂亮功能多。
  • ElectroCRUD – MySQL数据库CRUD应用程序。Open-Source Software Freeware
  • Base 2 – 一个用于管理SQLite数据库的软件。Open-Source Software Freeware
  • Postgres.app – Mac上最简单的方法的使用PostgreSQL关系型数据库管理系统。Open-Source Software Freeware
  • PSequel – PostgreSQL数据库GUI软件。Freeware
  • Robomongo – 基于Shell的MongoDB图形化客户端管理软件。Open-Source Software Freeware
  • MongoBooster – MongoDB图形化管理软件,内嵌MongoShell,ES6语法,流畅查询及智能感知。Freeware
  • Mongo Management Studio – MongoDB图形化客户端管理软件。
  • MongoChef – MongoDB图形化客户端管理软件。Freeware
  • Chrome MySQL Admin – 一个Chrome插件,是MySQL开发的跨平台、可视化数据库工具。Open-Source Software Freeware
  • JackDB – 直接的SQL访问你所有的数据,无论在哪里。Open-Source Software Freeware
  • medis – 漂亮的Redis管理软件。Open-Source Software Freeware
  • MDB Explorer – Mac上查看编辑Access数据库的工具。
  • Datum – SQLite – Sqlite3数据库管理软件。
  • mongoDB.app – 在Mac 上最简单的使用MongoDB Open-Source Software Freeware

设计和产品

设计工具

  • Acorn – 一个像PS,全面的功能集的图像编辑器。
  • Affinity Designer – 矢量图像设计工具,可能的Adobe Illustrator的替代。
  • Affinity Photo – 光栅图像设计工具,可以替代Adobe PS图象处理软件。
  • Blender – 全功能可扩展的跨平台3D内容套件。Open-Source Software Freeware
  • Pixelmator – 强大的图像编辑器,可能PS图像处理软件的选择。
  • Sketch – 混合矢量/位图布局应用,特别适用于用户界面,Web和移动设计。star 5 hot tuijian 必备
  • inklet – 将Mac上的触摸板变成绘图板。tuijian
  • Monodraw – 一款文本图像编辑器。Freeware
  • SketchBook – 出众的绘图软件。Freeware
  • Tayasui Sketches – 专业的绘图软件。
  • Nik Collection – 专业照片后期制作工具Google收购后免费。Freeware tuijian
  • Paintbrush – 位图图像编辑器。star 2 Open-Source Software Freeware
  • Krita – 一个开源的位图形编辑软件,包含一个绘画程式和照片编辑器。 Open-Source Software Freeware
  • Vectr – 免费图形编辑器。这是一个简单而强大的Web和桌面跨平台工具,把你的设计变成现实。Freeware
  • Principle – 使用它很容易设计动画和交互式用户界面。star 5

原型流程

  • Justinmind – 功能更丰富团队协作方便。tuijian
  • MockFlow – 用于网页设计和可用性测试的在线原型设计套件。
  • Axure RP 8 – 画原型图工具,团队协作SVN方便好用。hot
  • Mockplus – 更快更简单的原型设计工具。
  • OmniGraffle – 可用来绘制图表、流程图、组织结构图、思维导图以及插图或原型。
  • XMind – 一款实用的思维导图软件。hot 必备
  • Scapple – 一款实用的思维导图软件。hot
  • Framer – 做交互原型的工具。star 5hot
  • Balsamiq Mockups – 一个快速的网页设计原型工具,帮助你更快、更聪明的工作。

其它工具

  • TinyPNG4Mac – 图片压缩专用开源工具。Open-Source Software Freeware
  • Image2icon – 将你的图片转换成图标。Freeware
  • ImageAlpha – 压缩PNG图片,去掉无效的透明。Open-Source Software Freeware
  • ImageOptim – 压缩图片,删除EXIF信息。Open-Source Software Freeware
  • Sip – 收集,整理和分享你的颜色拾色器。tuijian
  • Frank DeLoupe – 支持 Retina 的屏幕拾色器。
  • ColorSchemer – 专业的配色、调色软件。
  • IconKit – App图标自动生成器。
  • Licecap – 是一款屏幕录制工具输出GIF,录制过程中可以随意改变录屏范围。star 4 Open-Source Software Freeware hot 必备
  • GIPHY Capture – 免费软件的捕捉和分享图片在桌面上。Freeware
  • Skitch – 截图附带强大的标注功能。Freeware hot
  • 截图(Jietu) – 截图附带强大的标注功能,腾讯作品。star 5 Freeware tuijian 必备
  • Snip – 高效的截图工具,支持滚动截屏,腾讯作品。Freeware tuijian
  • iPic – 上传插图链接分享。Freeware
  • Iconjar – 图标管理软件,带组织和搜索功能。star 5 Freeware tuijian
  • RightFont – 字体管理工具。star 4 tuijian
  • Solarized – 干净清爽的颜色主题,支持iTerm、Intellij IDEA、Vim等。tuijian

虚拟机

  • Parallels Desktop – 虽然好用但是收费机制,更新花钱、花钱、花钱。hot
  • Virtual Box – 免费、免费、免费,带NTFS读写,不用买ParagonNTFS,省100块。star 4 Freeware tuijian
  • VMWare Fusion – 强大的虚拟机,商业软件。
  • Veertu – Mac上最轻便的虚拟机,只有跑Windows才会收费。比较新,很多功能不支持。Freeware tuijian

通信

推荐一些通信工具,沟通,团队协同。

  • Franz – 一个使用 Electron开发的,可以同时登录23个平台的即时通讯软件。hot Freeware
  • QQ – QQ for Mac App。Freeware
  • WeChat – 微信 for Mac App。Freeware
  • Electronic WeChat – 调用微信接口,使用 Electron 开发的第三方漂亮开源微信应用。Open-Source Software Freeware hot
  • Skype – Skype共享、跨平台的短信和电话。
  • WeiboX – 微博第三方Mac应用。star 5 Freeware tuijian
  • 御飯 – 饭否第三方Mac应用。star 3 Freeware
  • ChitChat – WhatsApp非官方。Open-Source Software Freeware
  • Telegram – 通讯新时代。
  • Messenger – Facebook第三方聊天工具。Open-Source Software Freeware
  • Adium – 呃这个是老的集成多个平台的聊天客户端。Freeware
  • Textual – 最受欢迎的世界与我们相关的KPI应用 for OS X。
  • Gitter – 关于GitHub的项目交流,支持 Markdown,对开发者极为友好。
  • 简聊 – 企业级即时沟通工具,已经下线了,可以自己搭建一套系统玩儿。Open-Source Software Freeware
  • 钉钉 – 企业级办公通讯免费平台。Freeware
  • Slack – 团队协作,沟通工具。
  • 零信 – 随时随地工作,跨平台。
  • 今目标 – 一款面向中小企业的互联网工作平台。
  • BearyChat – 互联网团队协作,沟通工具。
  • Bitpost – 私人分散消息。它是一个p2p的去中心化和无须第三方提供信用担保协议。Open-Source Software
  • Teambition – 团队协作。提供管理任务、安排日程、查找文件、即时讨论等团队所需要的一切协作功能。Freeware
  • 日事清 – 个人日程管理,团队协作工具。日程安排,计划分配,笔记总结等。Freeware
  • Coding.net – 代码托管,项目管理,WebIDE,演示部署,开启云端开发模式,让开发更简单。Freeware
  • WeeChat – 一个命令行聊天客户端。Freeware
  • Email
    • Airmail – 快速的邮件客户端支持Mac和iPhone。
    • Foxmail – 快速的邮件客户端。Freeware hot tuijian
    • MailTags – 管理和组织邮件,日程和标签进行分类邮件。
    • N1 – 可以扩展的开源收费邮件客户端。
    • Postbox – 这个貌似也非常强大哦,关键是简洁漂亮的收费邮件客户端。
    • Polymail – 简单,功能强大,长得好看的新晋邮件客户端。Freeware
    • CloudMagic Email – 界面非常简洁的一个邮件客户端。

数据恢复

音频和视频

  • VOX Player – 免费全能音乐播放器,撸码之余听听歌是一种享受。star 5 Freeware hot tuijian 必备
  • Radiant Player – Google Play音乐播放器。Open-Source Software Freeware
  • Sonora – 一个很小的音乐播放器。Open-Source Software Freeware
  • Audacity – 免费开源的编辑音频的软件。Open-Source Software
  • Audio Hijack – 一个记录任何应用程序的音频,包括网络电话Skype,网络流从Safari,以及更多。
  • Stringed 2 – 音频编辑处理工具。
  • Mixxx – 免费的DJ软件,给你一切你需要的表演组合,名副其实的替代Traktor。Open-Source Software Freeware
  • Cog – 一个免费的开源音频播放器。Open-Source Software Freeware
  • VLC – 开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件。Open-Source Software Freeware
  • XLD – 解码/解码/转换/播放各种“无损”音频文件。Open-Source Software Freeware tuijian
  • HandBrake – 高性能的视频编码和转换工具,具有很好的图形用户界面。Open-Source Software
  • MPlayerX – 媒体播放器。 star 3 Open-Source Software
  • ScreenFlow – 屏幕和视频编辑软件。
  • mpv – 媒体播放器。Open-Source Software
  • ArcTime – 跨平台字幕制作软件。hot tuijian 必备
  • Perian – 让QuickTime播放所有常见格式的免费插件。star 5 Open-Source Software hot tuijian 必备

书签阅读写作

  • Spillo – 功能强大,美观、快速网络书签网页阅读。
  • iChm – 读chm文件的软件。Freeware
  • Chmox – 读chm文件的软件。Freeware
  • CHM Reader – 读chm文件的软件。Freeware tuijian
  • Kindle App – 亚马逊 Kindle App 电子书阅读器。
  • RSS
    • Feeds 2 – 监控任何RSS。Open-Source Software Freeware
    • ReadKit – 书签RSS管理客户端。
    • Reeder 3 – RSS 服务订阅。hot tuijian 必备
    • Leaf – RSS 客户端程序。hot
    • Vienna – RSS/Atom 新闻阅读客户端。Open-Source Software Freeware
  • Markdown
    • Mou – 免费 Markdown 编辑神器。Freeware hot
    • Marp – Markdown 制作幻灯片编辑器。Open-Source Software Freeware
    • TextNut – Markdown编辑器,富文本之间自由切换。Freeware
    • MWeb – 专业的 Markdown 写作、记笔记、静态博客生成软件。hot
    • Typora – 基于 Electron 的“读写一体” Markdown 编辑器。Freeware hot tuijian
    • MacDown – 一款开源的Markdown编辑器,深受Mou的影响。Open-Source Software tuijian Freeware
    • EME – 最近刚出的一款Markdown编辑器,界面很像Chrome浏览器的界面,很简约。
    • LightPaper – 简单的Markdown文本编辑器。
    • Cmd Markdown – Cmd Markdown 编辑阅读器,支持实时同步预览,区分写作和阅读模式,支持在线存储,分享文稿网址。 Freeware
  • 笔记
    • Quiver – 程序猿的笔记本。
    • 有道云笔记 – 支持多目录,Markdown,iWork/Office预览。Freeware tuijian 必备
    • 为知笔记 – 支持Markdown,搜集整理图片链接导入文档。Freeware tuijian 必备
    • leanote – 支持Markdown的一款开源笔记软件,支持直接成为个人博客。Open-Source Software Freeware

制作电子书

  • Calibre – 丑陋的软件,但强大的软件电子书管理和转换。Open-Source Software Freeware
  • Sigil – 多平台EPUB编辑器 Open-Source Software Freeware

FTP客户端

  • Transmit – 一个FTP客户端,支持FTP + SFTP + S3。
  • Flow – 支持简单的 FTP + SFTP 客户端。
  • Yummy FTP – 专业快速,可靠的FTP客户端。
  • Cyberduck – 免费FTP,SFTP,S3和WebDAV客户端 & OpenStack Swift Client。Freeware
  • FileZilla – 跨平台的FTP,FTPS和SFTP客户端。hot

软件打包工具

  • Finicky – Web应用程序转化为苹果的应用程序。Open-Source Software Freeware
  • nw.js – 使用HTML和JavaScript来制作桌面应用。Open-Source Software Freeware hot
  • Electron – 前身是 AtomShell,使用 JS、HTML 和CSS 构建跨平台的桌面应用程序。Open-Source Software Freeware hot
  • React Native Desktop for Mac – 用 React Native 技术构建 OS X 下的桌面应用程序。Open-Source Software Freeware tuijian
  • React Native Desktop for Ubuntu – 用 React Native 技术构建 Ubuntu 下的桌面应用程序。Open-Source Software Freeware tuijian
  • AppJS – 使用 JS、HTML 和CSS 构建跨平台的桌面应用程序。Open-Source Software Freeware
  • HEX – 使用 JS、HTML 和CSS 构建跨平台的桌面应用程序,有道出品。Open-Source Software Freeware
  • AlloyDesktop – 同上,腾讯出品,给个差评。Open-Source Software Freeware
  • MacGap – 桌面WebKit打包HTML、CSS、JS应用。Open-Source Software Freeware

下载工具

  • Transmission – 免费的BitTorrent客户端 Open-Source Software Freeware
  • aria2 – 一款支持多种协议的轻量级命令行下载工具。Open-Source Software Freeware
  • JDownloader – 下载工具,下载文件的一键式托管。Freeware
  • You-Get – 网络富媒体命令行下载工具。Open-Source Software Freeware
  • Free Download Manager – 功能强大的下载加速器。Freeware
  • FOLX – Folx 是一个Mac osx 系统风格界面的下载管理工具。 Freeware

网盘

推荐一些有Mac客户端的网盘。

  • Dropbox – 非常好用的免费网络文件同步工具,提供在线存储服务。Freeware
  • 百度云 – 百度云客户端。Freeware hot
  • 腾讯微云 – 腾讯云客户端。Freeware
  • 坚果云 – 坚果云客户端。Freeware
  • 115 – 115云客户端。Freeware
  • 360 – 360云客户端。Freeware
  • 快盘 – 金山快盘,倒闭了? Freeware
  • owncloud – 私有云网盘。
  • Mega – 免费的云服务,提供50GB的免费存储空间。Freeware

输入法

浏览器

这里放Mac的浏览器应用

  • Safari – Mac预装自带浏览器。Freeware
  • Chrome – Chrome浏览器谷歌出品。star 4 Freeware
  • Firefox – 火狐浏览器。Freeware
  • Opera – Opera 浏览器。Freeware
  • QQ浏览器 – QQ浏览器-腾讯出品。Freeware
  • 傲游云浏览器 – 傲游云浏览器。Freeware
  • Vivaldi – Opera开发商出品新的浏览器。Freeware
  • Ōryōki – 小的web浏览器。这是一个试验性的项目,目前正在开发中Freeware

翻译工具

  • 有道翻译 – 有道词典桌面版。Freeware
  • 辞海词典 – 学单词、背单词、辞海词典。Freeware
  • eudic – 欧路词典词典。
  • iTranslate – 支持全世界超过 80 种语言发音和输出。Freeware

科学上网

假设你是个勤奋的同学,你总有一天会强烈需要它们,上帝保佑他们吧。

  • ShadowsocksX – 一个快速的隧道代理,可以帮助你绕过防火墙。Open-Source Software Freeware hot
  • ShadowsocksX-NG – 一款ShadowsocksX客户端软件。Open-Source Software Freeware
  • Lantern – 科学上网。Open-Source Software Freeware tuijian 必备 hot
  • 鱼摆摆 – 科学上网。
  • Tunnelblick – OpenVPN的免费软件。Freeware
  • GoAgentX – 科学上网。Open-Source Software Freeware
  • Surge – 科学上网。Freeware
  • 云梯 – 在圈内小有名气的VPN服务提供商。hottuijian
  • srocket – 开启科学上网。Freeware
  • LoCoVPN – 每天签到可获得2小时免费VPN加速。Freeware
  • 二师兄VPN – 提供无限流量、无限续期免费VPN账号。Freeware
  • GTX加速器 – 每天签到领取500M流量。Freeware
  • GreenVPN – 注册激活送免费VPN加速流量。Freeware
  • 风驰VPN – 无限流量、无限续期的免费VPN加速服务。Freeware
  • 开眼 – Chrome插件免费的科学上网利器。Freeware

其它实用工具

  • CheatSheet – CheatSheet 是一款Mac上的非常实用的快捷键快速提醒工具。star 4 Freeware
  • WWDC – Mac OS的非官方的WWDC APP。Open-Source Software Freeware
  • xScope – 测量、检查和测试屏幕上的图形和布局的工具。搜索你的苹果和网络,快速打开应用程序。
  • f.lux – 自动调整您的电脑屏幕,以匹配亮度。Freeware
  • Todoist – 跨平台的任务管理器与移动应用程序。
  • Karabiner – 一个强大的和稳定的OS X的键盘定制。Open-Source Software Freeware
  • Keytty – 让你通过键盘使用鼠标。
  • AppCleaner – 一个小应用程序,让你彻底卸载不需要的应用程序。Freeware tuijian
  • BetterZip 3 – 压缩解压缩工具支持格式 ZIP、TAR、TGZ、TBZ、TXZ (new)、7-ZIP、RAR。Freeware hot tuijian 必备
  • Numi – 漂亮的计算器应用。Freeware
  • SSH Tunnel – 管理你的SSH。
  • Mounty – NTFS 分区读写组件。Freeware
  • Tuxera NTFS – Mac上的NTFS文件系统驱动。
  • gfxCardStatus – 控制Mac独立显卡与集成显卡之间的切换。Freeware tuijian
  • openEmu – 模拟器,可以玩魂斗罗之类,放松回到小时候。Open-Source Software Freeware tuijian
  • Alfred – 效率神器。tuijian hot
  • Hammerspoon – 功能强大的自动化工具,Lua 脚本驱动,支持窗口管理。Open-Source Software Freeware
  • DaisyDisk – 磁盘空间使用扫描工具。
  • iStat pro – 免费的Mac OS电脑硬件信息检测软件。Freeware
  • BitBar – 支持使用各种语言将信息展示到Mac OS的菜单栏。Open-Source Software Freeware
  • ClipMenu – 一个剪贴板操作的管理器。Freeware
  • Caffeine – 实用工具,菜单栏按钮,点击休眠。Freeware
  • Itsycal – 一款简洁实用的开源日历工具。Open-Source Software Freeware
  • HTML5 Player – Chrome插件解决中国视频网站播放视频电脑发热的情况。
  • Monity – 帮助用户实时监控系统的一款非常漂亮的软件。star 3
  • BetterTouchTool – 代替默认的系统操作方式(组合键、修饰键、手势等)。Freeware
  • iStats – iStats 是一个可以让你快速查看电脑 CPU 温度,磁盘转速和电池等信息的命令行工具。Open-Source Software Freeware
  • InsomniaX – 合上盖子不眠不休,继续听歌下载。
  • NoSleep – 合上盖子不休眠,可根据是否连接电源单独设置。
  • 窗口管理
    • ShiftIt – 窗口位置和大小管理软件。star 4 Open-Source Software Freeware hot tuijian 必备
    • Moom – 多任务多窗口的软件。
    • Slate – 窗口管理器,可用JavaScript写配置。Open-Source Software Freeware
    • Amethyst – 窗口管理器(自动保持窗口大小的窗口)。Open-Source Software Freeware
    • Spectacle – 简单的移动和调整大小的窗口,和可定制的键盘快捷键。
  • 密码管理
    • 1password – 跨平台帐号密码管理软件。hot tuijian 必备
    • LastPass – 密码管理器和安全的数字笔记。
    • KeePassX – 一个免费的,开源的,体积小的密码管理器。Open-Source Software Freeware
    • MacPass – 密码管理器。Open-Source Software Freeware
  • Finder

远程协助

  • TeamViewer – 远程协助及在线协作和会议功能的软件,商业软件个人使用免费。star 4Freeware tuijian 必备
  • tmux 终端登录远程主机的命令行工具。Open-Source Software

第三方应用市场APP

这里讨论盗版问题或者提供黑名单?,拒绝盗版从我做起,欢迎大家监督。

正版

这里只提供正版软件购买下载的应用商店。

  • HackStore – 一个类似于cydia的第三方Mac应用市场,平台拒绝盗版。star 4 tuijian Freeware
  • MacUpdate Desktop – 管理/更新/下载App,跟踪优惠信息。star 4
  • homebrew-cask – 体验通过命令行安装Mac软件的工具。

应用商店黑名单

第三方应用市场APP黑名单,存在盗版软件传播和下载,拒绝盗版从我做起,欢迎大家监督它们。

Mac软件下载网站

这里主要是推荐一些软件下载的网站,还有一些Mac OSX软件分享网站

正版/介绍

盗版软件下载网站黑名单

上面有大量的开源软件或者免费软件,拒绝盗版从我做起,下面被删除的网站提供大量破解软件下载,欢迎大家监督它们。

  • 玩转苹果:http://www.ifunmac.com
  • Mac软件下载站:http://www.pshezi.com
  • MacPeers:http://www.macpeers.com
  • Mac志:http://www.isofts.org
  • Mac软件分享:http://www.waitsun.com
  • AppKed:http://www.macbed.com
  • 苹果软件园:http://www.maczapp.com
  • Mac精品软件:http://xclient.info/
  • Macx:http://www.macx.cn/
  • 腾牛网:http://www.qqtn.com/mac/r_17_1.html

⬆ 返回顶部

工作经常用到的Mac软件整理

前言

这是我个人在工作中会用到的Mac软件,其中包括办公、开发、视频等软件,在这里全部整理到一起,方便以后使用。以下所有软件基本都是可以用的,不懂可以联系我,如果发现好用的软件也会整理在这篇文章中。

1.MarkDown编辑器

工作中我基本就用MacDown。

Mou: 下载地址 密码: qxe8

MacDown: 下载地址 密码: bg4m

Ulysses: 下载地址 密码: ywv9

2.MarkMan

Mac上设计师必备的软件,是一款方便高效的标注工具,极大节省设计师在设计稿上添加和修改标注的时间,让设计更有爱。 马克鳗使用起来也是非常简单,双击添加测量,单击改变横纵方向等等功能,基本都是一建完成。

下载地址 密码: ifku

3.SimPholders 2

iOS的辅助工具,能够在菜单栏里面快速的访问iphone simulator中的应用的文件夹。

下载地址 密码: i8jn

4.MEGAsyncSetup

说白了就是外国网盘,普通用户免费50G,可以存储不被和谐的重要文件。

下载地址 密码: d4he

5.Alfred 3.0和3.1

效率神器,无需鼠标就可以实现各种操作,包括出发各种文件、网络操作,其UI界面使用方便,而且不是通过命令来实现。

下载地址 密码: fvp7

6.iOS Images Extractor

提取App.car包里面的素材

下载地址 密码: keun

7. Lantern

上外国网站专用,目前这是老版本,想要新版本的可以上网搜索下载。

下载地址 密码: qbyr

8.Snip

是一款Mac OS下简单高效的截图工具,Snip是Mac平台的截屏应用,支持自动识别固定窗口、图形标记支持再次编辑、关联QQ邮箱截屏功能。

下载地址 密码: 3rzw

9.The Unarchiver

是Mac OS下用于压缩 / 解压缩的应用软件,支持相当多的压缩文档格式,使用相当便捷,还能极大避免压缩 / 解压缩过程中的乱码问题。

下载地址 密码: e29y

10. LICEcap

是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级、使用简单,录制过程中可以随意改变录屏范围。

下载地址 密码: k4vu

11.PicGIF

是一款能够帮你从图片或是视频中制作 GIF 动画图片的软件,操作十分简单,将要制作的图片或者视频按顺序排好,然后设置大小、速度、添加上文字就可以了,支持绝大部分的视频文件格式及图片格式。

下载地址 密码: 1tr9

12.欧路词典

我主要用这个划词在线翻译,其他功能不怎么用。

下载地址 密码: k99p

13. Airmail

这是一个Mac OS平台非常好用的轻量级的邮件客户端软件,采用全新的界面设计,堪称目前 Mac OS 平台上最好用Mac 邮件客户端之一。

下载地址 密码: xf1g

14.Axure RP

是一个产品经理必备的交互原型设计工具。能够高效率制作产品原型,快速绘制线框图、流程图、网站架构图、示意图、HTML 模版等,它可以辅助产品经理快速设计完整的产品原型,并结合批注、说明以及流程图、框架图等元素将产品完整地表述给各方面设计人员,如 UI、UE 等等,并在讨论中不断完善。

下载地址 密码: tvs9

15.BetterZip

是一款功能强大的压缩软件,不必解压就能快速地检查压缩文档。它能执行文件之间的合并并提供密码。使用它,用户可以更快捷的向压缩文件中添加和删除文件。

下载地址 密码: zdwi

16. Boom

是一款 Mac OS上的设备音量管理工具,可以让你的Mac设备音量更大。

下载地址 密码: 2kik

17. Charles

是在 Mac 下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。

下载地址 密码: 9434

18. Cornerstone

是Mac上最佳的SVN管理工具,3.0版本。

下载地址 密码: 7gnj

19.Downie for Mac

是一个超级易于使用的视频下载,支持YouTube,Vimeo 超过100个其他网站。它不会因为大量的选项而让用户困扰 – 它只是简单的做它的下载工作!

下载地址 密码: 3csh

20.Mindnode

凭借其简介的风格与人性化的操作,它成为不少朋友绘制思维脑图的好帮手,基本功能一应俱全,操作非常便利,可以与 Mac 电脑同步,还提供了无线局域网访问。

下载地址 密码: zqmi

21. Movist

是Mac平台下一个全格式播放器,基于QuickTime & FFmpeg,您可以选择由QuickTime 还是 FFmpeg来解码播放,支持.avi、.mkv、.wmv、flv、rmvb等格式,支持srt和smi外挂字幕文件、影片列表播放等。CPU占用率低. 是一个很棒的播放器。

下载地址 密码: t3yt

22.MPlayerX

全新基于FFmpeg 和 Mplayer开发的音频视频播放器.虽然界面一般但是功能强大 同时解码速度和运行速度很快. 支持99%的视频格式. 是播放软件的备选之一。

下载地址 密码: jvjv

23.OmniPlan

是 Mac OS X 平台的的一款非常强大的项目管理软件,它提供的功能包含了自定检视表、阶层式的纲要模式、成本追踪、里程碑、任务限制与相关性、资源分配、时程控制、Gantt 图表、违反事项显示、关键路径等等。

下载地址 密码: m32g

24.PaintCode

随着移动互联网的快速发展,越来越多的软件移居到了mobile device上,作为一名Coder或是Designer,必须学习新的移动平台开发技术才能跟上潮流,PaintCode是Apple Designer入门APP开发最合适的辅助工具之一,她可以把你绘制的矢量UI自动转化为适用于iOS/OS X的Objective-C、Swift代码,可以被视当年网页制作神器DW的今世转生版。

下载地址 密码: ba9j

25.PDF Expert

是一个 PDF 阅读器,打开速度都比同类快上不少,平滑流畅的滚动效果,标签页设计,也大大提高了工作效率。

下载地址 密码: gzhg

26.Quiver

是 Mac OS上一款适合程序猿使用的笔记本,支持混合书写文本、代码、Markdown标记等,方便程序员记录笔记和代码片段,并提供全文搜索功能,类似印象笔记的左中右三栏布局,是一款程序猿必备的利器。

下载地址 密码: vdij

27.Reveal

iOS开发UI调试,对于UI上的层的显示很清晰直观,可以很方便的用于UI的调试,用来学习UI的使用也是无上利器。

下载地址 密码: r6wp

28. RightFont

非常轻巧的字体管理工具,打开后将会看到一个非常简洁的字体列表窗口。通过搜索你可以找到你所安装过的字体进行预览,而且RightFont被设计成始终处于窗口最上方,所以它看上去很像设计软件中的一个字体窗口。用起来也毫无违和感。

下载地址 密码: bx9s

29.ScreenFlow

是Mac OS平台上一款优秀的屏幕录像软件。不但可以录制桌面操作还可以进行后期的剪辑工作,可以添加字幕, 增加视频效果与文字效果等功能,支持输出成 MOV,FLV 等格式。此软件获得WWDC 2008软件设计大奖。

下载地址 密码: ap2e

30. SecureCRT

是一款支持SSH(SSH1和SSH2)的终端仿真程序,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的远程系统的理想工具。

下载地址 密码: ir3p

31. Shim

是Mac平台上好用的的VPN客户端。

下载地址 密码: 77cn

32.Sip

如果你不喜欢系统自带的取色器,这一款非常不错的Mac屏幕取色软件,你只需要鼠标点一下即可取得屏幕当前位置的颜色值,并将数据自动存到剪切板,方便随时粘贴出来。支持 CSS、UIColor 等多种格式。

下载地址 密码: s2v3

33.Sketch 3

是最强大的移动应用矢量绘图设计工具,对于网页设计和移动设计者来说,比PhotoShop好用N倍!尤其是在移动应用设计方面,使用简单,学习曲线低,并且功能更加强大易用。

下载地址 密码: 7kn9

34.TextLab

是一款Mac上实用的代码格式转换工具,可以转换和验证JSON、HTML、XML、Base64等代码格式,简单易用,很实用的一款开发辅助工具!

下载地址 密码: smy3

35.Sublime Text

是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。

下载地址 密码: 7dc4

36. Tower

是一款非常强大的Git客户端,如果你使用git的过程中,感觉使用命令很困难,可以尝试使用Tower。

下载地址 密码: uian

37.Parallels Desktop

功能最强大灵活度最高的虚拟化方案,无需重启即可在同一台电脑上随时访问Windows和Mac两个系统上的众多应用程序。从仅限于PC的游戏到生产力软件,Parallels Desktop都能帮您实现便捷使用。

下载地址 密码: g1r8

如果上面链接失效下面是我的外国网盘下载:

下载地址 密钥: !SFyjU2QwxgWpCXJ6i5lO_Q

38. VMware Fusion (for Mac)

是在Mac 计算机上无缝运行 Windows 的最佳方式,可以使 Mac 系统和 PC 完美结合。通过提供直观形象的 Mac 界面和一系列强大的功能,VMware Fusion 可确保 Windows 应用程序在 Mac 计算机上实现无缝运行。

下载地址 密码: 2un9

39.MacAutoDMG

在Mac上给App一键制作DMG文件。

下载地址 密码: gmpk

40.Office for Mac

包含 Word、Excel、PowerPoint、Outlook 和 OneNote — 将熟悉的 Office 与你钟爱的独有 Mac 功能相结合,让你可以快速上手。

Office for Mac 2011 SP2简体中文大客户授权免激活可升级:

下载地址 密码: ajdc

Office for Mac 2011 14.4.3 中文版:

下载地址 密码: mrip

Office for Mac 2016:

下载地址 密码: f6ga

41.Final Cut Pro

是 Mac OS 平台上最好的视频剪辑软件,基于Cocoa编写,支持多路多核心处理器,支持GPU加速,支持后台渲染,可编辑从标清到4K的各种分辨率视频,ColorSync管理的色彩流水线则可保证全片色彩的一致性。

下载地址 密码: evm4

注:软件仅供学习使用,请勿用于商业用途,请在下载后24小时内删除。本文章不承担由于下载使用导致的任何法律责任。

Android攻城狮—全套必备神级工具(开发,插件,效率)

持续更新中
Github地址:https://github.com/xinghongfei
简书个人主页:http://www.jianshu.com/users/8ded1d219a79/latest_articles

开发


Android Studio

推荐理由:官方推出,高效,功能强大。

android studio

Genymotion

推荐理由:世界上最快的模拟器。需要注意的是在真机上出现的bug,在虚拟机上不一定出现,所以还是最终需要在真机上测试。

Genymotion

如何配置Genymotion地址:Android Studio中配置Genymotion

Sublime text

推荐理由:最美的代码阅读和编辑软件,功能强大。如果你想用它来编辑代码,安装AndroidImport插件,可以自动补全代码。我本人主要是用它来阅读源码。

Sublime text

设置Android studio 主题(下载jar)

推荐理由:统一风格,效率更高。为Android studio设置和Sublime text同样的风格,提高效率。

设置后效果

设置方法请看我另外一篇文章Android高级攻城狮-阅读源码的经验总结

Github Desktop

推荐理由:使用Github无需理由,只是很多人使用命令行来操作,感觉自己很高大上。但如果你还不了解命令行的使用,个人不赞同的你再去学,直接使用客户端程序Github Desktop就可以。既然它只是一个工具,能熟练使用就可以,没有必要花那么多精力去学,去记命令行。当多人协助,Github Desktop无法满足你的需求时,再考虑使用命令行。

Github Desktop.png

插件


Android studio 插件

Android ButterKnife Zelezny

推荐理由:注入框架,高效开发,省去很多重复,且没有技术含量的工作。

zelezny_animated.gif

Android Material Design Icon Generator

推荐理由:可以生成Material Design图标的插件。

capture.gif

GsonFormat

推荐理由:将Json自动转化成类,高效开发。

GsonFormat.gif

ECtranslation

推荐理由:可以在Android Studio IDE 内直接将英文翻译成中文。

ECTranslation.png

Android Parcelable code generator

推荐理由:高效开发神器,在类中插入实现了Parcelable接口的代码。

Android Parcelable code generator

Codota

推荐理由:最好的Android代码搜索工具,Codota 目前已经收录超过七百万精品代码实例。

Codota

JSONView

推荐理由:api接口一般都是默认返回json格式,想要查看具体返回哪些内容的时候通过Chrome查看全乱的,而且中文编码也不对,这个插件自动跟你排列出Json数据,不管返回数据有多复杂,你都可以很直观的了解他的数据格式,简直开发者必备。

JSONView

Chrome 插件

Octotree

推荐理由:直接在Chrome侧边栏向打开文件夹一样的查看别人的项目。

Octotree

Postman

推荐理由:开发者在调试网络必备,可以直接发送一个请求,自定义params、header,查看response状态等。

Postman.png

ChromeADB

推荐理由:可以控制你的手机,当然前提必须是你的adb已经连接上了,不管是通过USB也好还是通过Wifi也好,可以查看你的内存、硬盘使用情况,还自带一个Controller,可以远程控制你的手机。

ChromeADB.png

Vysor

推荐理由:这个插件的使用场景是这样的,假如你在做一个Android App的演讲,但是手机屏幕太小,这个时候安装了这个插件就可以让手机画面投影到电脑上来(在iOS系统实现这个很方便),而且延时几乎很小,这个插件一般用不到就把他禁用,一旦用到的时候会非常有用。

Vysor.png

HandShaker

推荐理由:安卓手机管理工具,安装了它,就可以在Mac上连接安卓手机读取上面的照片、文件了。手机需要打开 “USB 调试”。

handShaker.png

WiFi ADB

推荐理由:WiFi ADB 是一个通过无线网络来使电脑和手机连接,当我们做测试的时候,只需在手机上打开,只需在命令行输入 adb connect xxx.xxx.xxx.xxx:5555,电脑可以连接手机,就可以通过无线网络来调试开发的应用。

WIFI ADB

效率

CheatSheet

推荐理由:长按command键可以查看当前应用的快捷键,很方便。

cheatsheet.png

CHROME插件 Save to Pocket

推荐理由:看到好的文章点击就可以收藏,多设备同步。

Pocket.png

知识管理工具


说到知识管理,要想成为一个高级工程师,必须要建立自己的知识体系。知识体系的建立一个是知识的收集,另一个是知识的输出整理。以后我会写写我个人知识体系建立方法,如果你很期待别忘了给我点赞哦。

  • 知识收集:印象笔记
  • 知识输出:Macdown+有道云笔记+简书(for Mac)
    FarBox+简书(for Windows)

知识收集使用印象笔记本,将自己认为今后会用到的知识归类整理。到了中高级水平,就可以写一些技术文章,经验总结,去发博客。鼓励大家写博客,但是不要浪费太大的精力。既然写博客,首先学会Markdown语法,再选择一个博客平台。我个人推荐使用简书作为博客发表平台,界面美观,编辑简单,文章更新修改快捷,无需编辑审核,唯一的不足就是没有草稿箱,不过你可以把不想发表的文章,使用Macdown和有道云编辑存储在本地,windows用户使用ForBox。选择简书的另一个原因是,对于新作者更加公平,没有博客级别,只要你的文章写的好就可以获得很多关注。当然这里也有很多学问,如何写出好文章?如何提高点击量?我以后再给大家总结一下我的经验。使用Macdown编辑,特别爽,极简,美观。使用有道云笔记是为了支持多设备同步,云端储存,因为印象笔记不支持Markdown。

印象笔记

推荐理由:免费,功能强大,现在只可以2台设备同步。强大的知识收集,记录工具。

印象笔记

Macdown

推荐理由:编辑Markdown最好的工具,极简,美观,高效。

Macdown

FarBox

推荐理由:Windows上最优雅的Markdown编辑工具。

ForBox

有道云笔记

推荐理由:支持markdown,云端存储,多级目录,多设备同步。如果你想在电脑,手机,平板上同步,就使用它。

有道云笔记

XMind

推荐理由:思维导图工具,在易用性和灵活性方面引人瞩目。将脑中的源源不断涌现的想法完美的展现出来,其思维导图与其他导图图表等更是简单易用,吸引着人们的眼球。

xmind.png

简书

推荐理由:友好,美观,编辑修改简便。没有令人讨厌的广告,都不知道简书是怎么盈利的。现在国内某知名博客平台,越做越烂,广告、限制太多,用户体验极差。很多大牛都陆续离开,在Github或简书上开博客。我认为对于我们大多数普通人来说在简书是一个很好的选择。

简书

翻墙

Lantern

推荐理由:打开应用就可以Google了,完全免费。唯一的不足就是不稳定,偶尔连不上。

Lantern.png

更多

假设你是个勤奋的同学,你总有一天会强烈需要它们,上帝保佑他们吧。
ShadowsocksX – 一个快速的隧道代理,可以帮助你绕过防火墙。
云梯 – 在圈内小有名气的VPN服务提供商。
二师兄VPN – 提供无限流量、无限续期免费VPN账号。
GreenVPN – 注册激活送免费VPN加速流量。
风驰VPN – 无限流量、无限续期的免费VPN加速服务。
ShadowsocksX-NG – 一款ShadowsocksX客户端软件。
鱼摆摆 – 科学上网。
Tunnelblick – OpenVPN的免费软件。
GoAgentX – 科学上网。
Surge – 科学上网。
开眼 – Chrome插件免费的科学上网利器。
GTX加速器 – 每天签到领取500M流量

优质视频资源


慕客网

推荐理由:绝对良心企业,基础视频全部免费,视频质量非常高。如果你是个初学者,看这里的视频可以让你少走很多弯路。刚开始千万不要看书,进度太慢,还云里雾里的。刚开始学的时候我只知道极客网,免费的视频比较老,看的很不爽。每个月还收30元的会员费,为了学习嘛,我就买了一个月的会员,后来去了慕客网,就再也没买了。后来我发现一个不用花钱就能看视频的小秘密。在Ipad上下载极客学院的app,里面的所有视频都可以免费看啦。可以挑一些自己感兴趣的看看。

屏幕快照 2016-09-10 下午4.29.51.png

菜鸟窝

推荐理由:如果你基础的都会了,但是项目做不了,也没有方向,那我推荐你去这里买一套课程,NND就是有点贵。跟着老师把一个项目从头到尾走下来,这套流程打通了,一切就OK了,剩下的就是坚持了,知识的深化和拓展。都是大牛录的视频,最值推荐的是菜鸟商场这个项目,里面都是常用的技术,对将来面试也有很大的帮助。

屏幕快照 2016-09-10 下午4.58.42.png

其他


Licecap

推荐理由:最简单的屏幕录制工具,生成gif。这就是用它录制的。

looklook元素共享.gif

Dash

推荐理由:大到你无法想象的API离线文档软件

dash-s1-thumb@2x.png

矢量图库

推荐理由:开发过程中,需要用到的矢量图,这里应有尽有。

矢量图库

网友推荐


为知笔记 (文钦233推荐)

分析:多平台支撑,功能强大。个人认为和有道云类似,可以根据个人习惯使用。

为知笔记

Typora (meunicorn、MarcoWong共同推荐)

分析:非常棒的Markdown编辑工具。配合Pandoc使用,可以转化成PDF,word,HTML等多种格式,特别棒。

Typora.gif

iPic(for Mac) (谢三弟推荐)

分析:优秀的图床工具。使用这个软件上传图片会获得一个Markdown格式的地址,放在任何Markdown中都会自动加载。一次上传,处处使用。

iPic

Charles(for Mac) (风行网mydistiny推荐)

分析:Mac上最优秀的网络调试抓包工具,收费,需要下载找破解版。破解版下载地址http://xclient.info/s/charles.html

charles-macosx.png

Fiddler(for Windows) (风行网mydistiny推荐)

分析:Windows上最优秀的网络调试工具,免费。

decrypt-and-decompress-web-sessions.png

Quiver (风行网mydistiny推荐)

分析:专为程序员量身定做的笔记本。代码高亮,支持Markdown,你需要的他都有。下载地址(提取密码 vdij)

屏幕快照 2016-09-08 上午7.49.54.png

推荐阅读

Android高级攻城狮-阅读源码的经验总结
Android高级工程师回忆录:我是如何用一年时间从菜鸟成为高级工程师

如果你有用的很酸爽的软件,请在下面留言,我会持续更新…..

(未来还想把常用软件加进来。我们“开源社区”一起努力,发现互联网中最美好的东西,大家推荐一下自己用的顺手的软件吧,每个类型推荐一款(格式如下“浏览器Chrome最好用”或者“Genymotion是最好的模拟器”)


结尾:每当我看到你的点赞、评论、或打赏都会感觉特别激动和高兴,真希望正如你看我的文章一样。让我们共同努力,Be kind one another。

 

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

RESTful API 编写指南

基于一些不错的RESTful开发组件,可以快速的开发出不错的RESTful API,但如果不了解开发规范的、健壮的RESTful API的基本面,即便优秀的RESTful开发组件摆在面前,也无法很好的理解和使用。下文Gevin结合自己的实践经验,整理了从零开始开发RESTful API的核心要点,完善的RESTful开发组件基本都会包含全部或大部分要点,对于支持不够到位的要点,我们也可以自己写代码实现。

Outline

1. Request 和 Response

RESTful API的开发和使用,无非是客户端向服务器发请求(request),以及服务器对客户端请求的响应(response)。本真RESTful架构风格具有统一接口的特点,即,使用不同的http方法表达不同的行为:

  • GET(SELECT):从服务器取出资源(一项或多项)
  • POST(CREATE):在服务器新建一个资源
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)
  • DELETE(DELETE):从服务器删除资源

客户端会基于GET方法向服务器发送获取数据的请求,基于PUTPATCH方法向服务器发送更新数据的请求等,服务端在设计API时,也要按照相应规范来处理对应的请求,这点现在应该已经成为所有RESTful API的开发者的共识了,而且各web框架的request类和response类都很强大,具有合理的默认设置和灵活的定制性,Gevin在这里仅准备强调一下响应这些request时,常用的Response要包含的数据和状态码(status code),不完善的内容,欢迎大家补充:

  • GET, PUTPATCH请求成功时,要返回对应的数据,及状态码200,即SUCCESS
  • POST创建数据成功时,要返回创建的数据,及状态码201,即CREATED
  • DELETE删除数据成功时,不返回数据,状态码要返回204,即NO CONTENT
  • GET 不到数据时,状态码要返回404,即NOT FOUND
  • 任何时候,如果请求有问题,如校验请求数据时发现错误,要返回状态码 400,即BAD REQUEST
  • 当API 请求需要用户认证时,如果request中的认证信息不正确,要返回状态码 401,即NOT AUTHORIZED
  • 当API 请求需要验证用户权限时,如果当前用户无相应权限,要返回状态码 403,即FORBIDDEN

最后,关于Request 和 Response,不要忽略了http header中的Content-Type。以json为例,如果API要求客户端发送request时要传入json数据,则服务器端仅做好json数据的获取和解析即可,但如果服务端支持多种类型数据的传入,如同时支持json和form-data,则要根据客户端发送请求时header中的Content-Type,对不同类型是数据分别实现获取和解析;如果API响应客户端请求后,需要返回json数据,需要在header中添加Content-Type=application/json

2. Serialization 和 Deserialization

Serialization 和 Deserialization即序列化和反序列化。RESTful API以规范统一的格式作为数据的载体,常用的格式为jsonxml,以json格式为例,当客户端向服务器发请求时,或者服务器相应客户端的请求,向客户端返回数据时,都是传输json格式的文本,而在服务器内部,数据处理时基本不用json格式的字符串,而是native类型的数据,最典型的如类的实例,即对象(object),json仅为服务器和客户端通信时,在网络上传输的数据的格式,服务器和客户端内部,均存在将json转为native类型数据和将native类型数据转为json的需求,其中,将native类型数据转为json即为序列化,将json转为native类型数据即为反序列化。虽然某些开发语言,如Python,其原生数据类型listdict能轻易实现序列化和反序列化,但对于复杂的API,内部实现时总会以对象作为数据的载体,因此,确保序列化和反序列化方法的实现,是开发RESTful API最重要的一步准备工作

题外话,序列化和反序列化的便捷,造就了RESTful API跨平台的特点,使得REST取代RPC成为Web Service的主流

序列化和反序列化是RESTful API开发中的一项硬需求,所以几乎每一种常用的开发语言都会有一个或多个优秀的开源库,来实现序列化和反序列化,因此,我们在开发RESTful API时,没必要制造重复的轮子,选一个好用的库即可,如python中的marshmallow,如果基于Django开发,Django REST Framework中的serializer即可。

3. Validation

Validation即数据校验,是开发健壮RESTful API中另一个重要的一环。仍以json为例,当客户端向服务器发出post, putpatch请求时,通常会同时给服务器发送json格式的相关数据,服务器在做数据处理之前,先做数据校验,是最合理和安全的前后端交互。如果客户端发送的数据不正确或不合理,服务器端经过校验后直接向客户端返回400错误及相应的数据错误信息即可。常见的数据校验包括:

  • 数据类型校验,如字段类型如果是int,那么给字段赋字符串的值则报错
  • 数据格式校验,如邮箱或密码,其赋值必须满足相应的正则表达式,才是正确的输入数据
  • 数据逻辑校验,如数据包含出生日期和年龄两个字段,如果这两个字段的数据不一致,则数据校验失败

以上三种类型的校验,数据逻辑校验最为复杂,通常涉及到多个字段的配合,或者要结合用户和权限做相应的校验。Validation虽然是RESTful API 编写中的一个可选项,但它对API的安全、服务器的开销和交互的友好性而言,都具有重要意义,因此,Gevin建议,开发一套完善的RESTful API时,Validation的实现必不可少。

4. Authentication 和 Permission

Authentication指用户认证,Permission指权限机制,这两点是使RESTful API 强大、灵活和安全的基本保障。

常用的认证机制是Basic AuthOAuth,RESTful API 开发中,除非API非常简单,且没有潜在的安全性问题,否则,认证机制是必须实现的,并应用到API中去。Basic Auth非常简单,很多框架都集成了Basic Auth的实现,自己写一个也能很快搞定,OAuth目前已经成为企业级服务的标配,其相关的开源实现方案非常丰富更多)。

我在《RESTful 架构风格概述》中,对认证机制做了更加详细的描述,有兴趣的同学不妨阅读相关章节。

权限机制是对API请求更近一步的限制,只有通过认证的用户符合权限要求,才能访问API。权限机制的具体实现通常依赖于系统的业务逻辑和应用场景,generally speaking,常用的权限机制主要包含全局型的和对象型的,全局型的权限机制,主要指通过为用户赋予权限,或者为用户赋予角色或划分到用户组,然后为角色或用户组赋予权限的方式来实现权限控制,对象型的权限机制,主要指权限控制的颗粒度在object上,用户对某个具体对象的访问、修改、删除或其行为,要单独在该对象上为用户赋予相关权限来实现权限控制。

全局型的权限机制容易理解,实现也简单,有很多开源库可做备选方案,不少完善的web开发框架,也会集成相关的权限逻辑,object permission 相对难复杂一点,但也有很多典型的应用场景,如多人博客系统中,作者对自己文章的编辑权限即为object permission,其对应的开源库也有很多。

注: 我写过一篇《Django权限机制的实现》,Django 开发者可做延伸阅读。

开发一套完整的RESTful API,权限机制必须纳入考虑范围,虽然权限机制的具体实现依赖于业务,权限机制本身,是有典型的模式存在的,需要开发者掌握基本的权限机制实现方案,以便随时应用到API中去。

5. CORS

CORS即Cross-origin resource sharing,在RESTful API开发中,主要是为js服务的,解决javascript 调用 RESTful API时的跨域问题。

由于固有的安全机制,js的跨域请求时是无法被服务器成功响应的。现在前后端分离日益成为web开发主流方式的大趋势下,后台逐渐趋向指提供API服务,为各客户端提供数据及相关操作,而网站的开发全部交给前端搞定,网站和API服务很少部署在同一台服务器上并使用相同的端口,js的跨域请求时普遍存在的,开发RESTful API时,通常都要考虑到CORS功能的实现,以便js能正常使用API。

目前各主流web开发语言都有很多优秀的实现CORS的开源库,我们在开发RESTful API时,要注意CORS功能的实现,直接拿现有的轮子来用即可。

更多关于CORS的介绍,有兴趣的同学可以查看阮一峰老师的跨域资源共享 CORS 详解

6. URL Rules

RESTful API 是写给开发者来消费的,其命名和结构需要有意义。因此,在设计和编写URL时,要符合一些规范。Url rules 可以单独写一篇博客来详细阐述,本文只列出一些关键点。

6.1 Version your API

规范的API应该包含版本信息,在RESTful API中,最简单的包含版本的方法是将版本信息放到url中,如:

/api/v1/posts/
/api/v1/drafts/

/api/v2/posts/
/api/v2/drafts/

另一种优雅的做法是,使用HTTP header中的accept来传递版本信息,这也是GitHub API 采取的策略

6.2 Use nouns, not verbs

RESTful API 中的url是指向资源的,而不是描述行为的,因此设计API时,应使用名词而非动词来描述语义,否则会引起混淆和语义不清。即:

# Bad APIs
/api/getArticle/1/
/api/updateArticle/1/
/api/deleteArticle/1/

上面四个url都是指向同一个资源的,虽然一个资源允许多个url指向它,但不同的url应该表达不同的语义,上面的API可以优化为:

# Good APIs
/api/Article/1/

article 资源的获取、更新和删除分别通过 GET, PUTDELETE方法请求API即可。试想,如果url以动词来描述,用PUT方法请求 /api/deleteArticle/1/ 会感觉多么不舒服。

6.3 GET and HEAD should always be safe

RFC2616已经明确指出,GETHEAD方法必须始终是安全的。例如,有这样一个不规范的API:


# The following api is used to delete articles
# [GET]
/api/deleteArticle?id=1

试想,如果搜索引擎访问了上面url会如何?

6.4 Nested resources routing

如果要获取一个资源子集,采用 nested routing 是一个优雅的方式,如,列出所有文章中属于Gevin编写的文章:

# List Gevin's articles
/api/authors/gevin/articles/

获取资源子集的另一种方式是基于filter(见下面章节),这两种方式都符合规范,但语义不同:如果语义上将资源子集看作一个独立的资源集合,则使用 nested routing 感觉更恰当,如果资源子集的获取是出于过滤的目的,则使用filter更恰当。

至于编写RESTful API时到底应采用哪种方式,则仁者见仁,智者见智,语义上说的通即可。

6.5 Filter

对于资源集合,可以通过url参数对资源进行过滤,如:

# List Gevin's articles
/api/articles?author=gevin

分页就是一种最典型的资源过滤。

6.6 Pagination

对于资源集合,分页获取是一种比较合理的方式。如果基于开发框架(如Django REST Framework),直接使用开发框架中的分页机制即可,如果是自己实现分页机制,Gevin的策略是:

返回资源集合是,包含与分页有关的数据如下:

{
  "page": 1,            # 当前是第几页
  "pages": 3,           # 总共多少页
  "per_page": 10,       # 每页多少数据
  "has_next": true,     # 是否有下一页数据
  "has_prev": false,    # 是否有前一页数据
  "total": 27           # 总共多少数据
}

当想API请求资源集合时,可选的分页参数为:

参数 含义
page 当前是第几页,默认为1
per_page 每页多少条记录,默认为系统默认值

另外,系统内还设置一个per_page_max字段,用于标记系统允许的每页最大记录数,当per_page值大于 per_page_max 值时,每页记录条数为 per_page_max

6.7 Url design tricks

(1)Url是区分大小写的,这点经常被忽略,即:

  • /Posts
  • /posts

上面这两个url是不同的两个url,可以指向不同的资源

(2)Back forward Slash (/)

目前比较流行的API设计方案,通常建议url以/作为结尾,如果API GET请求中,url不以/结尾,则重定向到以/结尾的API上去(这点现在的web框架基本都支持),因为有没有 /,也是两个url,即:

  • /posts/
  • /posts

这也是两个不同的url,可以对应不同的行为和资源

(3)连接符 - 和 下划线 _

RESTful API 应具备良好的可读性,当url中某一个片段(segment)由多个单词组成时,建议使用 - 来隔断单词,而不是使用 _,即:

# Good
/api/featured-post/

# Bad
/api/featured_post/

这主要是因为,浏览器中超链接显示的默认效果是,文字并附带下划线,如果API以_隔断单词,二者会重叠,影响可读性。

总结

编写本文的初衷,是为了整理一套从零开始编写规范、安全的RESTful API的基本思路。本文介绍了开发RESTful API时,要考虑的基本内容,对于类似Flask这种天生支持RESTful风格的web框架,不依赖其他RESTful第三方库开发RESTful 服务时,可以从本文内容入手;不少强大的RESTful 库,虽然其相关接口基本涵盖了本文的全部或大部分内容,但本文的总结,相信对这些库的理解和使用也是有帮助的。

最后,关于如何开发RESTful API,欢迎大家与我交流~

跨域请求的几种实现方式

什么是跨域?

同源策略是由Netscape提出的著名安全策略,是浏览器最核心、基本的安全功能,它限制了一个源(origin)中加载文本或者脚本与来自其他源(origin)中资源的交互方式
,所谓的同源就是指协议、域名、端口相同。
当浏览器执行一个脚本时会检查是否同源,只有同源的脚本才会执行,如果不同源即为跨域

跨域的几种方式

在项目中可能会需要在一个域名下请求另外一个域名的资源,下面我们来探讨下跨域的几种实现方式

1、jsonp

最常见的一种跨域方式,其背后原理就是利用了script标签不受同源策略的限制,在页面中动态插入了script,script标签的src属性就是后端api接口的地址,并且以get的方式将前端回调处理函数名称告诉后端,后端在响应请求时会将回调返还,并且将数据以参数的形式传递回去。

前端:

//http://127.0.0.1:8888/jsonp.html
var script = document.createElement('script');
      script.src = 'http://127.0.0.1:2333/jsonpHandler?callback=_callback'
      document.body.appendChild(script);      //插入script标签
      //回调处理函数 _callback
      var _callback = function(obj){
          for(key in obj){
            console.log('key: ' + key +' value: ' + obj[key]);
          }
      }

后端:

//http://127.0.0.1:2333/jsonpHandler
app.get('/jsonpHandler', (req,res) => {
  let callback = req.query.callback;
  let obj = {
    type : 'jsonp',
    name : 'weapon-x'
  };
  res.writeHead(200, {"Content-Type": "text/javascript"});
  res.end(callback + '(' + JSON.stringify(obj) + ')');
})

在jsonp.html中打开控制台可以看到返回数据的输出:

jsonp.png

2、CORS

Cross-Origin Resource Sharing(跨域资源共享)是一种允许当前域(origin)的资源(比如html/js/web service)被其他域(origin)的脚本请求访问的机制。
当使用XMLHttpRequest发送请求时,浏览器如果发现违反了同源策略就会自动加上一个请求头:origin,后端在接受到请求后确定响应后会在Response Headers中加入一个属性:Access-Control-Allow-Origin,值就是发起请求的源地址(http://127.0.0.1:8888),浏览器得到响应会进行判断Access-Control-Allow-Origin的值是否和当前的地址相同,只有匹配成功后才进行响应处理。

现代浏览器中和移动端都支持CORS(除了opera mini),IE下需要8+

前端:

//http://127.0.0.1:8888/cors.html
var xhr = new XMLHttpRequest();
xhr.onload = function(data){
  var _data = JSON.parse(data.target.responseText)
  for(key in _data){
    console.log('key: ' + key +' value: ' + _data[key]);
  }
};
xhr.open('POST','http://127.0.0.1:2333/cors',true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.send();

后端:

//http://127.0.0.1:2333/cors
app.post('/cors',(req,res) => {
  if(req.headers.origin){
    res.writeHead(200,{
      "Content-Type": "text/html; charset=UTF-8",
      "Access-Control-Allow-Origin":'http://127.0.0.1:8888'
    });
    let people = {
      type : 'cors',
      name : 'weapon-x'
    }
    res.end(JSON.stringify(people));
  }
})

可以在开发者工具里面看到请求的详细信息,并且在控制台也可以看到返回的数据输出:

response header.png

cors console.png

3、服务器跨域

在前后端分离的项目中可以借助服务器实现跨域,具体做法是:前端向本地服务器发送请求,本地服务器代替前端再向api服务器接口发送请求进行服务器间通信,本地服务器其实就是个中转站的角色,再将响应的数据返回给前端,下面用node.js做一个示例

前端:

//http://127.0.0.1:8888/server
var xhr = new XMLHttpRequest();
    xhr.onload = function(data){
      var _data = JSON.parse(data.target.responseText)
      for(key in _data){
        console.log('key: ' + key +' value: ' + _data[key]);
      }
    };
    xhr.open('POST','http://127.0.0.1:8888/feXhr',true);  //向本地服务器发送请求   
    xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    xhr.send("url=http://127.0.0.1:2333/beXhr");    //以参数形式告知需要请求的后端接口

后端:

//http://127.0.0.1:8888/feXhr
app.post('/feXhr',(req,res) => {
  let url  = req.body.url;
  superagent.get(url)           //使用superagent想api接口发送请求
      .end(function (err,docs) {
          if(err){
              console.log(err);
              return
          }
          res.end(docs.res.text); //返回到前端
      })
})

//http://127.0.0.1:2333/beXhr
app.get('/beXhr',(req,res) => {
  let obj = {
    type : 'superagent',
    name : 'weapon-x'
  };
  res.writeHead(200, {"Content-Type": "text/javascript"});
  res.end(JSON.stringify(obj));     //响应
})

回到 http://127.0.0.1:8888/server 页面打开控制台可以看到数据输出:

console.png

4、postmessage跨域

在HTML5中新增了postMessage方法,postMessage可以实现跨文档消息传输(Cross Document Messaging),Internet Explorer 8, Firefox 3, Opera 9, Chrome 3和 Safari 4都支持postMessage。
该方法可以通过绑定window的message事件来监听发送跨文档消息传输内容。
使用postMessage实现跨域的话原理就类似于jsonp,动态插入iframe标签,再从iframe里面拿回数据
,私认为用作跨页面通信更加适合

总结

当然还有其他实现跨域的方式比如在ie8、9下XDR跨域方案,flash方案,以上是一些常用的跨域方案,都各有利弊,比如:jsonp只能发送get请求、cors会忽略cookie、服务器跨域需要另起服务器等等,大家可以根据自己项目需求选择适合的解决方案,如果对于跨域还有其他看法或者文中出现错误,欢迎大家留言:)

参考文献:

 

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