iOS开发月报#13|201907

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

Tips

Golbal queues的优先级

如果要在后台执行非UI相关的工作, 一般把这部分工作放在Global queue. Global queue是一种系统内共享的并行的队列。申请Global queue的方法很简单:

let userQueue = DispatchQueue.global(qos: .userInitiated)
复制代码

其中后面的.userInitiated参数代表队列的优先级。该优先级公有6中分类,有高到低为: userInteractive>default>unspecified>userInitiated>utility>background 通过该段代码验证:

for i in 1...3 {
    DispatchQueue.global(qos: DispatchQoS.QoSClass.default).async {
        NSLog("DispatchQoS.QoSClass.default, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.background).async {
        NSLog("DispatchQoS.QoSClass.background, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.unspecified).async {
        NSLog("DispatchQoS.QoSClass.unspecified, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.userInitiated).async {
        NSLog("DispatchQoS.QoSClass.userInitiated, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.userInteractive).async {
        NSLog("DispatchQoS.QoSClass.userInteractive, %d", i)
    }
    
    DispatchQueue.global(qos: DispatchQoS.QoSClass.utility).async {
        NSLog("DispatchQoS.QoSClass.utility, %d", i)
    }
}
复制代码

其中userInitiatedLIFO(后进先出),即如果有新插入的userInteractive级别的队列任务,为先执行新任务之后再执行之前该级别任务。其余优先级的队列任务均是FIFO(先进先出)

“No such module” when using @testable in Xcode Unit tests

因为测试工程和主工程分属不同Module,所以如果我们想在测试项目中调用主工程代码需要导入主工程:

@testable import moduleName
复制代码

这个时候如果报以上错误,会有以下可能: 1、targetName错误 这个可以去Target->Build Setting->Product Module Name确认。 2、主工程和测试模块支持版本号不一致 保证Build Setting->iOS Deployment Target中的版本号在主工程和测试工程中一致。

authenticating with the app store上传卡顿

如果往AppStoreConnect传包一直卡在这个步骤,可以试一下这种方式:

第一步: cd ~

第二步: mv .itmstransporter/ .old_itmstransporter/

第三步: "/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/itms/bin/iTMSTransporter"

等待执行完成。

订阅的freetrial没有标明截止时间被拒

如题,如果订阅功能含freetrial,一定要在freetrial按钮旁边标清楚试用的截止时间。

WakaTime

一款能够统计开发时间的网页端应用,支持众多IDE。

集成到IDE之后,注册账号然后会获取到一个Key,绑定该值。然后当我们愉快的开发时,一些开发的信息就会被记录下来。我们可以通过其网页端的dashboard查看我们开发的情况。
因为前几天升级XCode,需要重新装插件,所以最近几天的开发记录为空。

Lookin | 免费好用的iOS UI调试软件

出自QMUI团队,可能是小集的影响力已经很大了,这个软件首发之后竟发现已经有一众人开始关注这个东西了。可能因为UI调试这个操作是一个高频的行为,而Xcode目前又做的不够好,所以大家都期待有一个高效的UI调试工具。我也是下下来试了下,结合之前对RevealSherlock的使用,说下自己的体会吧,首先是优点: 1、免费 2、支持动态修改UI元素属性,例如位置,颜色,圆角这些 3、可以查看CALayer的信息 因为是刚发布没多久,还是有些需要改进的地方的 1、动态修改UI元素的信息,均是通过UIView,和CALayer的信息进行修改,无法实现像UILabel改文案,更新行数等操作 2、3D的渲染有时候会有bug出现,位置不正确,另外仅支持一个左右的旋转不支持上下 3、屏幕适配还不支持,不能修改屏幕 其实我对sherlock也都仅限于使用,中和频率不高的使用性和高昂的费用,我选择试用结束就放弃,虽然Lookin还存在一些不足,但是免费大于一切啊,希望可以做的更好,为更多开发者带来便利。

Github

R.swift

Android开发中引用资源可以通过R机制,所谓R机制就是在我们创建一个Android项目的时候,IDE会自动帮我们创建一个名为R的类型,它所在的文件名称也是叫做R.java,R类型中没有任何方法,包含的是代表不同类型资源的内部静态类,而这些内部静态类中,也只有静态的属性,每个属性代表一个资源,故我们要引用某个资源类型中的某个资源,可用R.资源类型.资源名来引用。下面就是代码中的实例:

//  从图片资源文件夹中加载名为"image_test"的图片以其创建位图
Bitmap aBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.image_test);
复制代码

相对来说iOS中的资源引用就麻烦很多,需要通过字符串引用,无法代码补全,资源更换无法自检查。解决iOS资源引用的这些问题而借鉴Android方案的R.Swift应运而生。 传统的方式:

let settingsIcon = UIImage(named: "settings-icon")
let gradientBackground = UIImage(named: "gradient.jpg")
复制代码

使用R.Swift

let settingsIcon = R.image.settingsIcon()
let gradientBackground = R.image.gradientJpg()
复制代码

不光图片,它还支持FontsResource filesColorsLocalized stringsStoryboardsSeguesNibsReuseable Cells。 我第一次见到这玩意的时候就一个感受:wocao,🐂🍺! 更多关于R.Swift的使用规则参照官网说明。

Swift-Books

github上的内容,可以分为两类,纯干货和干货的整理。这个库属于后者,是一个收录Swift&Object-C相关资料的仓库。收录的都是比较经典的学习资料,而且非常全! 建库已经两年了,但是star却不多,不知道是因为曝光度的问题,还是因为大家对设计版权问题的内容有些警惕。但不管怎样吧,我还是要推一推这个库。

open-source-ios-apps

开源的iOS应用列表。基本涵盖了iOS开发涉及的所有领域,通过完整的app去学习别人的开发技巧是一个相对直观的方式,面对这个大礼包,记得来看一看哈。

Chinese-Podcasts

中文博客的收录,包含科技,风投,生活,电影,设计等领域。 音频内容最大的优势就是便捷,你可以在走路,跑步,甚至休息的时候使用它。音频相比视频还有一个更大的好处是,它会给大脑预留更多的想象空间,听音频我们会思考的更多一些。 去年一直在听东吴同学会,最近一段时间则听ggtalk和硅谷早知道多一些。

文摘

1、

生存是一种即时策略游戏,所有的人都是这场游戏的玩家。财务自由了,就是游戏赢家。

--《科技爱好者周刊:66期》

2、

我以为别人尊重我,是因为我很优秀。慢慢的我明白了,别人尊重我,是别人很优秀;优秀的人更懂得尊重别人,对人恭敬其实是在庄严你自己。

3、

所谓成熟的人,就是精神上能够自给自足的人。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章