普通视图
iOS小技能:给debugserver添加task_for_pid权限,以便调试从AppStore中获取的App。
iOS小技能:__attribute__的应用
iOS小技能:消息发送的步骤(利用类型编码加快消息分发)
iOS小技能:动态地给类添加新的方法、实例变量、属性。
iOS动态库的注入原理
iOS逆向小技能:Cydia Substrate的组成部分、编写Tweak的步骤
iOS设备日志查看工具:syslog、socat
iOS逆向小技能:Theos的安装
iOS逆向小技能:使用substrate及runtime进行hook(定时检测app是否开启)
iOS小技能: 处理接口的暂无数据
iOS小技能:视图置顶(让一个View至于最顶端, 避免被其他子视图遮盖住)
iOS15适配本地通知功能
iOS接入开屏广告教程 : 以腾讯优量汇为案例
程序员必备小技能:mac文件备份和清理、常用工具的安装和配置
iOS入门常见问题汇总
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
引言
给新手看的入门基础篇
I、入门常见问题
1.1 请问iOS入门的话,xcode虚拟机就可以了?
使用Xcode的模拟器只是真机方面的功能无法调试而已,比如app的扫一扫功能涉及到的摄像机、录音亦或者接入三方SDK的时候也最好在真机调试测试。
1.2 请问包管理就是cocoa pods吧?
是的,另外Carthage也可以管理iOS依赖库。
Swift Package Manager 是 Apple 为了弥补当前 iOS 开发中缺少官方组件库管理工具的产物。相较于其他组件管理控件,他的定义文件更加轻松易懂,使用起来也很 Magic,只需将源码放入对应的文件夹内,Xcode 就会自动生成工程文件,并生成编译目标产物所需要的相关配置。同时,SPM 与 Cocoapods 相互兼容,可以在特性上提供互补。
github.com/apple/swift-package-manager 相关文档:developer.apple.com/documentati…
iOS第三方库管理规范,以Cocoapods为案例进行讲解
1.3 用于开发iOS的Mac最低配置需要什么样的?
![]()
![]()
8G内存有点小,最好16G。 不过这个性价比还不错
II 常用第三方库注意事项
2.1 极光消息推送
定期更新SDK,尤其系统大版本更新的时候。
![]()
2.2 toast 提示
设置toast显示时长 (针对SVProgressHUD第三方库)
[SVProgressHUD setMinimumDismissTimeInterval:0.4];// 设置最小显示时长
[SVProgressHUD setMaximumDismissTimeInterval:0.5];//
III、流程保证质量(规范+测试+设计)
kunnan.blog.csdn.net/article/det…
see also
9 月 14 日起 App Store Connect 已经开放 iOS 15 和 iPadOS 15 App 的提交,同时苹果宣布自 2022 年 4 月起,所有提交至 App Store 的 iOS 和 iPadOS app 都必须使用 Xcode 13 和 iOS 15 SDK 构建。 Xcode 13 需在 macOS 11.3 及以上版本运行:
更多资讯和服务请关注#小程序:iOS逆向 ,只为你呈现有价值的信息,专注于移动端技术研究领域。
iOS小技能:去掉TabBar的顶部黑线,并添加发光的阴影
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金
前言
技术实现关键点:通过layer.shadowOpacity和View.layer.shadowOffset 实现
I 去掉TabBar的顶部黑线,并添加发光的阴影
![]()
- setupshadowColor
- (void)setupshadowColor{
UIView * tmpView = self;
tmpView.layer.shadowColor = [UIColor blackColor].CGColor;//设置阴影的颜色
tmpView.layer.shadowOpacity = 0.08;//设置阴影的透明度
tmpView.layer.shadowOffset = CGSizeMake(kAdjustRatio(0), kAdjustRatio(0));//设置阴影的偏移量,阴影的大小,x往右和y往下是正
tmpView.layer.shadowRadius = kAdjustRatio(5);//设置阴影的圆角,//阴影的扩散范围,相当于blur radius,也是shadow的渐变距离,从外围开始,往里渐变shadowRadius距离
//去掉TabBar的顶部黑线
[self setBackgroundImage:[UIImage createImageWithColor:[UIColor clearColor]]];
[self setShadowImage:[UIImage createImageWithColor:[UIColor clearColor]]];
}
II 给视图底部添加发光的阴影
2.1 效果
![]()
![]()
2.2 代码实现
- QCTShadowView
@implementation QCTShadowView
- (instancetype)init
{
self = [super init];
if (self) {
[self setupshadowColor];
//
}
return self;
}
- (void)layoutSubviews{
[super layoutSubviews];
[self layoutIfNeeded];
[self.layer layoutIfNeeded];
[self setupshadowColor];
}
- (void) setupshadowColor{
UIView * tmpView = self;
tmpView.layer.shadowColor = [UIColor blackColor].CGColor;//设置阴影的颜色
tmpView.layer.shadowOpacity = 0.08;//设置阴影的透明度
tmpView.layer.shadowOffset = CGSizeMake(kAdjustRatio(0), kAdjustRatio(5));//设置阴影的偏移量,阴影的大小,x往右和y往下是正
tmpView.layer.shadowRadius = kAdjustRatio(5);//设置阴影的圆角,//阴影的扩散范围,相当于blur radius,也是shadow的渐变距离,从外围开始,往里渐变shadowRadius距离
}
III 其他小知识点
3.1 避免selectedViewController视图被TabBar挡住
- 错误约束
[_vcView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.offset(0);
}];
- 正确约束
[_vcView mas_makeConstraints:^(MASConstraintMaker *make) {
[tmp mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(weakSelf.view).offset(0);
make.right.equalTo(weakSelf.view).offset(- 0);
make.top.equalTo(weakSelf.view).offset(0);
make.bottom.equalTo(weakSelf.view).offset(-weakSelf.tabBarController.tabBar.bounds.size.height);//避免视图被TabBar挡住
}];
}];
3.2 iOS 13适配深色模式【设置UITabBarItem上title颜色】
// 适配iOS13导致的bug
if (@available(iOS 13.0, *)) {
// iOS 13以上
// self.tabBar.tintColor = ;
self.tabBar.unselectedItemTintColor = ktabNorTextColor;
self.tabBar.tintColor = ktabSelectedTextColor;
// self.tabBar.unselectedItemTintColor = ;
// UITabBarItem *item = [UITabBarItem appearance];
// item.titlePositionAdjustment = UIOffse/tMake(0, -2);
// [item setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} forState:UIControlStateNormal];
// [item setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12]} forState:UIControlStateSelected];
} else {
// // iOS 13以下
// UITabBarItem *item = [UITabBarItem appearance];
// item.titlePositionAdjustment = UIOffsetMake(0, -2);
// [item setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12], NSForegroundColorAttributeName:RGB_HEX(0x999999)} forState:UIControlStateNormal];
// [item setTitleTextAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12], NSForegroundColorAttributeName:RGB_HEX(0xfb5400)} forState:UIControlStateSelected];
//设置文字样式
NSMutableDictionary *textAttr = [NSMutableDictionary dictionary];
textAttr[NSForegroundColorAttributeName] = ktabNorTextColor;
[childVC.tabBarItem setTitleTextAttributes:textAttr forState:UIControlStateNormal];
//选择状态的文字颜色样式
NSMutableDictionary *selectedTextAttr = [NSMutableDictionary dictionary];
[selectedTextAttr setValue:ktabSelectedTextColor forKey:NSForegroundColorAttributeName];
[childVC.tabBarItem setTitleTextAttributes:selectedTextAttr forState:UIControlStateSelected];
}
see also
更多资讯和服务请关注#小程序:iOS逆向 ,只为你呈现有价值的信息,专注于移动端技术研究领域。
联系我请关注#公众号:iOS技能