iOS开发月报#10|201904

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


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

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

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

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

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

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

来自Stack Overflow的解释:

1
2
3
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.

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
2
tell note1 to append text "[*]" & _input & "
"

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


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

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

违反Guideline2.3.1被打回


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

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

问题又好了?猜想可能是苹果审核的问题,他们也是会犯错误的。

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

推荐阅读

作为面试官,哪类 iOS 开发更容易被你青睐?

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

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

用户端智能的应用实践

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

谈Linux,Windows,和Mac

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

Swift语言的设计错误

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

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

音视频

Github

iOS-Source-Probe

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

AutoInch

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

SwiftTips

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

ZFPlayer

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

Donate comment here