iOS开发月报#6|201812

大事件

这个月的大事件是高通与苹果之间的专利大战。高通分别在中国和德国对苹果公司提起专利诉讼,结果均胜。苹果将在中国禁售iPhoneX及以前的机型。在德国则是全面禁售。 加上新品手机的创新力度不够,致使苹果股票持续走低,四个月前,苹果仍是首个突破万亿美圆市值的上市公司,到如今股价已经下跌了 36%,市值只有 7160 亿美圆,几个月内市值损失接近 3000 亿美圆。 html

news.png

Tips

更换启动图不生效

现象:更换启动图,不生效,即便删除旧图,运行程序启动图仍然是以前的版本。 尝试了删除app重装,clean、重启Xcode,删除DriverData,还试过挪图片位置,更名字,均无效。最后尝试了重启手机->再安装才正常。ios

问题分析:这个是系统问题,为了加快程序启动的速度系统会把启动图作个缓存,以后每次启动是加载缓存启动图,因此才会出现修改不生效问题。但咱们也并不知道系统会何时更新启动图,这个就有点尴尬😓 stackoverflow上有关于这个问题的讨论: iOS Keeping old launch screen and app icon after updategit

有人说这个不影响线上版本,从上线以后的测试来看,大部分用户没有受到影响,但仍是出现了部分手机升级却未更换启动图的问题。 由于是系统层面控制,没有太好的解决方案,若是有人遇到这个状况,须要注意一下。程序员

赋值权限

在Mac 系统的终端上修改文件权限使用的是 Linux 中的 chmod 命令: r:可读,表示能够读取内容 w:可写,表示能够编辑内容,可是不能够删除文件 x: 可执行,表示能够执行文件。github

r:4 w:2 x:1shell

rwx=4+2+1=7编程

rwx.png

$ chmod 777 file
复制代码

这行命令的意思就是:文件全部者权限是7,同用户组的权限是7,其余非本地用户组的权限是7。同理能够出现这样的命令 chmod740.barshrcswift

再讲两个: chmod u=rwx, go=rx .barshrc 这个命令中u表示拥有者,g表示group中的用户,o表示others,和上面的想对应。注意go=rx,这里go是拼接起来的,表示g和o的用户有读和执行的权限。设计模式

$ chmod a+w .barshrc
复制代码

表示全部的用户(a表示all)增长写的权限。缓存

App图片瘦身

随着项目版本的不断迭代,会很容易积累愈来愈多的图片,对这些图片咱们有两个主要方面能够优化:

一、删除不用的图片

咱们须要借助一个工具LSUnusedResources 它能够检索项目中未使用的图片资源,咱们能够指定检索图片的路径,后缀进行过滤。 注意:没法区分png序列的引用。最好手动删除

二、图片压缩

能够经过ImageOptim,对图片进行无损压缩。使用时只需将要压缩的文件拖到程序中便可。 若是图片较多时,能够借助其命令行工具:

/Applications/ImageOptim.app/Contents/MacOS/ImageOptim $file_name
复制代码

对应的shell脚本:

# 处理文件名出现空格问题
MY_IFS=$IFS
IFS=$'\n'
for file_name in $(find "$1" -name "*.png" -type f); do
    echo $file_name
    /Applications/ImageOptim.app/Contents/MacOS/ImageOptim $file_name
done
IFS=$MY_IFS
复制代码

该工具还有一个Sketch插件:Plugin for Sketch ,能够在输出icon的时候直接进行压缩优化。

后台音频耗电问题

功能: 一段助眠音频能够后台播放,播放完成后若是返回app,会跳到对应的完成界面。

问题: 有用户反馈,听音频睡着了,早上醒来,电量掉了不少(40%)。

调研: 使用Xcode中 Debug Navigator栏的Energy Debug Gauge(需真机)测试。播放完成4分钟左右的后台耗电状态以下:

Energy Debug Gauge.png
分析可知虽然此时app中止了全部行为,可是生命周期仍处于 Background状态,耗电量也仍是存在的。暂时认为问题是客户端一直处于 Background模式,并未被 Suspend,致使一直被系统维护着,因此一直有耗电状况。

再一次查看苹果关于后台模式的文档:

When the UIBackgroundModes key contains the audio value, the system’s media frameworks automatically prevent the corresponding app from being suspended when it moves to the background. As long as it is playing audio or video content or recording audio content, the app continues to run in the background. However, if recording or playback stops, the system suspends the app.

可知,只要播放器未被销毁,就会一直占用后台模式!

解决方案: 在播放完成时销毁播放器。

检验: 再次观察播放音频完成一段时间以后的后台耗电状况:

image.png
此时app被挂起,耗电量基本为0,唤醒app,仍能正常工做。问题解决。

推荐阅读

尝试分模块整理推荐阅读的内容

iOS开发过程当中的设计模式

design pattern.jpeg

