iOS 应用通过 MFMailComposeViewController 或 mailto 来发送邮件

| Swift , iOS

在 iOS 开发中实现发送邮件的需求是比较简单的,本文主要提供两种方案: 通过 MessageUI 中提供的 【MFMailComposeViewController】 来在应用内显示邮件编辑页面; 通过 【mailto】 协议来启动 iOS 系统中的邮件应用; Ficow 建议您使用第一种方案,因为它可以让您很轻易地自定义邮件的内容,比如:邮件的主题、收件人列表、抄送收件人列表、正文文本内容、正文附件等等。

使用腾讯云容器镜像仓库代替 Docker 官方的 Docker Registry

| Docker

在国内访问由 Docker 官方提供的 Docker Registry 实在【太慢】,而且【免费的镜像仓库只有 1 个】!现在,Ficow 需要一个镜像仓库用来存储博客后台程序,还需要一个镜像仓库用来存储 App 后端接口程序。所以,Ficow 不得不寻找官方 Docker Registry 的替代品。 目前为止,我找到了两个比较优质的镜像仓库提供方: 【腾讯云镜像仓库】 【阿里云容器镜像服务】 由于 Ficow 的博客采用了【腾讯云服务器】,而且 Ficow 越来越【偏爱腾讯的产品】(阿里云伤透了我的心😨),所以这篇文章只介绍腾讯云镜像仓库。不过,方法应该是类似的,只是某些参数不同、平台提供的控制台页面不同罢了。

在 iOS App 中使用 AVSpeechSynthesizer 合成语音(普通话、英语、粤语等)

| Swift , iOS

Ficow 自己开发了一款 iOS 应用:小粤粤-学粤语,主要用来学习粤语。以前 Ficow 是将应用中需要播放的语音放到了阿里云上的对象存储空间。每次需要播放音频的时候,应用就会去阿里云的对象存储服务器下载音频文件。然而,这些音频文件的质量不是很好,而且音频本身对于调速功能的支持不友好。多次调研之后,Ficow 决定在应用内合成音频。 既然要合成音频,那么就要考虑用什么工具了!目前为止,Ficow 找到了这些比较好用的音频合成工具。快来了解一下吧~

Go Gin curl: (56) Recv failure: Connection reset by peer

| Go , Gin

使用 curl 请求 Go Gin 服务器 curl http://localhost:8000,响应结果为:curl: (56) Recv failure: Connection reset by peer。然后,使用 telnet 进行测试 telnet 127.0.0.1 8000,响应结果为: Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Connection closed by foreign host. 好吧,连接被主机关闭了。为什么呢?

零基础学 Swift —— Ficow 陪你入门 iOS 开发

| Swift , iOS

说实话,让 Ficow 教您零基础入门 Swift 还是非常有难度的!但是,这个事情不是非得让 Ficow 来做,而且其他人做得比 Ficow 更好! 依我看,做的最好的就是苹果啦!您没有看错,就是【苹果公司】!!!苹果为了普及 Swift,其付出的努力用呕心沥血来形容简直不为过! 最让我觉得赞叹的就是 【Swift Playgrounds】 这个应用,然后就是制作精良的【官方 Swift 文档】!

Ficow 陪你彻底搞懂 CALayer 里的 anchorPoint 和 position

| Swift , iOS , Core Animation

最近有同事在研究【Core Animation】的动画,这个动画需要将视图进行伸缩。具体的效果就像【把投影仪的投影幕布从上往下展开然后再从下往上收起】。这种情况就需要用【anchorPoint】将 layer 的锚点设置到顶部,然后动画就会以顶部为固定点来进行伸缩。 然而,这个工作进展地并不顺利。因为同事需要在刷新 UITableViewCell 的时候让 cell 内部的子视图进行动画,这时候动画和布局都出现了一些问题。于是,我意识到我们对于 anchorPoint 的理解是有问题的。所以,就开始进行深入的研究。于是,就有了这一篇文章。 Ficow 希望本文可以让您彻底理解【anchorPoint】和【position】,然后尽情地享受动画带给您的快乐~

macOS 使用 Charles 抓包 (HTTPS, 真机, iOS模拟器)

| 实用工具 , macOS

Charles 是 macOS 上常用的抓包工具,功能非常强大!本文主要讲解如何使用 Charles 捕获 HTTPS 请求的内容以及捕获局域网中的设备上的网络请求。 之前,有一些做开发和测试的朋友问过我,怎么用 Charles 抓 HTTPS 网络请求、怎么用 Charles 抓真机上的网络请求。然而,我没有找到一个可以非常详细地讲解这些内容的教程,所以我打算在别人的教程的基础上自己再写一篇更详细的文章。 现在,Ficow 就尽可能地将内容讲得详细一些,希望本文对大家有所帮助。 还没有安装 Charles 的朋友,可以到 官网下载 试用版,也可以到 xclient.info 去 下载。强烈建议大家支持正版~

零基础学编程和 iOS 开发—— Ficow 陪你入门 iOS 开发

| Swift , iOS

本文的目标读者:想零基础学编程的朋友;想零基础学 iOS 开发的朋友。Ficow 会跟您讲解以下内容:为什么要学编程?iOS 开发是什么?为什么要学 iOS 开发?怎么学 iOS 开发,有什么前提条件?以及 iOS 开发学习资料推荐。

为什么需要写测试代码?如何用 XCTest 写单元测试代码?

| Swift , 测试 , XCTest

每一位程序员都听说过【测试】这个名词,然而并不是每一位程序员都会写测试代码,更不是每一位程序员都会主动地去写测试代码。 为什么呢? 1. 写测试代码【很难】吗? 2. 写测试代码真的很【费时费力】吗? 3. 是否有必要】写测试代码? 4. 某些代码真的【可以测试吗】? 5. … 有谁可以回答这些灵魂拷问?

如何创建自定义的 Combine 操作符?

| Swift , iOS , Combine

Combine 中已经内置了很多操作符(发布者),比如:map, filter, zip, merge, combineLatest 等。但是,Combine 并没有提供某些在 Rx 中较为常用的操作符,比如:withLatestFrom, concatMap 等。如果您感兴趣,可以参考这份详细的对照表:RxSwift to Combine Cheatsheet。 既然 Combine 没有提供,那么我们就自己造轮子吧!本文将由浅入深地逐步打造自定义的操作符,希望能够带给您些许启发~