iOS开发杂货
文章平均质量分 68
做项目中常见的各种「疑难杂症」问题
wenbin·
勤能补拙
展开
-
「iOS」Dark Mode 实现方案
Dark Mode 在iOS 13出现,已经两年了,没有做适配的同学,可以参考本文章,实现切换方案⚠️注意:Dark Mode 从iOS13开始才有,所以需要展示的地方需要增加判断 if #available(iOS 13.0, *)????下面开始具体讲述方案步骤:一、实现要点概述通过 Notification 进行传参使用 UserDefault 或 MMKV 等存储当前选择的模式配置 颜色 的自动切换最终的切换操作都在 AppDelegate 中做处理二、实现步骤1. 配置原创 2021-03-05 11:13:03 · 449 阅读 · 2 评论 -
「iOS」UITableView.Style.insetGrouped样式 及 代码实现圆角cell 方案
网上很少搜到 insetGrouped 的样式和用法,结合自己的项目,大概阐述一下用法,最下方包含自己实现的源码升级iOS版本后,细心的小伙伴发现了自带的 备忘录 app的列表样式发生了更改,圆角cell算是现在比较新潮的设计,本文主要讲一下系统的实现方案和自己用代码的实现方案。一、系统实现方案1. insetGrouped用法很简单,用 xib 或代码方式初始化tableView时选择Style为 insetGrouped ,样式如下:⚠️注意点:必须选择 insetGrouped 样.原创 2021-03-04 17:32:46 · 3239 阅读 · 1 评论 -
「iOS」[!] Unable to find a pod with name, author, summary, or description matching
执行 pod setup,然后继续执行 pod search。如果还是搜索不到,执行 rm ~/Library/Caches/CocoaPods/search_index.json继续 pod search,等待一会完成后就能搜索到了原创 2020-11-18 11:27:53 · 458 阅读 · 0 评论 -
「iOS & Android」WebView获取图片、点击图片
获取思路:注入JS代码获取 ‘img’ 图片,拼接成字符串返回,然后分割字符串得到每个图片的url注入JS代码获取图片的点击事件iOSiOS使用WKWebView// MARK:- WKNavigationDelegatefunc webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { // 注入JS代码获取图片url和个数 self.webView.evaluateJavaScript(""".原创 2020-11-12 14:40:44 · 566 阅读 · 0 评论 -
「iOS」Xcode运行高版本iOS真机
在开发中,测试机升级了最新系统后,如果没有更新Xcode可能运行不起来,或还没有正式版Xcode更新,这时真机调试就执行不了,解决办法如下。Step 1 网上下载一个对应iOS版本真机调试文件解压后里面有两个文件,格式如下:Step 2点击Finder,cmd+shift+g输入路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/重启Xcode,连接测试机运行如果运行.原创 2020-11-09 11:58:30 · 1561 阅读 · 0 评论 -
「Swift」常用框架汇总 (持续更新~)
日期、日历相关DateScrollPickerHorizonCalendarCVCalendarJTAppleCalendarEmptyView占位图TBEmptyDataSetEmptyDataSet-SwiftHGPlaceholdersSkeletonView 正在加载时占位图动画Popover弹框选择McPickerPopoverEasyTipViewInstructions##导航栏管理和样式StylableNavigationBarTabBar管理和样式PTC原创 2020-11-05 16:30:40 · 3550 阅读 · 0 评论 -
「iOS」App Store Connect上误点了添加其他平台App后,删除办法
有时候手贱点了“添加macOS App”或是“Apple tvOS App”后,不知道怎么删除,也找不到删除的地方,以此贴记录一下。参考:App Store Connect Help需要在其他平台上有一个可以编辑的版本,比如状态是“准备提交”的,并创建鼠标悬停在误点的版本上,右侧会显示红色删除标志,点击删除即可...原创 2020-11-05 09:37:30 · 2176 阅读 · 0 评论 -
【Swift】WKWebView获取选中文本
使用WKWebView时选中文本弹出UIMenuController,在开发中会自定义menu,但是自定义的menu无法通过系统api获取到选中文本,并且WKWebView抛弃了UIWebView的 stringByEvaluatingJavaScriptFromString 方法,只用一行代码就能实现。解决方案在自定义menu的action实现里进行操作self.webView.evaluateJavaScript("window.getSelection().toString()") { (res原创 2020-07-22 09:42:29 · 744 阅读 · 0 评论 -
Github迁移Gitlab 失败 The repository for this project is empty
解决办法找到仓库的 Rename repository -> Path在后面随便加几个字母,改变 Path 路径,然后保存再改回原先的,回到 Project 首页刷新页面即可原创 2020-07-16 10:27:53 · 2489 阅读 · 2 评论 -
Xcode自动配置证书管理配置文件的Devices
项目使用自动配置时自动生成的配置文件在开发者网站上是看不见的,需要内测添加设备时不方便,本文有个简便的方法一分钟搞定!第一步获取到设备的udid,我这里用的是蒲公英平台第二步打开Apple Developer官网导入设备第三步打开Xcode -> target -> Signing&Capability -> Provision Profile -> 点击右边的感叹号在弹出页面的左上角拖动图标到桌面,复制文件的全名(包括后缀)打开 Finder,cmd+.原创 2020-07-10 11:03:44 · 1592 阅读 · 0 评论 -
Swift 查看项目代码行数
终端cd到工程目录下,如果想看除了Pod以外的代码行数,就再cd到自己的项目文件夹内,在终端输入:find . -name "*.swift" -or -name "*.xib" | xargs grep -v "^$" | wc -l这是除去空行的代码行数,如果想统计包括空行的把 grep -v "^$" | 删除同理,想统计OC代码就把name里的替换...原创 2020-07-02 11:30:29 · 448 阅读 · 0 评论 -
iOS 12 使用UISearchController点击搜索框崩溃 _searchController]: unrecognized selector sent to instance
在项目中使用了UISearchController,设置导航栏的titleView为searchBar,无意中发现在iOS11和iOS12点击搜索框会崩溃。崩溃原因报 unrecognized selector sent to instance 错的原因一般是对象被提前释放,但是我查了控制器所有的引用,没有发现提前释放,并且这报的错是searchController,所以我查了代码,发现一点可疑的地方:// 需要设置searchTextField的样式和监听方法的地方,iOS13以下使用KVO取到.原创 2020-07-02 09:27:25 · 803 阅读 · 0 评论 -
[Swift5] Swift 设置自定义预编译宏
在开发中经常用 target 区分正式、测试环境,用到自定义的预编译宏来判断,OC中可以在 target 的 Preprocessor Macros 里设置,Swift 则不同。Swift设置预编译宏本文以自定义 TEST 为例选中 target —> Build Settings —> 搜索 Swift Compiler - Custom Flags展开 Active Compilation Conditions 进行设置,只能这样写:TEST, 不能像OC一样设置TEST=.原创 2020-05-29 16:27:30 · 1326 阅读 · 0 评论 -
iOS 查看App是否包含idfa
苹果对idfa的管理很严格,有时没有用到idfa,但是一些sdk里用到了,上架如果没有选择会被拒cd 到工程目录下grep -r advertisingIdentifier . 就可以查看到用idfa的框架了温馨提示:如果用到友盟或其他sdk,可以耐心读一下接入文档,一般在下面会说明上架的注意事项...原创 2020-05-26 17:32:44 · 477 阅读 · 0 评论 -
[Swift5]自定义UITableViewCell左滑操作,适配iOS11 ~ iOS13
tableView左滑是开发中常见的操作方式,之前一直用 MGSwipeTableCell如果您有以下问题:iOS11下自定义按钮图片不显示iOS12下图片为白色,改不了颜色想用系统原生的方案解决问题那您就继续往下看iOS 11 新增了两个方法,个人觉得比原先的方法好用多了,不用手动控制 tableView 的 edit,当滑动时会自动开启// Swipe actions// These methods supersede -editActionsForRowAtIndexPath:.原创 2020-05-21 16:56:40 · 1202 阅读 · 0 评论 -
[Swfit 5] 设置UITableViewCell和Section的圆角和边距
此文是按照原文整理直接拷贝代码使用原文出处原文出处此方法针对没有头尾的情况,如果带有头尾请查看原作者另一篇文章带有头尾的section圆角开发中常用到cell两边带有边距和圆角,如果section里有多个cell,直接设置圆角会出问题,此文把两种情况总结为一个方法,在 cellForRow 或 willDisplayCell 方法里直接调用即可private func setCornerRadiusForSectionCell(cell: UITableViewCell, indexPath:.原创 2020-05-19 16:58:39 · 907 阅读 · 0 评论 -
[Swift5]UISearchController的searchBar导致导航栏高度变化
久闻UISearchController的bug奇多,没想多也被我碰上了发现问题把 UISearchController 的 searchBar 赋值到控制器A的导航栏的titleView上,在push到控制器B时view往下移动了11,在pop回来的时候控制器A的view又往上移动了11,查了文档,iOS11以后就改动了,但是官方也没说解决办法…网上的办法设置searchBar时使用navigationItem.titleView = searchBar ❌searchVC.search.原创 2020-05-14 13:48:55 · 875 阅读 · 0 评论 -
【已解决】Swift 隐藏tabBar后下方的button不可点击
项目中用到UISearchController,点击后需要显示SearchResultController,并且把tabBar隐藏,做完后发现即使tabBar隐藏了,原先位置下的button不可点击。网上的帖子都在复制粘贴,实在是效率太低,并且没什么作用,所以只能自己琢磨了。嫌麻烦的兄弟可以直接看下方的 解决办法前言网上隐藏tabBar的方法大致总结为:修改frame、移动位置、设置alpha和直接设置hidden,这些方法都可以隐藏,但是都不可点击下方的控件。发现问题而不可点击控件的原因大致.原创 2020-05-13 09:57:06 · 472 阅读 · 0 评论 -
CocoaPods版本升级
查看当前 Cocoapods版本pod --version检查当前 ruby 源,使用 gems.ruby-china.com 源gem source -lgem sources --remove 旧源gem sources -a 新源更新Cocoapodssudo gem install cocoapods 回车然后输入电脑密码再次检查当前Cocoapods版本...原创 2019-06-12 14:33:59 · 3859 阅读 · 0 评论 -
多人开发git提交流程
本文以master和dev举例,可视化git工具为sourceTree在 dev 开发完成后提交到本地,不推送到远程切换到 master 拉去远程分支代码show in finder 打开项目运行,没有问题后切换到 dev 分支将 master 分支合并到 dev ,运行代码没有冲突:运行step5有冲突两人操作同一份类文件冲突:定位到冲突文件,调整类文件代码...原创 2019-06-07 21:45:00 · 4111 阅读 · 2 评论 -
判断机型,支持最新设备(iPhone SE Gen2 和 iPad Pro 11 Gen2、iPad Pro 12.9 Gen4)
// 导入这个框架#import <sys/utsname.h>+ (NSString*)deviceModelName { struct utsname systemInfo; uname(&systemInfo); NSString *deviceModel = [NSString stringWithCString:systemInfo.ma...原创 2019-02-28 13:58:50 · 1692 阅读 · 0 评论 -
Xcode打包每次输入用户名和密码
步骤钥匙串 - 对应的证书秘钥双击 - 访问控制 - 选择第一个 - 输入密码完成原创 2019-02-26 17:24:24 · 1776 阅读 · 0 评论 -
Xcode警告☞The iOS deployment target is set to 7.0, but the range of supported deployment target versio
拿AFNetworking举例:如果出现 The iOS deployment target is set to 7.0, but the range of supported deployment target versions for this platform is 8.0 to 12.1. (in target 'AFNetworking')选中 Pods Project在 tar...原创 2019-02-26 17:24:03 · 853 阅读 · 0 评论 -
Swift5 访问限制关键字
访问控制关键字限制从高到低排列privatefileprivateinternalpublicopen简单总结:private 只能在当前文件的当前模块的作用域使用fileprivate 只能在当前文件内使用internal 是默认访问级别,所有没有单独列出的都是这个权限public 可以在外部文件访问,如果只需要访问就用它open 可以在外部文件访问,如果需要继承...原创 2019-06-13 15:03:40 · 645 阅读 · 0 评论 -
NSData NSString base64互相转换
// 普通string NSString *string = @"hello"; // 普通string -> 普通data NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // 普通data -> 普通string NSString *stri...原创 2019-07-11 16:40:38 · 1097 阅读 · 0 评论 -
AFN HTTP 412 解决办法
设置 manager 的请求头manager.requestSerializer setValue:@"any-value" forHTTPHeaderField:@"If-None-Match"];原创 2019-07-17 16:41:24 · 1678 阅读 · 0 评论 -
OC copy和mutableCopy
基本概念浅拷贝:地址拷贝,两个对象指向同一地址。深拷贝:对象拷贝,两个对象指向不同地址。copy & mutableCopycopymutableCopy不可变对象浅拷贝 不可变深拷贝 可变可变对象深拷贝 不可变深拷贝 可变总结:用copy后都是不可变的,用mutableCopy后都是可变的。用mutableCopy都是深拷贝。区别...原创 2019-08-06 16:31:09 · 259 阅读 · 0 评论 -
AFNetworking 重定向后导致401
使用AFN请求时设置basic认证,但是url被重定向,导致返回failure 401解决办法 // 此方法会在manager请求方法回调前调用 [manager setTaskWillPerformHTTPRedirectionBlock:^NSURLRequest * _Nullable(NSURLSession * _Nonnull session, NSURLSession...原创 2019-08-13 14:12:19 · 710 阅读 · 0 评论 -
Mac 添加ssh
[] 内容全部替换,包括[]本身创建ssh创建ssh公钥和私钥ssh-keygen -t rsa -C [your_mail]打开 id_rsa.pub 复制全部内容到 GitLab / Github测试是否连接成功ssh -T [gitlab地址]保存到keychain,达到永久保存的目的ssh-add -K ~/.ssh/id_rsasourceTree...原创 2019-09-12 17:53:04 · 688 阅读 · 0 评论 -
CocoaPods1.8.0 之后烦人的trunk
升级到目前1.9.1的版本后发现执行 pod install 的时候会自动添加trunk,烦人的是用终端不挂代理的情况下还连接不上服务器,更烦人的是还把master删了…所以只能恢复了本文前提是已经安装过CocoaPods的前提下删除 trunk// 查看repo listpod repo list// 如果有trunk源就删除pod repo remove trunk// ...原创 2020-04-28 14:54:28 · 2470 阅读 · 0 评论 -
MacOS Catalina安装CocoaPods时遇到rvm安装报错curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection
按照网上的安装方法,在执行第一步的时候果断报错 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connectioncurl -L get.rvm.io | bash -s stable source ~/.bashrcsource ~/.bash_profile本文涉及的Vim操作请参考 Vim 基础操作相似文章还有 M...原创 2020-04-29 16:23:44 · 3612 阅读 · 6 评论 -
iOS 推送报错BadCertificateEnvironment
报 BadCertificateEnvironment 错一般来说是环境和证书不匹配,但是如果环境和证书确认没问题还报错,解决如下:进钥匙串导出开发环境和发布环境的p12证书❗️❗️❗️❗️❗️开发环境从私钥导出,发布环境从外层导出(千万别从私钥导出,否则会一直报这个错)如图...原创 2019-04-10 16:27:52 · 973 阅读 · 1 评论 -
Xcode单元测试引入pod文件报错找不到
Project => Info => Configurations 将对应的 None 改一下原创 2019-02-26 17:23:45 · 1480 阅读 · 0 评论 -
Xcode单元测试报错 Failed to load test bundle from file
在 test 的 target 选择 build Settings => iOS Deployment Target => 选择对应的版本原创 2019-02-26 17:23:23 · 1002 阅读 · 0 评论 -
CocoaPods 私有库验证 --- 参数
pod lib lint 对spec文件做本地校验pod spec lint 对spec文件做远程校验--verbose 显示详细信息--use-libraries 如果依赖了静态库使用这个可以校验通过--allow-warnings 忽略警告--sources 如果是私有库包含私有库的情况,在验证时加上这个属性:--sou...原创 2019-02-26 17:22:57 · 356 阅读 · 0 评论 -
pod install 和 rvm install ruby-xxxx报错解决办法
pod install 报错configure: error: cannot run C compiled programs.If you meant to cross compile, use `--host'.See `config.log' for more detailsrvm install ruby-xxxx 报错Error running './configure --p...原创 2019-02-26 17:22:39 · 2333 阅读 · 0 评论 -
CocoaPods 命令的详细介绍
本文按照官网的叙述用大白话“翻译”出来,加上个人的经验和见解,可以更方便理解参考链接 CocoaPods官网之命令的详细介绍前言很多同学们分不清 pod install 和 pod update 命令的区别和用法,认为 pod install 只有第一次安装时和报错提示时使用,其实不是这样的。第三方库的版本有时候决定了我们开发的进度和心情,管理好这些版本可以使开发者更方便的使用。先从P...原创 2019-02-26 17:22:17 · 412 阅读 · 0 评论 -
制作Sqlcipher+SM4加密的framework包(OC)
项目中集成OpenSSL有时让人头疼,并且网上没有找到使用SM4加密数据库的案例,本文主要讲如何制作一个使用Sqlicipher+SM4国密算法的framework,本文编译部分按需求编译模拟器或真机版本第一步下载所需文件GMSSL:支持国密SM2/SM3/SM4算法的OpenSSL分支,由北京大学密码研究小组维护。GMSSL for Github下载后的压缩包解压,使用终端cd到文...原创 2019-02-26 17:21:37 · 897 阅读 · 0 评论 -
UISearchController 基本配置 2020年配置iOS13 以及 DarkMode
Apple提供的UISearchController提供了方便的使用,但是设置一些属性和UI样式时很头疼,本文总结了部分配置供大家参考。初始化// 如果设置 searchResultsController 为nil,则搜索结果和历史记录等信息在当前页面处理,推荐传入一个自定义的Controller,可以方便解耦let searchVC = WBSearchViewController(searchResultsController: mySearchResultController设置代理/.原创 2020-05-12 11:49:51 · 378 阅读 · 0 评论