这里记录过去一个月,我看到的值得分享的内容,包含但不限于iOS知识,每个月的最后一天发布。 欢迎推荐内容,可以前往zhangferry/iOSMonthlyReport提交issue。

iOS开发月报#10|201904_ios

Tips

关于分享中的一些问题

微博

  • 多媒体内容的缩略图,即thumbnialData的大小应小于32K。否则会导致分享失败
  • 微博分享的AppStore下载链接无法打开,这是因为微博屏蔽了指向AppStore的链接。一个可行的做法的将微博的下载链接增加一个引导页,提醒用户通过Safari打开。

微信

  • 多媒体缩略图不能超过64K。
  • 微信分享从6.7.2之后无法获知是否真的分享成功。这个是官方的调整,旨在减少“强制分享至不同群”等滥用分享能力。

facebook关于facebook分享的采坑可以查看这篇文章,基本也都是我遇到的问题。iOS Facebook 分享中的坑

Twitter相同内容分享两次之后再分享将失败。

SWIFT_VERSION '5.0' is unsupported, supported versions are: 3.0, 4.0, 4.2. (in target 'SwiftyJSON’)

这个问题是多人写作开发引起的,有一个同事将 ​SwiftJSON​​的版本升级至4.3.0,使其支持Swift5.0,但是Swift5.0跟Swift4.0+不兼容,导致出现上面的错误提示。修复方式,手动指定 ​SwiftJSON​版本,使其低于或者等于4.2.0。

  1. ​pod 'SwiftyJSON', '~> 4.2.0'​

Encountered an unknown error (Unable to find a specification for FrameworkA depended upon by FrameworkB

FrameworkA​​和 ​FrameworkB​​都是私有的 ​Cocoapods​​库,在制作 ​FrameworkA​时引用了 ​FrameworkB​​,如果执行 ​pod spec lint​就会出现如上的提示,到时lint无法通过。

这是因为lint在对引用库验证时,默认只验证官网的仓库,我们需要手动添加验证源才能通过,方法是:

  1. pod spec lint --sources=git@bitbucket.org:company/privateRepo.git,https:///CocoaPods/Specs --allow-warnings

Tabbar的初始化会立即调用viewDidLoad方法

正常当我们初始一个 ​UIViewController​​的时候,总是先执行 ​init​​方法,执行完之后才会调用 ​viewDidLoad​​方法。但是如果是 ​UITabbarViewController​​的初始化则不同,它会在执行 ​init​​方法的时候立即调用 ​viewDidLoad​。

来自Stack Overflow的解释:

  1. ​UITabBarControllers call loadView inside [super init] method, which causes the call to viewDidLoad. So the viewDidLoad method will be called before init has finished its job.​

  2. ​If you have some thing to setup in viewDidLoad you should perhaps do it inside init method after the call to [super init].​

AppleScript打印换行

当我使用AppleScript编辑一段脚本时,有一个需求是打印一段换行的文本,试了很多方案,包括 ​\n​​, ​\r​​, ​ASCII码​​等都不行,脚本执行时会忽略 ​\​​符合自动换行,分开执行输入内容。最后在不断尝试中找到了一种方案,直接敲出换行,如下,在变量 ​_input​后拼接一个换行符:

  1. ​tell note1 to append text "[*]" & _input & "​
  2. ​"​

由于第三方SDK使用了用于定位的功能,导致收到苹果的隐私警告邮件

iOS开发月报#10|201904_ios_02

后来定位的到的原因是 ​Facebook​​相关的几个库均使用了 ​CoreLocation​​,也就是说 ​Facebook​有偷偷使用用户地理位置权限的嫌疑。当然联系他们提供不带此功能的SDK也不显示,后来在react的issuse中也发现了对于此问题的讨论。#20879

解决方案如下,即增加对应的隐私条款选项:

iOS开发月报#10|201904_swift_03

违反Guideline2.3.1被打回

iOS开发月报#10|201904_swift_04

在一次小版本提交时,遇到了这个违反Guideline2.3.1被打回的问题,也是第一次遇到。原因描述是含有模糊代码,选择器错误或者误导审核的功能。实际排查中我们并未猜想到哪里可能导致这些问题。

后来通过邮件跟审核人员沟通,得到如下回复

iOS开发月报#10|201904_ios_05

iOS开发月报#10|201904_ios_06问题又好了?猜想可能是苹果审核的问题,他们也是会犯错误的。

后来在网上查过这种问题的处理情况,从资料时间来看,可以确定这个是最近一年才出现过的问题。处理方法是,首先是应该跟审核人员联系,让他们告知是哪里的问题;然后再根据情况进行修改。


来自老司机团队的文章,正在找工作的你肯定能从中有所收获。

再贴一个我司的招聘信息,有意愿的小伙伴赶紧简历投过来。

用户端智能的应用实践

bang写的关于应用功能优化的几个点,根据用户的特征推荐金额,根据用户使用习惯调整push的时间,有些方案不一定能够为我们所用但是解决问题的思路还是挺不错的。

谈Linux,Windows,和Mac

王垠的博客其实已经被删除了,这个是网络留存的快照文件。牛B的人总是能留下牛B的话,这是王垠关于Linux、Windows和Mac的看法。

Swift语言的设计错误

  1. ​let shoppingList = ["Eggs", "Milk"]​
  2. ​//这么写应不应该报错?​
  3. ​shoppingList[0] = "Salad"​

关于以上问题的讨论。当前Swift是不允许对 ​let​生命的数字修改内部元素的。在王垠看来这是一个低级的错误,具体为什么这么定义“不对”,可以看文章讨论。

音视频

Github

iOS-Source-Probe

iOS源码探求系列,是iOS相关源码的分析合集。

AutoInch

优雅的iPhone全尺寸/等比例精准适配工具,可以通过设置一个屏幕的尺寸值,而自动配置其他尺寸值。支持代码和xib两种方式。iOS开发月报#10|201904_ios_07

SwiftTips

作者总结的Swift使用中的一些小技巧,和喵神的《100 个 Swift 必备 tips》有异曲同工之妙。作为一名刚入门的Swifter,这两个资料都是非常推荐看一看的。

ZFPlayer

非常全面的一款iOS播放器,支持AVPlayer和ijkplayer两种播放模块。项目包含主流的视频播放场景,抖音、微博短视频等样式。如果是对视频功能有需求的小伙伴非常建议看一看。