当时的应用场景主要是提供给用户主动切换不同的图标,更换成自己喜欢的图标风格。 iOS15之后,苹果支持将上线AppStore的包进行图标切换,目的是根据不同的图标判断用户转化。...因此在Xcode13之后,多ICON的设置方法由之前的手动配置,改成了更加方便的配置方式。 因为文章在iOS15之前就整理好了,新的方案出来后,肯定是新的方案的应用场景更广,也更方便开发者操作。...如果需要将ICON恢复到默认的,那么调用如下代码: [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler...图片的名称需要跟Info.plist里的CFBundleIconFiles配置的名称匹配;setAlternateIconName:的参数,需要跟Info.plist里的CFBundleAlternateIcons...,所以不知道这个切换图标的功能,是不是只支持iOS15版本系统上的AppStore才能看到切换的效果。
需求:换图标,用户无感 1.分析: 对于iOS,是开发了API可以换图标,但是有规定的,就是你要换的图标是要在APP里面内置的,也就是说你要换的APPicon,是提前放在APP 包里面的...,120*120的就行了,然后名字要和plist里面的对应,我这里用的是MayOneIcon;(注)这个名字在plist里面有俩个地方需要修改。 ...(3)在需要调用改图标的地方写入换icon的代码: #pragma mark ExchengeIconMethod /* 直接调用此方法,传入数据为iconName,也就是后台给你要换的图标...iconNameNew isEqualToString:@"DefaultIcon"]) { [[UIApplication sharedApplication]setAlternateIconName...name:%@",iconname); }]; }else{ [[UIApplication sharedApplication]setAlternateIconName
iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个: func setAlternateIconName(_ alternateIconName: String?...,这里选为 60 是因为对于 iPhone,60pt 的图片资源图标所需最高质量,更低分辨率的版本系统会自动压缩以展示。...如果你需要支持 iPad,建议这里使用 83.5pt(iPad Pro)的图片资源。...UIApplication.shared.alternateIconName { // CHANGE TO PRIMARY ICON UIApplication.shared.setAlternateIconName...\(name)") }else { // CHANGE TO ALTERNATE ICON UIApplication.shared.setAlternateIconName
Demo:更换图标demo,如有问题,请随时联系 需求:换图标,用户无感 1.分析: 对于iOS,是开发了API可以换图标,但是有规定的,就是你要换的图标是要在APP里面内置的,也就是说你要换的...,120 * 120的就行了,然后名字要和plist中里面的对应,我这里用的是MayOneIcon;(注)这个名字在plist中里面有俩个地方需要修改。 ...(3)在需要调用改图标的地方写入换图标的代码: /* 直接调用此方法,传入数据为iconName,也就是后台给你要换的图标 默认传的是@"DefaultIcon" */ - (void)chengeAppicon...[iconNameNew isEqualToString:@"DefaultIcon"]) { [[UIApplication sharedApplication]setAlternateIconName...icon name:%@",iconname); }]; }else{ [[UIApplication sharedApplication]setAlternateIconName
在iOS 10.3之后,苹果官方提供了相关的API来实现这个功能,主要是下面这几个方法: @interface UIApplication (UIAlternateApplicationIcons)...完成后的操作将会在任意的后台队列中异步执行; 如果需要更改UI,请确保在主队列中执行. - (void)setAlternateIconName:(nullable NSString *)alternateIconName...2,配置info.plist 在info.plist中右键 -> Add Row ,输入Icon… 会有提示,选择Icon files(iOS 5) 这时候,内容是这样的。...files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典,在这个字典里配置我们所有需要动态修改的icon:键为icon的名称,值为一个字典(这个字典里包含两个键...iconName isEqualToString:@""]) { iconName = nil; } [[UIApplication sharedApplication] setAlternateIconName
介绍 Xcode 26 内置了 Icon Composer 应用,能够创建.icon的设计文件,可以让开发者与设计师创建符合 “Liquid Glass” 风格的全平台(iOS、macOS、 watchOS...通过 Icon Composer 将设计好的.icon文件导出,然后导入 iOS 项目,在项目设置中选择该文件作为 App Icon,勾选Include all app icon assets,即可作为...App 的图标使用。...CaseIterable { case defaultIcon case redIcon case greenIcon case blueIcon // icon文件的名称...selectedIndex] if UIApplication.shared.supportsAlternateIcons { UIApplication.shared.setAlternateIconName
引 在iOS10.3中,苹果提供了一个比较有意思的功能。...但是这只能在iOS10.3之后实现。 效果如下: 可以看到在点击按钮操作后将App的图标更换掉了。 这个效果可以用在很多地方,做出更加需要时效性的App,比如日历、时间、天气、票据、活动等等。...API支持 首先这个功能只在iOS10.3以后才支持,所以在使用之前当然需要进行判断,我们当然也能够自己获取iOS的系统版本来决定,但是苹果给我们提供了直接的判断方法: // 如果为NO,表示当前进程不支持替换图标...- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void...supportsAlternateIcons]) {// 系统不支持换图标 return; } [[UIApplication sharedApplication] setAlternateIconName
不管是在iOS还是Android开发过程中,我们都经常性地需要存储一些状态和数据,比如用户对于App的相关设置、需要在本地缓存的数据等等。...根据要存储的的数据的大小、存储性质以及存储类型,在iOS和Android中哪个都有多种存储方式。...iOS程序默认情况下只能访问程序自己的目录,这个目录被称为“沙盒”,即沙盒其实就是一个App特有的一个文件夹,iOS下每个App都有自己特有的一个沙盒,其结构和目录特性都是一样的。...归档在iOS中是另一种形式的序列化,只要遵循了NSCoding协议的对象都可以通过它实现序列化。...关于SQLite的详细使用方法详见:iOS开发数据库篇—SQLite的应用
一.SQLite的使用 采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。还是一步步来吧!...第一步:导入头文件 需要添加SQLite相关的库以及头文件:在项目文件的Build Phases下,找到Link Binary Library(ies),添加libsqlite3.0.dylib(libsqlite3...使用前注意:如果不往数据库里面添加任何的表,这个数据库等于没有建立,不会在硬盘上产生任何文件,如果数据库已经存在,则会打开这个数据库。...所以要想正确从数据库中取出中文,需要用NSString来接收从数据库取出的字符串。...二.FMDB的使用 github地址是https://github.com/ccgus/fmdb // 继承 # pod 'FMDB/SQLCipher' 1.FMDB的创建: NSString
基本思路 在项目开发过程中,iOS系统自带的字体库可能不适应需求,需要导入其他的字体库。...下面是iOS项目增加新的字体的基本思路,基本上分为三步: 将字体库添加到项目中 在info.plist中添加所需新字体, 同时也在target-->Build Phases-->Copy Bundle...Resources中将info.plist中添加的字体添加上(确保能找到资源) 找到真实可用的fontName, 代码中使用fontWithName: size: ....配置有两步 第一是需要在info.plist中添加所需新字体,在 info.plist文件中添加一组键值对,Fonts provided by application,然后在下面的item对应的值填写就是我们添加的字体库文件的名称...,并且可以获取到我们添加的字体的名称。
2018年结束的时候,跟组内成员讨论新年的工作规划。其中探讨了一个比较有意思的话题:怎么紧跟iOS系统变化?...automaticallyAdjustsScrollViewInsets 从比较久远的iOS6升级到iOS7,设计风格从拟物化到平面化的过渡,引领了智能手机行业的一次UI变革。...,这是iOS系统从6到7因为坐标系改变做适配的最优雅的方法。...2013年,很多iOS同行开始讨论iOS开发应用那种方式效率高,是纯代码还是xib,亦或是storyBoard?在我看来,效率是经验积累后的产物,那种方式因人而异。...10887362-4975b4de764714cf.png 保持敏感性 以上是几个简单的示例,想强调的是iOS开发,需要优雅的跟紧iOS系统变化。
答案是肯定的,本文就主要来学习一下在iOS开发过程中如何获取到设备的各种状态信息。 在iOS中要获取设备的状态信息,主要涉及到三个类:UIDevice、NSbundle和NSlocale。...因此,在这种情况下,获取设备上是否安装了特定的App以及设备上安装了那些App则显得比较重要了。 那么如何判断我们的iOS设备上是否安装了特定的App呢?...有两种方案: 直接判断是否安装了特定的App 先获取到iOS设备上安装的所有App的清单,然后判断是否有特定的App 2.1 直接判断iOS设备是否安装了特定的app 这个方法其实是比较简单的,但是你需要知道该软件的...扩展iOS软件之间的调用:IOS的软件之间的调用(URL Schemes) 方法很简单,但是问题了,我们要如何获取到特定App的URL Schemes呢?...设备上安装的所有App清单 要获取iOS设备上安装所有App清单以及一些必要信息,实际上这一个是不允许的,因为涉及到个人隐私问题。
问题 在iOS 11以下系统,WKWebView出现 An instance of class WKWebView was deallocated while key value observers were...以上崩溃问题,经发现是没有removeObserver或者delegate没有设置为nil产生 解决方法 在dealloc中: - (void)dealloc{ //防止iOS11以下奔溃
传统跳转跟路由的简单对比 Native的跳转方式: iOS: TestViewController *vc = [[TestViewController alloc] init]; [self.navigationController...统一iOS,Android端的跳转逻辑。 App复杂后组件化后,组件间解耦。 统计埋点可以通过路由进行,因为路由是一个中间件,所以对路由进行AOP就行。...iOS端的路由库 读了一些github上的开源路由库的代码,实现的原理都是一样的,用一个集合类缓存路由跟处理闭包的对应关系,在app启动的时候,注册好支持的URL,当调用openURL的时候,根据给定的...)(模块内部传对象可以用,模块间的话不应该传对象,会造成耦合) HHRouter Routable 三种iOS路由注册处理方案 第一种:模块自己注册的路由自己处理 在注册url的时候,自己处理openUrl...如:web网页要打开一个原生页面,如果要iOS跟Android用同一个url的话,他们都得用我们的类名。耦合太大。 第三种:URL跟ViewController一一对应,同时统一处理跳转。
前言 最近iOS卡审严重,很多小伙伴都被拒了,也有很多小伙伴收到4.3礼包,这里就说说4.3吧!...规避4.3的重心,切断当前马甲包与以往马甲包的所有相似性关联; 相似关联 a. ipa包特征; b. 开发者帐号; c. 打包电脑; d....适当添加一些无用的资源; c.修改资源文件的HASH值; 翻新工程: a.修改工程名; b.修改工程目录结构; 2. 开发者帐号 两个马甲包不要关联到同一个开发者帐号的信息;比如打包时关联。 3....打包电脑 有条件的最好用不同的MAC来打包(每台MAC上最好打包马甲包不要超过5个) 4. 上传IP地址 上传马甲包时,IP不要跟其他马甲包的IP相同; 5....混淆相关 最重要的就是代码混淆了,混淆相关的可以移步看我的另一篇博客: 《Python-iOS代码混淆-马甲包混淆工具(Python脚本混淆iOS工程)》
3.支持的最低系统版本 苹果官方推荐始终只支持最新的2个大系统,就今天而言(2018.7)理论上我们应该只用支持iOS 10和iOS 11。...然而国内的大环境,使得我们通常还需要从iOS 7,或者iOS 8开始支持。 对于图片类App来说,有一条很重要的分水岭,那就是iOS 8.1。...iOS 8开启了Photos.framework的新时代,而iOS 7及以下开发者只能使用AssetsLibrary的API。...所以,推荐直接从iOS 9开始支持,如果不行的话,推荐至少从iOS 8.1开始支持(当然更合理的是从8.4开始支持,这样升级不到iOS 9的手机也有机会使用上)。...但是当base sdk到了iOS 10之后,我们发现之前能用的接口现在在iOS 8.1及以上系统,会出现成功回调不执行的问题。
如:晴天的时候图标显示一个晴天的图标,下雨天的时候图标显示一个下雨的图标。 效果图: ? 配置: ?...iconName isEqualToString:@""]) { iconName = nil; } [[UIApplication sharedApplication] setAlternateIconName...if (error) { NSLog(@"更换app图标发生错误了 : %@",error); } }]; } 注意:更换的icon...作者:梁森森 链接:https://www.jianshu.com/p/7b0695273a42 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
itemData = self.tableData[indexPath.row]; ZJFunc.unselectCell(tableView: tableView); } Cell自动高度 参见文章:iOS...设置tableViewCell的高度 代码中使用到的工具类 import UIKit class ZJFunc{ ///延迟执行方法 static func delay(delay...DispatchQueue.main.async { callBack(); } } } ///取消选中的tablecell...inset.bottom; let maximumOffset = size.height; //当currentOffset与maximumOffset的值相等时...也可以根据这两个值的差来让他做点其他的什么事情 let space = maximumOffset-currentOffset; return space; }
什么是Block(快速实现直接输入inlink) Block是一种特殊的数据类型 Block的作用 用于保存一段代码,可以在恰当的时间取出来调用 功能类似于函数和方法 Block的格式 返回值(^block...4、__main_block_func_0函数,其实对应的block的函数体,该函数接受了一个__cself参数,其实就是对应的block本身 5、__main_block_desc_0结构体,其中比较有价值的信息是...block的大小 6、main函数对block的创建,可以看出执行block就是调用一个以block自身为参数的函数,这个函数对应着block的执行体。...,传给外面一个在堆上的,autorelease的对象。...,在Block的内存存储在堆中时,如果在Block中引用了外面的对象,会对所引用的对象进行一次retain操作,为了不对所引用的对象进行一次retain操作,可以在对象的前面使用__block来修饰 -
iOS Mirror的使用 使用Mirror可以在不获取对象文件的情况下,知悉该对象所有的属性,不管是私有还是公开的。...self.pDic = ["hair": "black", "eyes": "black"] } } 随便定义三个类,Person -> Human -> Animal 这是他们的继承关系...而且还可以获取对象所继承的相关信息,看以下例子: let p = Person() var mir: Mirror = Mirror(reflecting: p) let baseType = Animal.self...superclassMirror selfMirrorType = superclassMirror.subjectType } else { break } } 循环查找对象的superclassMirror...直到为空,以下是打印信息:先打印Person类,再是继承的Human类信息,最后是基类Animal信息。