设计模式是一套被反复使用的、多数人知晓的、通过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石同样。项目中合理地运用设计模式能够完美地解决不少问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在咱们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被普遍应用的缘由。

以上摘自菜鸟教程

Swift中的策略模式 从一个小例子入手,讲解策略模式在swift中的使用。

Swift 中的设计模式 #1 工厂方法与单例方法

Swift 中的设计模式 #2 观察者模式与备忘录模式

Swift 中的设计模式 #3 外观模式与适配器模式

SwiftGG翻译组翻译的设计模式系列文章。

设计模式资料整理 应该是目前总结最全的适合iOS开发的设计模式资料汇总。

iOS逆向

apple-hook.png

iOS应用逆向工程,是指从目标应用的界面及功能表现入手,使用不一样的工具和理论知识去分析其实现原理,得出应用的代码结构、总体设计、功能实现、执行流程等,而后利用iOS的系统知识和语言特性,借鉴或修改原有实现流程的技术。

推荐两篇掘金上关于iOS逆向的文章:

TikTok(抖音国际版)逆向,全球的小姐姐们,我来啦!

逆向 Mac 应用 Bartender

这两篇都是经过具体实例入手,讲解逆向经常使用的工具和一些逆向的思路,很是适合新手。最好跟着介绍实际操做一番,第一次成功逆向一个项目以后,那种爽歪歪的感受,你懂的!

另外推荐一位逆向领域的牛人刘培庆(博客github),了解逆向的同窗大多应该都不陌生,iOS方面的逆向优先参照 MonkeyDev。 刘总今年出了新书《iOS应用逆向与安全》,很是适合对逆向有兴趣的同窗。

利用脚本提升工做效率

脚本语言(英语:Scripting language)是为了缩短传统的“编写、编译、连接、运行”(edit-compile-link-run)过程而建立的计算机编程语言。早期的脚本语言常常被称为批处理语言或工做控制语言。一个脚本一般是解释运行而非编译。脚本语言一般都有简单、易学、易用的特性,目的就是但愿能让程序员快速完成程序的编写工做

AppleScript入门:探索macOS自动化

文章选自少数派,讲述了:

  • 什么是 AppleScript?
  • 我使用 AppleScript 的情境
  • AppleScript 基础语法
  • AppleScript suite 以外的解法:模拟键鼠

很是清晰详细的AppleScript入门文章。 如何提升工做效率 - 自动化篇 文章选自掘金,串联Shell Script, Apple Script, Automator, Alfred & WorkFlows,告诉你若是灵活应用,达到利用脚本提升工做效率的目的。

我写了一个利用AppleScript和Alfred的WorkFlows在命令行打开指定路径的工具。

workflow.png

on run argv
  tell application "Finder"
	-- get selection path
	set pathFile to selection as text
	set pathFile to get POSIX path of pathFile
	-- fix space problem in the directory
	set pathFile to quoted form of pathFile
	tell application "Terminal"
		activate
		tell window 1
			do script "cd " & pathFile
		end tell
	end tell
end tell
end run
复制代码

使用方法是:点击选中文件夹,按下热键CMD + T

音视频

创业那点事:听莲叔和羊叔回忆峥嵘岁月 莲叔和羊叔是 SwiftGG 翻译组的真·大佬。成绩好,学历高,思惟缜密,能力很强。听过《升职加薪》那期节目的朋友应该都有印象。做为标准的技术人才,在创业大潮中天然也想试试身手,打拼一番。

和 Cee 聊聊如何拿 Google Offer 翻译组里真是人才济济啊,前几天 Cee 在群里说了个好消息,他拿到了美国 Google 的 Offer。群友们纷纷表示祝贺并进行了隆重的认哥仪式,将 SwiftGG 诞生以来第一个 GG(哥哥) 称号颁发给咱们公认的大哥 Cee。

以上两个音频来自于ggtalk,也是我最近上下班路上用来消遣的音频节目,墙裂推荐!

计算机科学速成课Carrie Anne Philbin主讲,Carrie Anne Philbin是一名计算机科学教师和做家。她是树莓派基金会的教育主管,也是学校(CAS)多样性和包容组的主席。她为青少年写了电脑书《树莓派历险记》。特地介绍是由于我感受这个课程由于这个主讲人的我的魅力而趣味十足😄。无论你是否是计算机专业的学生,看过以后应该都能有所收获。

Github

12306ForMac

之前要么开Windows虚拟机,要么使用官方Web,如今可使用12306ForMac订票助手啦。但愿对你们有所帮助!

LongestCocoa

SoWhatIsTheLongestMethodOrConstantNamesInCocoaFramework? (那么,Cocoa框架中最长的方法名或常量名是什么?)答案是:

  • outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shouldColorMatch:

  • kCMSampleBufferConduitNotificationParameter_UpcomingOutputPTSRangeMayOverlapQueuedOutputPTSRange

这个项目有必定的调侃意味,so what? 我选择swift🤣

相关文章
相关标签/搜索