iOS StatusBar 设置
iOS StatusBar 设置背景最近遇到设置StatusBar的问题,在NavigationController出来的界面设置StatusBar后一直不生效,印象中遇到过此类的问题,但是没有记录总结,还是花费了一点时间来找到原因,所以赶紧记录一下。 全局设置StatusBar的全局设置,需要首先在info.plist中设置View controller-based status bar appearance为NO,关掉按界面设置status bar 显示。 显示/隐藏方法一:在Target下的Deployment Info中不勾选/勾选Hide status bar 方法二:代码设置 1[UIApplication sharedApplication].statusBarHidden = YES; 设置方法一:在Target下的Deployment Info中设置Status Bar Style 方法二:代码设置 1[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightCon...
CocoaPod 私有库Spec依赖.a写法
CocoaPod 私有库Spec编辑注意事项CocoaPod 私有库Spec依赖.a写法 PodSpec详细描述如下, 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869Pod::Spec.new do |s| # 库名称 s.name = 'AudioRecorder' # 库的版本 s.version = '0.1.0' # 库摘要 s.summary = 'AudioRecorder提供iOS录音和录音播放功能' # 库描述 s.description = <<-DESC AudioRecorder提供iOS录音和录音播放功能 DESC # 远程...
正经分析iOS包大小优化
本文发表在《搜狐技术产品》公众号正经分析iOS包大小优化 iOS 包大小分析优化背景包大小优化是项目开发中不可避免会遇到的,网上关于包大小优化的文章很多,每篇文章说的都不尽相同,笔者曾经根据网上的文章做过包大小优化,但效果不尽人意;因此笔者想根据已有的文章、知识结合自己的理解、实践,做一份总结梳理,整理自己的包大小优化逻辑,不光要知道怎么做可以让包大小变化,还要知道为什么这么做能产生效果,所以就有了这篇文章。 分析想要优化安装包大小,首先需要弄清楚影响安装包大小的因素有哪些?之前笔者优化包大小直接闷着头就去瘦身,瘦来瘦去也没瘦出个名堂,而且还跟别人说不清楚自己做了什么,为什么这么做? 后来总结出来,做事之前要先思考、分析、最后再去做,要思考的是影响这件事的因素有哪些,一一列举出来,查漏补缺;然后针对这些因素进行分析,分析哪些因素是人为可控的,哪些因素是不能改变的,针对可控的部分要怎么优化,不可控的部分是否能避免,最好可以使用思维导图工具,一一记录;然后按照思维导图的整理出来的数据,按步骤去执行。 回过头来,针对安装包大小,首先分析影响安装包大小的因素,有:Xcode的设置、资...
iOS 工作日——过滤法定节假日日历提醒的实现
iOS 工作日——过滤法定节假日日历提醒的实现背景笔者五一之前补班的时候,闹钟没响,早上差点迟到了。笔者闹钟设置的是周一到周五,iPhone没有法定节假日的设置,也没有补休的设置。。。。笔者就想要解决这个痛点,梦想着,要是做出来了,发布到商店,从此走上人生巅峰,赢取白。。。。 YY过后,回过头来,接着调研,法定节假日闹钟的实现,笔者查找了很多资料,发现不用做梦了。首先iOS程序添加闹钟到时钟APP是不允许的。。。其次,iOS也没有法定节假日的判断。。。。所以不用YY了。但是笔者还真找到了iOS自定义闹钟 —— 中国法定节假日(升级版)这个,通过快捷指令自定义闹钟,可以实现过滤法定节假日。原理是:设置闹钟,然后通过快捷指令的自动执行,每天在闹钟时间前,通过订阅的别人维护的日历或者自己本地维护日历,判断当天是否是节假日,然后决定当天的闹钟是否打开、关闭。笔者不得不赞一个,真的优秀。 虽然笔者的发财梦夭折了。。。但笔者想到了另一个,虽然iOS程序不能直接添加闹钟,但是iOS程序可以直接添加日历提醒啊,比如预约直播或者预约抢购的,其实都是添加事件到日历中,然后在指定的时间,弹出来日历...
如何让iOS推送播放语音
本文发表在《搜狐技术产品》公众号如何让iOS推送播放语音 iOS 推送播放语音一:背景iOS 推送播放语音的需求调研,即收到推送后,播放推送的文案,文案的内容不固定。类似于支付宝和微信的收款到账语音。 只有iOS10以上才支持app被唤醒后在后台/锁屏状态下播放音频。所以iOS10以下的设备,在收到VoIP Push后只能在local push上设定一段固定铃声,这也是为什么iOS10以下只有“微信支付收款到账”。 iOS 12.0之前,后台播放音频未被限制,直接使用Notification Service Extension (iOS 10.0以后才支持) 功能使用系统提供的功能AVSpeechSynthesizer即可。 iOS 12.0之后,Notification Service Extension后台播放音频功能被限制,所以播放实现起来比较困难。 如果要上架商店,只有播放固定的音频,或固定拼接的音频,通过设置通知的声音或者发送本地通知设置本地通知的声音来播放 如果无需上架商店,可以手动打开Notification Service Extension的后台播放, ...
iOS mach-o文件分析多余的类和方法
mach-o文件分析多余的类和方法.md背景最近做包大小优化,在做项目代码优化时,其中有一个过程是分析Mach-O文件,看网上很多文章都说通过otool分析Mach-O,获取__objc_classrefs、__objc_classlist等,然后找出无用类和无用方法。 比如:无用类通过 otool 逆向Mach-O文件 __DATA.__objc_classlist段和__DATA.__objc_classrefs 段获取所有 OC 类和被引用的类,两个集合差值为无用类集合,结合 nm -nm 得到地址和对应类名符号化无用类类名来自干货!京东商城iOS App瘦身实践 又或者结合LinkMap文件的__TEXT.__text,通过正则表达式([+|-][.+\s(.+)]),我们可以提取当前可执行文件里所有objc类方法和实例方法(SelectorsAll)。再使用otool命令otool -v -s __DATA __objc_selrefs逆向__DATA.__objc_selrefs段,提取可执行文件里引用到的方法名(UsedSelectorsAll),我们可以大致分...
iOS APP添加桌面快捷方式
iOS APP添加桌面快捷方式背景新接到一个需求,需要APP内的某些功能,能够把入口添加到桌面,点击桌面到入口可以直接跳转APP对应界面(类似于下面这张示例图),于是就做了一番调研。 其实很多APP目前都已经实现了类似的功能,比如支付宝、云闪付等等,其中的每一个独立功能都可以单独添加到桌面,所以网上有很多实现的方法,笔者做的是整理和试错。 实现首先,添加到桌面功能的操作流程是: 客户端打开APP -> 进入到对应到APP功能模块 -> 点击添加快捷方式到桌面按钮 -> 跳转浏览器,并加载引导页面,点击分享,选择添加到主屏幕 -> 从主屏幕点击刚刚添加到快捷功能,跳转到APP的对应界面。 根据笔者了解到的信息,目前实现这种功能,大致可以分为两种实现方式: 方法一:H5提供网页,每个不同的功能提供不同的网页,服务端返回这些网页的URL,客户端配置打开URL Scheme,然后使用Safari直接加载URL,加载的网页中根据进入方式的不同,自动重定向打开APP的URL Scheme。 方法二:H5提供通用的网页,客户端替换通用网页中的内容,比如...
iOS 删除新创建项目中的SceneDelegate
iOS 删除新创建项目中的SceneDelegate背景Xcode 11之后新建工程,默认为有SceneDelegate,但是SceneDelegate是从iOS 13之后才有的,如果最低兼容版本到iOS 13以下,需要怎么做呢? 过程首先来看一下,SceneDelegate是什么,为什么会有SceneDelegate 官方说明: A UISceneSession object manages a unique runtime instance of your scene. When the user adds a new scene to your app, or when you request one programmatically, the system creates a session object to track that scene. The session contains a unique identifier and the configuration details of the scene. UIKit maintains the sessio...
iOS 自动打包
iOS 自动打包使用FastLane打包安装 fastlane 通过HomeBrew安装 brew install fastlane 通过Bundler安装 安装 bundler 然后在项目根目录下创建./Gemfile文件,编辑内容 1234// 安装 bundler$ gem install bundler 12345//然后在项目根目录下创建./Gemfile文件,编辑内容source "https://rubygems.org"gem "fastlane" 编辑Gemfile文件: 123456source "https://rubygems.org"gem "fastlane", "2.180.1"# 如果使用Cocoapods,需要添加下面这行gem "cocoapods" 通过ruby gems安装 1sudo gem install fastlane fastlane安装成功后,安装两个插件,用于版本号管理和打包成功...
RN布局
RN布局背景今年以来,公司新来的总监力推ReactNative,目标是做大前端,H5选用React,客户端用ReactNative,所以我要再“复习”一下网页布局。顺便把内容记录到自己的博客中,用宝儿姐的话来说:“机智的一bi”。 内容Flex布局:Flex是Flexible Box的缩写。设为Flex布局之后,子元素的float、clear、和verti-align属性将失效。 容器属性: 经常设置在容器上的属性有: 123456flexDirection // 主轴的排列方向flexWrap // 沿主轴排不下的时候,如何换行justifyContent // 项目在主轴上的排列方式alignItems // 项目在交叉轴上的排列方式alignContent // 多根轴线的对齐方式。如果只有一根轴线,该属性不起作用alignSelf // 允许单个项目有与其他项目不一样的对齐方式,可覆盖alignItems属性 每个属性的可设置的值如下: 123456flexDirection: 'colu...