Xcode 11.4 之前必须使用第三方和真机来测试远程推送(APNS)。 但 Xcode 11.4 之后可以通过simctl命令在模拟器上进行测试。
使用命令行
Xcode 命令行工具允许从终端上使用模拟器:启动模拟器,触发通用链接等。 其中有一个命令就是将远程推送通知发送到 iOS 模拟器。
查看帮助
xcrun simctl push --help
Send a simulated push notification
Usage: simctl push <device> [<bundle ide...
iOS在某个页面强制横屏
最近在网上找了很多关于如何在某一个页面强制横屏的资料,但是还是没有实现预期的效果。最后经过不懈努力,最终还是找到了一个可以实现这一需求的方法。下面就将该方法整理出来,并附带demo下载。供以后在开发中方便使用。
方法实现部分
在AppDelegate.h中定义一个属性,如下:
/// 是否允许转向
@property(nonatomic,assign)BOOL allowRotation;
AppDelegate.m中实现横屏或竖屏的设置:
/...
这些 iOS 冷知识,你知道吗?
单例对象的内存管理
问题背景
在解决 App 防止抓包问题的时候,有一种常见的解决方案就是:检测是否存在代理服务器。其实现为:
+ (BOOL)getProxyStatus { CFDictionaryRef dicRef = CFNetworkCopySystemProxySettings(); const CFStringRef proxyCFstr = CFDictionaryGetValue(dicRef, (const void*)kCFNetworkProxiesHTTPProxy); CFRelease(dicRef); NSString *proxy = (__bridge ...
iOS线程数量监控工具
简单却强大的线程监控工具 KKThreadMonitor :当线程过多或瞬间创建大量子线程(线程爆炸),控制台就打印出所有的线程堆栈。便于分析造成子线程过多或线程爆炸的原因。
/******* 线程爆炸,控制台打印如下: ********/
🔥💥💥💥💥💥一秒钟开启 28 条线程!💥💥💥💥💥🔥
👇👇👇👇👇👇👇堆栈👇👇👇👇👇👇👇
2020-04-12 12:36:29.270755+0800 BaiduIphoneVideo[55732:6928996]
当前线程数量:43
callStack of thread: 921...
静态插桩的方式来实现Hook Method
通过fishhook拦截方法的局限性
我之前写了一个开源库TimeProfiler,监控所有的OC方法耗时。可以在开发App阶段,很方便的看到主线程所有OC方法的耗时。但是由于TimeProfiler是通过fishhook基于运行时hook,所以从原理上,它就有局限性:不能选择hook部分类的OC方法。这造成2个很难解决的问题:
不能选择hook一部分类的OC方法,全部hook会有性能问题,所以也不能线上使用。个别同学反映,TimeProfiler...
Swift之基本运算、数据类型、元组
引言
Swift编程语言,支持多编程范式和编译式,用来撰写基于macOS/OS X、iOS、watchOS和tvOS的软件。 苹果公司于2014年在苹果开发者年会(WWDC)发布了Swift编程语言。从设计上苹果公司让Swift与Objective-C共存在苹果公司的操作系统上苹果宣称Swift的特点是:快速、现代、安全、互动,而且明显优于Objective-C语言。Swift以LLVM编译,可以使用现有的Cocoa和Cocoa Touch框架。Xcode Playgrounds功能是S...
Combine-Foundation中的Publisher
为了方便使用,Foundation 为 iOS 开发中的几个常见操作提供了直接获取 Publisher 的方式。
URLSession PublisherTimer PublisherNotification PublisherKVO@Published
URLSession Publisher
这是 URLSession 新增的一种网络 API,通过这个 API 可以更加简单的完成网络请求数据转换等操作。
// 服务器返回的数据对应的Model
struct NewsModel: Codable {
var reason: String
var erro...
Swift之流程控制
if-else
if后面的条件可以省略小括号条件后面的大括号不可以省略
下面的代码是可以的
let score = 70
if score >= 80 {
print("优秀")
}else if score >= 60{
print("及格")
}else{
print("不及格")
}
if后面的条件只能是bool类型
例如下面是不可以的
if score {
print("aa")
}
while
先看如下代码
var num = 5
while num > 0 {
print("num is \(num)")
...
带动画的TabBar
带有动画效果的TabBar:TLAnimationTabBar
1. 特点
模仿https://github.com/Ramotion/animated-tab-bar项目的动画效果使用简单、耦合小无需自定义控件,适配系统自带的UITabBarItem支持自定义动画拓展
2. 效果图如下
3. pod支持
1. 版本
pod 'TLAnimationTabBar', '~> 1.0.0'
2. CocoaPods获取不到最新的TLAnimationTabBar版本问题
这可能是本地的CocoaPods仓库列表没有更新...
高仿系统图原生UIAlertController
支持
高仿系统原生样式效果,有Alert和Sheet两种模式支持自定义文本字体和颜色支持自定义view作为Action支持横屏支持深色模式不支持文本输入,但可以采用自定义view作为Action的方式实现只支持iOS 9.0及以上系统支持pod
用法
与UIAlertController的用法高度一致demo下载直接将demo中TLAlertLib文件夹中的文件导入到项目即可使用也可以pod'TLAlertLib', '~> 1.0.0'复制代码示例代码
TLAlert...