iOS摸鱼周报,主要分享你们开发过程遇到的经验教训及学习内容。虽然说是周报,但当前内容的贡献途径还未稳定下来,若是后续的内容不足一期,可能会拖更到下一周再发。因此但愿你们能够多分享本身学到的开发小技巧和解bug经历。git
周报仓库在这里:github.com/zhangferry/… ,能够查看README了解贡献方式;另可关注公众号:iOS成长之路,后台点击进群交流,联系咱们。github
开发小技巧收录。shell
iOS里面常常打包的机器会产生不少xcarchive文件,该文件用于生成最终的ipa,它除了包含应用外还包含dsym文件,因此通常都比较大。若是构建次数不少,他们会很容易就填满磁盘空间,致使后续的构建任务失败。针对这种现象咱们能够写一个定时任务用于清除这类文件。编程
该过程分为两步:后端
一、编写清理脚本设计模式
这里也能够写别的你想定时执行的任务安全
#!/bin/sh
# 扫描文件路径
targePath=~/Library/Developer/Xcode/Archives
# 清楚文件特征,能够用正则语法
rule="*.xcarchive"
# 删除7天以前的文件
find ${targePath} -mtime +7 -name ${rule} -**exec** rm -rf {} \;
复制代码
二、将脚本添加到系统定时任务中ruby
添加定时任务须要用到cron工具,cron是一款类Unix的操做系统下的基于时间的任务管理系统。用户们能够经过cron在固定时间、日期、间隔下,运行按期任务(能够是命令和脚本)。咱们在mac系统也可使用cron。bash
须要注意的是因为在macOS Catalina下系统对 cron的权限进行了限制,咱们须要给该执行文件添加彻底磁盘访问权限才可使用。服务器
步骤是:
一、执行whereis cron
,查看cron所在目录,一般它在/usr/sbin/cron
下。
二、使用Finder 跳转到该目录
三、打开系统设置 > 安全与隐私 > 彻底磁盘访问权限,打开加锁。
四、将cron程序拖入到彻底磁盘访问权限右侧的程序目录。
而后将脚本设置为可执行文件:
$ chmod +x [corn_clean_file.sh](http://corn_clean_file.sh/)
复制代码
进入crontab编辑界面
$ crontab -e
复制代码
输入以下内容,其表示天天凌晨三点执行对应任务,保存并退出。
00 03 * * * /path/clean_script.sh
复制代码
苹果有项功能是家庭帐号,能够为子女设置独立的儿童帐号,用于实现使用时长管理、支付管理等功能。
在测试儿童帐号的使用场景时发现一个问题,若是登陆了不满13周岁的儿童帐号,会没法退出,即便家长端也是没法退出的。退出按钮置灰,提示“因为访问限制,没法退出登陆”。联系了苹果客服才知道须要关掉家长端对于儿童帐号的全部限制才能够退出帐号,由于设置儿童帐号时会有一个引导开启屏幕时长管理的设置,因此关掉它就能够正常退出了。
问题现象
在执行bundle exec
命令时遇到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/include/ruby-2.6.0/ruby/ruby.h:24:10: fatal error: 'ruby/config.h' file not found #include "ruby/config.h"
的错误。
执行环境以下:
OS 版本:macOS Catalina
Xcode 版本:12.3
ruby 版本:2.6.0 (系统内置)
是如何解决的?
在这里找到了问题讨论:github.com/CocoaPods/C…
能够经过rvm安装ruby2.7.2或者3.0.0版本,而后使用新安装的ruby版本便可。
简单回顾下rvm管理ruby版本的用法:
$ ruby --version #查看当前ruby版本
$ rvm list known #列出当前可用ruby版本
$ rvm install 2.7.2 #安装对应版本的ruby
$ rvm use 2.7.2 --defualt #设置当前使用版本,且设置为默认值
#若是想切回系统版本能够:
$ rvm use system --defualt
复制代码
bug引起的反思
无论任何bug均可以从报错的日志里找到一些蛛丝马迹。该错误描述为ruby/config.h
头文件找不到,该头文件所在的目录是系统自带的Ruby.frameowrk
框架,因此大几率能够推测是该系统版本自带的Ruby没有内置这个文件,能够推测是系统的问题。管理Ruby版本,推荐使用rvm,当安装了2.7.2版本以后,确实能够正常执行bundle命令了,说明确实是系统包的问题。
本期概念围绕几个操做系统开展,系统能帮助你们了解各个操做系统之间的关系。
GNU是一个自由的操做系统,名字是一个递归 GNU’s Not Unix!的缩写。
它出现的缘由是Unix被发明后,开始收费和商业闭源,Richard Matthew Stallman以为很不爽。因而发起了GNU计划:创造一个仿Unix并与之兼容的自由开源操做系统。
为此Stallman还建立了FSF(自由软件基金会)和GPL(GNU通用公共许可协议),在GNU项目里开发的软件都遵循GPL协议。
在打造操做系统的过程当中,GNU开发出了编辑器Emacs,编译器(GCC),shell等很牛叉的东西,但惟独操做系统内核Hurd由于种种缘由一直没法完成。
这时出现了Linux,它就是一个操做系统内核,不只开源还被普遍追捧。Linux和GNU像是天生一对,一个万事具有只缺内核,一个只专一作内核,因而一拍即合,不少Linux发行版开始接入GNU的组件,Linux也遵循了GPL协议。
因此Stallman主张Linux使用了不少GNU组件应该叫GNU/Linux,可是并无获得Linux设计的一致认同,因此该名称仍有争议。
但Hurd的开发并无所以结束,目前还在进行中。
早期 GCC 的全拼为 GNU C Compiler,即 GUN 计划诞生的 C 语言编译器,显然最初 GCC 的定位确实只用于编译 C 语言。但通过这些年不断的迭代,GCC 的功能获得了很大的扩展,它不只能够用来编译 C 语言程序,还能够处理 C++、Go、Objective -C 等多种编译语言编写的程序。与此同时,因为以前的 GNU C Compiler 已经没法完美诠释 GCC 的含义,因此其英文全称被从新定义为 GNU Compiler Collection,即 GNU 编译器套件。
GCC 编译器从而中止过改进。截止到今日(2020 年 5 月),GCC 已经从最初的 1.0 版本发展到了 10.1 版本,期间历经了上百个版本的迭代。做为一款最受欢迎的编译器,GCC 被移植到数以千计的硬件/软件平台上,几乎全部的 Linux 发行版也都默认安装有 GCC 编译器。
补充一句,早期OC项目都是经过GCC编译的,由于不知足于GCC的性能,Chris Lattner开发了Clang。
XNU是一个由苹果电脑开发用于macOS操做系统的操做系统内核。它是Darwin操做系统的一部分,跟随着Darwin一同做为自由及开放源代码软件被发布。它仍是iOS、tvOS和watchOS操做系统的内核。XNU是X is Not Unix的缩写。这一点跟GNU同样。
XNU最先是NeXT公司为了NeXTSTEP操做系统而发展的,在苹果电脑收购NeXT公司以后,XNU的Mach微内核被升级到Mach 3.0。
须要注意区分的概念是操做系统内核,操做系统,桌面操做系统。
Mach是一个微内核
XNU是一个混合操做系统内核,包含Mach
Darwin是以XNU为内核发布的开源操做系统
macOS是以Darwin为核心的桌面操做系统
Darwin地址:github.com/apple/darwi…
在此以前先说下BDS(Berkeley Software Distribution 伯克利软件套装),它是Unix的衍生系统,在1977至1995年由伯克利大学分校开发和发布,其是去除SyStem V 删除了AT&T专利代码的。
随着该系统的发展,还提出了新的许可协议:BSD License,它在软件使用上提供了最小限度的限制,它容许遵循该协议的软件被二次开发,且开发以后的版本能够闭源。
因此基于BSD发展出了不少类Unix系统,被称为BSD家族,其中最著名的当属FreeBSD。直到如今FreeBSD仍然在不少网站的服务器上运行着。
乔帮主在NextStep时开发了基于FreeBSD的后端Darwin,回归Apple就给带过去了,而这个就是MacOS的内核,以后的iOS,watchOS也都是基于Darwin构建的。
索尼用FreeBSD创造了PS3,PS4。
任天堂用FreeBSD创造了Nintendo Swiftch。
BSD的发展历史:
POSIX是Portable Operation System Interface的缩写,便可移植操做系统接口,它是由IEEEE为了在Unix上运行软件提出的一系列标准,X代表其对Unix API的传承。
类Unix系统像Linux、MacOS中均实现了对POSIX接口的兼容,其中咱们在多线程使用过程当中建立的pthread(前面的p即POSIX),就是基于POSIX里的线程标准设计的。
公众号:搜狐技术产品
综合性技术公众号,输出稳定,质量也不错。偏重运营一些,会有不少转载内容。
公众号:腾讯音乐技术团队
腾讯音乐开发团队公众号,更新不稳定,可能一两个月才会有一篇文章,但质量仍是不错的。
腾讯还有个号是腾讯技术工程
综合性技术公众号,更新较稳定。 另外有点奇怪的是,微信团队和QQ团队居然没有单独的技术公众号。微信团队以前有个博客:wereadteam.github.io/ ,但看了下2020年只发过一篇文章。
公众号:美团技术团队
综合性技术公众号,输出稳定,质量很高,原创文章数量已达358篇,都是团队内部人员写的,很是不错。
公众号:滴滴技术
综合性技术公众号,可是移动端内容真的不多。不过滴滴在开源社区的贡献仍是挺大的,DoraemonKit和chameleon都有很高的star数。
滴滴开源 DoraemonKit:一款像哆啦A梦般全能的App研发工具
公众号:即刻技术团队
综合技术公众号,移动端内容也很多。整理来看即刻作的仍是挺不错的。
还有不少科技公司在维护技术公众号,再也不过多展开了,你们有兴趣能够自行查找。
公司名 | 公众号名 | 说明 |
---|---|---|
小米 | 小米科技 | 无移动端内容 |
贝壳找房 | 贝壳产品技术 | 综合号,有移动端内容 |
快手 | 快手Ytech | 无移动端内容 |
360 | 360技术 | 综合号,有移动端内容 |
携程 | 携程技术 | 综合号,有移动端内容 |
一个很是有趣的讲解设计模式、SOLID原则、重构原则的网站。支持八种语言,有不少丰富的配图帮助咱们理解这些重要的编程概念。
推荐好用的开发工具。
推荐来源:zhangferry
下载地址:(不让放有购买项的连接,去这里查看吧 zhangferry.com/2021/01/24/…
软件状态:付费,$69.99
使用介绍
kaleidoscope中文翻译是万花筒,它是一款颜值很高,专业性很强的diff工具。不光能查看文本的不一样,还能识别图片和文件夹的不一样。咱们能够将它与 git 组合使用,使用它替换git的mergetool。
推荐来源:zhangferry
下载地址:(不让放有购买项的连接,去这里查看吧 zhangferry.com/2021/01/24/…
软件状态:付费,$49
使用介绍
在iOS开发过程当中的UI调试经常是让人痛苦的,由于不支持热更新,咱们稍微改动一点地方就须要编译整个项目从新运行,这无疑很浪费时间。而Sherlock就是用于解决这个问题的工具(仅支持模拟器),咱们能够实时修改各个控件的UI属性,并进行查看最终效果。