iOS开发月报#5|201811

栏目: IOS · 发布时间: 7年前

内容简介:11月27号,苹果AppStore下架包括拼多多、搜狗地图、讯飞阅读和悦跑圈在内的共718个App。据称下架原因是触发了AppStroe审核指南的2.5.2条例,即使用了热更新技术。去年6月份,苹果层因热更新下架数万款App。我们知道,解压后的图片是由无数像素数据组成。每个像素点通常包括红、绿、蓝和 alpha 数据,每个值都是 8 位(0–255),因此一个像素通常会占用 4 个字节(32 bit per pixel。少数专业的 app 可能会用更大的空间来表示色深,消耗的内存会相应线性增加)。下面我们

11月27号,苹果AppStore下架包括拼多多、搜狗地图、讯飞阅读和悦跑圈在内的共718个App。据称下架原因是触发了AppStroe审核指南的2.5.2条例,即使用了热更新技术。去年6月份,苹果层因热更新下架数万款App。

iOS开发月报#5|201811

Tips

图片渲染开销

我们知道,解压后的图片是由无数像素数据组成。每个像素点通常包括红、绿、蓝和 alpha 数据,每个值都是 8 位(0–255),因此一个像素通常会占用 4 个字节(32 bit per pixel。少数专业的 app 可能会用更大的空间来表示色深,消耗的内存会相应线性增加)。下面我们来计算一些通常的图片开销:

普通图片大小,如 500 * 600 * 32bpp = 1MB 跟 iPhone X 屏幕一样大的:1125 * 2436 * 32bpp = 10MB 即刻中允许最大的图片,总像素不超过1500w:15000000 * 32bpp = 57MB 有了大致的概念,以后看到一张图能简单预估,大概会吃掉多少内存。

关于iOS开发证书在钥匙串没有秘钥的问题

当前现象

iOS开发月报#5|201811

只需要将证书拖到登录,即可生成秘钥

iOS开发月报#5|201811

APP内切换语言

APP内切换语言有一种比较简单的实现方式,实现步骤是: 1、存储语言状态 2、刷新 KeyWindow.rootViewController 3、刷新 Bundle 4、切换语言对应的更新操作 实现过程:

//1、切换语言,AppleLanguages对应内容是数组,语言符合可以通过Bundle.main.localizations查看
//切换至繁体中文,存储状态
UserDefaults.standard.set(["zh-Hant"], forKey: "AppleLanguages")
//2、刷新keyWindow,createRootViewController为创建rootViewController的方法
UIApplication.shared.keyWindow?.rootViewController = Application.shared.createRootViewController()

//3、更换bundle
//在切换语言的时候,我们需要执行一下,Bundle的exchangeBundle方法
extension Bundle {
    static func getLocalizedBundle() -> Bundle {
        if let languages = UserDefaults.standard.object(forKey: "AppleLanguages") as? [String],
                let lan = languages.first,
                let path = Bundle.main.path(forResource: lan, ofType: "lproj"),
                let bundle = Bundle.init(path: path){
                return bundle
            } else {
                return Bundle.main
            }
    }
    static func exchangeBundle(){
        //替换Bundle.main为自定义的BundleLocal
        object_setClass(Bundle.main, BundleLocal.self)
    }
}

class BundleLocal: Bundle {
    override func localizedString(forKey key: String, value: String?, table tableName: String?) -> String {
        return Bundle.getLocalizedBundle().localizedString(forKey: key, value: value, table: tableName)
    }
}


//4、其他更新操作,如接口,UI界面
复制代码

测试内购时长

当我们测试内购时,需要考虑内购到期的情况。比如我测试购买了一个月的服务,那么购买到期的情况呢,不能傻傻地等一个月时间吧? 其实苹果给出了不同内购时长在Debug情况下对应的测试时间。

iOS开发月报#5|201811

AVPlayer进入前台自动播放

在我们不进行任何前后台设置的情况下,AVPlayer进入后台,会自动暂停播放。再次回到前台时,播放器会有一定概率自动恢复播放(多大概率未知,测试得出的结论)。

如果这个恢复播放不是我们需要的,或者我们需要避免这种不确定的情况发生,我们可以手动管理这个过程:

NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: self, queue: nil) { (notification) in
      self.player.pause()
}
        
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: self, queue: nil) { (notification) in
    //根据需要是否需要恢复播放
    if shouleRecoverPlayer {
        self.player.play()
    } else {
        self.player.pause()
    }
    
}
复制代码

iOS12.1关于tabbar的一个bug

触发条件:

  • 使用 UITabBarController + UINavigationController 组合
  • UITabBar 带半透明效果, isTranslucent 属性为 true
  • UIViewController 的 hidesBottomBarWhenPushed 属性为 true
  • 通过导航栏返回上一页时(导航栏返回按钮 or 屏幕左侧的滑动返回手势)

问题现象:

iOS开发月报#5|201811

经确认是iOS12.1上的一个bug。 解决方案:

//MARK: - fix ios12.1 tabbar bug
let tabbar = UITabBar.appearance()
tabbar.isTranslucent = false
复制代码

详细内容可以参考: 修复 iOS12.1 UITabBar 布局位移bug - ZHFDBK的博客 - CSDN博客 swift - UITabBar items jumping on back navigation on iOS 12.1 - Stack Overflow

推荐内容

面对越来越多的identifier,改如何优雅地处理? 文中讲了一些 UITableViewCell 、 UICollectionViewCell 、 segues 、 UIStoryboards 、 UIViewController 中关于identifiers的重构方法。

移动应用的末日将要来临? Medium科技板块最近比较火的一篇文章,分上下两篇,讲述移动应用的前景和趋势。

Realm学院

这是Realm建立的一个用于学习编程技术的网站,主要方式是视频,内容配有字幕,并且都全部整理成文章。涵盖范围有 Realm , Android , iOS , JavaScript , Architecture 等。

文章质量非常高!

ggtalk

由swiftgg团队推出的接地气、有价值的闲聊节目。在得到,喜马拉雅这种靠听获取信息的APP越来越受欢迎的时候,swiftgg也推出了适合我们 程序员 的音频节目。听那些大牛讨论关于swfit这四年,关于如何对待博客,无论从那个角度出发总能收货一些东西。

开发利器

KTVHTTPCache

应该是iOS端目前最好的流媒体缓存框架了。

Realm

Realm是一个开源的对象数据库管理系统,最初用于移动(Android/iOS),也可用于 Xamarin 或 React Native 等平台,等平台,包括桌面应用(Windows),并获得 Apache 许可。

对比FMDB,他的使用成本,维护成本都更低。

uTools

uTools是一个极简、插件化、跨平台的现代化桌面软件。通过自由选配丰富的插件,打造你得心应手的 工具 集合。 通过快捷键(默认alt+space)就可以快速呼出这个搜索框。它相当聪明,可以支持输入、拖拽、自动粘贴等作为输入源,相应的插件也早已准备就绪,统一的设计风格和操作方式,助你高效的得到正确的结果。 当你熟悉它后,能够为你节约大量时间,让你可以更加专注的改变世界。

对比Alfred,他的不同就在于免费,使用简单,更符合国人的习惯。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

Measure What Matters

Measure What Matters

John Doerr / Portfolio / 2018-4-24 / GBP 19.67

In the fall of 1999, John Doerr met with the founders of a start-up he’d just given $11.8 million, the biggest investment of his career. Larry Page and Sergey Brin had amazing technology, entrepreneur......一起来看看 《Measure What Matters》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具