
xcode
文章平均质量分 68
Poison老师
写了十多年代码,也创业了多次,从底层到应用层
展开
-
xcode14安装swift package设置github账户token
登录github点击上面菜单自己的头像,settings->Developer settings->Personal access tokens->Tokens (classic)->Generate new token (classic)打开xcode点击左上角xcode ->Settings->左下角的+加号-> GitHub->Continue->填写github账号到Account中.复制刚才的token到token中.日期选择永久No expiration。Note名字填写xcode。原创 2023-03-08 13:42:49 · 1640 阅读 · 2 评论 -
pod init错误RuntimeError - [Xcodeproj] Unknown object version
升级xcode以后,经常出现安装第三方pod init错误. 错误原因是 xcode版本太高,cocoapods 版本过低原创 2023-02-06 15:47:12 · 1176 阅读 · 0 评论 -
Mac升级以后python3出现错误重新配置的总结
文章目录找不到python重新安装安装xcode命令行工具python print语法错误修改import SocketServer错误找不到python重新安装command not found: python这个需要重新安装python执行命令:brew install python安装xcode命令行工具升级xcode以后,可能会提示重新安装命令行工具按照提示输入命令xcode-select --install安装就行xcode-select --installpython p原创 2022-04-20 15:31:18 · 1836 阅读 · 0 评论 -
ios手动代码混淆函数和变量名基本原理和注意事项教程(含demo)
文章目录混淆函数名原理代码例子没混淆的函数名注意事项替换变量名时要把set方法替换自定义的init开头方法代码混淆会会报错,不能混淆系统方法和类名不能混淆xib和storyboard中的变量和方法名不能混淆class-dump导出混淆后的头文件,验证函数和变量已经被混淆demo下载地址混淆函数名原理代码混淆替换函数名的主要原理是用宏定义#define来替换代码里的函数名或者变量民代码例子没混淆的函数名ViewController.h文件#import <UIKit/UIKit.h>@原创 2022-04-09 17:48:24 · 1915 阅读 · 0 评论 -
mac系统使用cmake和ninja快速安装llvm
llvm官网下载地址:git clone https://git.llvm.org/git/llvm.git/原创 2022-04-06 14:30:39 · 5263 阅读 · 0 评论 -
arm64汇编adrp指令作用和使用举例
文章目录adrp作用举例1举例2adrp作用adrp 寄存器,立即数,作用是把pc寄存器跟立即数按照一定规则计算后赋值给寄存器.举例1adrp x8,1adrp指令是给寄存器赋值.赋值的规则是:先把pc寄存器里的数值先按照16进制表示,后3位清零,再把adrp 右边的立即数,左移3位,也就是在末尾+3个0 .然后让2个结果相加.例如上面的例子pc = 0x0000000104ff6754然后把pc后3位清零 得到0x0000000104ff6000adrp x8,1 右边的立即数原创 2022-03-11 10:13:35 · 20219 阅读 · 0 评论 -
arm汇编lr pc b bl ret指令函数调用和返回gif动图演示
文章目录pc 寄存器lr寄存器 (x30)ret返回指令bl 跳转指令,带返回b 跳转,不带返回pc 寄存器pc保存着当前指令执行的地址,相当于win32汇编里的eip寄存器lr寄存器 (x30)lr存储函数的返回地址,每次遇到ret返回指令,都会跳转到lr寄存器里保存的地址,这个地址是函数调用的下一条指令,就是应该要执行的指令,cpu遇到ret之后,会把lr赋值给pc,这样cpu了pc里的地址,就是执行函数调用的下一条指令ret返回指令作用是返回,本质上的操作:执行ret之后,会把lr寄存器原创 2022-03-09 16:25:41 · 3832 阅读 · 1 评论 -
arm64汇编ldr和ldur和ldp指令在xcode中传入地址调用方法
文章目录ldr指令的作用arm.h文件中的声明oc文件中的调用ldr指令的作用ldr作用是把 中括号[]中的地址里存的值存入到前面的寄存器中有下面几种格式:LDR R0, [R1] ; R0←[R1]LDR R0,[R1,#4] ;R0←[R1+4]LDR R0,[R1,#4]! ;R0←[R1+4]、R1←R1+4LDR R0,[R1] ,#4 ;R0←[R1]、R1←R1+4LDR R0,[R1,R2] ;R0←[R1+R2]arm.h文件中的声明#ifndef arm_h#def原创 2022-03-04 17:37:53 · 9794 阅读 · 0 评论 -
arm64汇编b带条件跳转指令和bl跳转带返回ret指令
B 跳转指令b 跳转指令,相当于win32汇编的jmp无条件跳转指令下面代码遇到 label4以后就跳转到label4,然后就返回了_fn2:mov x0,#0x1mov x1,#0x2b label4label3:mov x0 ,1retlabel4:mov x0 , 0ret;执行完这局以后就返回上一层了BL 带返回的跳转指令bl指令跳转以后遇到第一个ret,就会返回到bl的下一条指令继续执行同样这段代码把b换成bl就会遇到执行完label4以后遇到ret,还会跳到b l原创 2022-03-04 15:36:36 · 7130 阅读 · 1 评论 -
使用xcode在ios项目中手写汇编代码函数并且调用汇编函数的方法
文章目录在项目中新建空白文件empty重命名为.s文件新建.h头文件声明方法给别的文件使用在oc代码中调用方法通过lldb 断点调试验证寄存器结果在项目中新建空白文件empty重命名为.s文件如下图在ios app项目中新建文件->other->empty->名字改成test.s下面是2个方法:text和 add,text方法不带入参只简单测试几条mov指令add带入参,测试带2个入参的加法.text的意思是把西面代码放进代码段.因为macho文件,里面的text段就是代码原创 2022-03-03 11:28:01 · 1763 阅读 · 0 评论 -
ios lldb调试指令汇总(持续更新)
文章目录1.给函数设置断点 breakpoint2.调试指定动态库里的函数 br set -s3. 查看断点列表和序号: br list4. 删除断点 br delete5. 断点失效 br disable6. 断点生效 br enable7. 帮助 help8. 表达式 expression9.函数调用栈 thread backtrace10. 直接执行函数的返回 thread return10. 查看变量源代码级别的调试11.继续 thread continue 相当于xcode的F910.原创 2022-02-24 10:00:54 · 2771 阅读 · 0 评论 -
clutch ios脱壳工具安装和使用教程
文章目录下载和安装clutch下载安装到越狱手机上ssh登录到手机上-i指令查看已经安装的app导出文件下载和安装clutch下载github下载地址下载好以后,只要Clutch-2.0.4 这个文件直接把他的改名为clutch,注意c要用小写,因为在ssh输入命令区分大小写,这样在手机上输入命令的时候可以不输入"-2.0.4",直接输入小写的clutch就行了安装到越狱手机上把改名后的可执行文件Clutch复制到连接到mac电脑上的越狱手机里的 目录usr\bin 下,因为在bin目录下就可以原创 2022-02-04 18:51:47 · 3895 阅读 · 0 评论 -
xcode没有Products的解决方法
https://www.jianshu.com/p/996124580a7e项目名.xcodeproj右键显示包内容用xcode打开project.pbxproj文件搜索:mainGroup复制 = 后面的数字,粘贴到 productRefGroup = 后面保存文件如下图把上面红框覆盖下面,然后保存文件:...原创 2022-02-02 14:46:15 · 2211 阅读 · 0 评论 -
machoview github原版下载后编译错误解决方法,附能编译的源码下载
文章目录github源码地址首先下载好以后打开文件machoview.xcodeproj 编译错误:unable to find sdk ‘macosx10.9’不能找到10.9的macosx sdk解决方法:target ->Build Settings->Base SDK把macosx 10.9 (SDK not found) 改成macos如下图:错误:‘string’ file not foundBuild Settings 里搜索c++找到 C++ Stan原创 2022-01-29 10:27:57 · 1388 阅读 · 0 评论 -
swift中performSegue连线的使用storyboard加载多个控制器方法和demo下载
文章目录在storyboard中创建连线使用连线本控制器跳转其他控制器跳转本来用segue连线的方法几年前就不用了.但是最近接了一个项目,里面还在用storyboard,一个storyboard里面有十多个控制器,而且全都是用连线跳转的控制器,想要重做一个控制器就要把里面的所有连线performSegue都整明白.在storyboard中创建连线方法如下图:在一个按钮上,或者其他能创建时间的上面按住ctrl键,然后拖拽鼠标左键,连线到另一个控制器然后如下图,点击连线,给连线输入id:使用连线原创 2022-01-26 09:13:40 · 1157 阅读 · 0 评论 -
swift判断手机越狱代码和文件常用路径
手机越狱以后会在下面路径里创建文件,把所有目录放到一个数组里面,然后判断是否存在,找到一个存在就判断手机已经越狱了import UIKitclass ViewController: UIViewController { @IBOutlet weak var labelIsBreak: UILabel! override func viewDidLoad() { super.viewDidLoad() // Do any additional se原创 2021-12-09 12:02:15 · 1171 阅读 · 0 评论 -
git xcode 忽略文件夹xcuserdata删除本地索引总结
目录删除掉 UserInterfaceState.xcuserstate文件所在文件夹的索引git rm --cached 和 git rm 的区别修改完忽略文件以后提交push提交到2个远程仓库因为做了双仓库,gitee和gitlab2个仓库,结果每次提交的时候总提示文件UserInterfaceState.xcuserstate冲突.因为是2个仓库,所以提交一个以后,再提交另外一个,总让我拉去合并冲突,导致自己的gitee和公司的gitlab之间总是有冲突,因为xcode的UserInterfaceS原创 2021-11-29 10:55:34 · 1744 阅读 · 0 评论 -
xcode清理缓存瘦身方法整理
目录删除DerivedData 项目文件夹删除Archives打包文件删除iOS系统版本号 DeviceSupport,建议清理,连接设备会重新生成删除模拟器文件删除product下的.app 文件删除playground文件删除xcode的个中缓存文件方法整理如下:删除DerivedData 项目文件夹这个文件夹中保存的是Xcode的缓存文件,只要重新打开项目就会重新生成文件目录: ~/Library/Developer/Xcode/DerivedData删除Archives打包文件此文件原创 2021-11-25 16:19:11 · 4987 阅读 · 0 评论 -
Could not find module ‘xxx‘ for target ‘xxx‘; found: i386, x86_64-apple-ios-simula错误解决
Could not find module ‘xxx’ for target ‘arm64-apple-ios’; found: i386, x86_64-apple-ios-simulator, x86_64, i386-apple-ios-simulator这种情况是framework静态库中的Modules文件夹缺少arm64-apple-ios,也就是没有真机文件原创 2021-11-01 13:03:23 · 6505 阅读 · 0 评论 -
pod install出错问题解决
@TOC今天用终端 修改第三方库版本号,的时候执行了 pod update “第三方库名”,然后再podinstall就报了下面错误:终端中执行的内容重现:pod install 后出现错误### Report* What did you do?* What did you expect to happen?* What happened instead?### StackCocoaPods : 1.9.0.beta.2Ruby : ruby 2.6.0p0 (2018-原创 2021-11-01 13:01:32 · 2822 阅读 · 0 评论 -
ios 关于reloadData和reloadRows执行后生命周期方法执行顺序
目录执行全局刷新reloadData()之后执行局部刷新.reloadRows(at: [indexPath], with: .none)今天重新对tableView 里面系统原生的数据方法执行顺序,进行一次梳理,主要说明下面4个方法的执行顺序下面是swift的3个方法.oc的执行顺序一样.func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloatfunc tableView原创 2021-08-26 10:57:52 · 1121 阅读 · 0 评论 -
NSArray element failed to match the Swift Array Element type错误的解决方法
在用swift调用yy_model生成的嵌套数组模型的时候回报错如下错误的解决方法:Thread 1: Precondition failed: NSArray element failed to match the Swift Array Element type翻译过来就是:NSArray 元素匹配swift数组元素错误因为在定义成员变量的时候定义如下:@objc var imgs:[CircleItemImgs] = [CircleItemImgs]() 这个作为数据模型,使用yy_mo原创 2021-08-23 11:00:47 · 1549 阅读 · 0 评论 -
ios开发 autolayout的Content Hugging Prlority内容拥抱优先级 教程
目录什么时候需要用到 Content Hugging Prlority例子1运行效果例子2运行效果例子一的xib操作方法例子而的xib操作方法什么时候需要用到 Content Hugging Prlority一般遇到在xib中 2个控件的约束不明确的时候,例如宽度高度不确定,系统会提示让你 增加 或者 减少 Content Hugging Prlority,字面意思是内容拥抱优先级.可以理解为,按照当前控件的大小设置优先级.当前控件的优先级高,大小就由当前控件的内容决定.内容比较抽象,看下面的例子例子原创 2021-08-20 10:49:21 · 537 阅读 · 0 评论 -
ios charts图形插件 垂直柱形图barView swift使用教程加封装(赋demo)
目录运行效果安装基本操作(未封装)创建视图生成数据设置其他数据封装后的2个不同的调用代码封装代码下载运行效果安装使用cocoa pod 安装新建 podfile文件里面添加pod ‘Charts’pod ‘SnapKit’, ‘~> 5.0.0’SnapKit可以不加,但是我封装的代码里面要用约束布局,所以添加snipkit在要使用的地方 引入库:import Chartsimport SnapKit基本操作(未封装)创建视图var barView = BarChart原创 2021-07-27 17:29:16 · 656 阅读 · 1 评论 -
ios charts图形插件 饼图pieView swift使用教程加封装(赋demo)
目录运行效果安装饼图创建设置UI设置数据整体封装代码调用代码demo下载地址点击我运行效果安装使用cocoa pod 安装新建 podfile文件里面添加pod ‘Charts’pod ‘SnapKit’, ‘~> 5.0.0’SnapKit可以不加,但是我封装的代码里面要用约束布局,所以添加snipkit在要使用的地方 引入库:import Chartsimport SnapKit饼图创建var pieV = PieChartView()设置UI view.add原创 2021-07-26 16:01:32 · 697 阅读 · 0 评论 -
swift装逼技巧之:如何使用map生成数组比for少写2行代码(附demo代码)
目录先说结论:map用3行代码解决for循环5行代码的事,相当于效率提升了40%学而不用不会也 (我说的)下面列举oc思路 使用for in 生成一个数组:模拟网上接口传过来的json数组传统for in循环处理数组 纵向至少5行代码for in方法1: 使用下标[]遍历数组(代码太长不推荐)for in 方法2:横向代码省略了下标[i],短了一点使用map组成数组map普通写法1:纵向比for in少些2行代码map省略写法:使用$0 和省略 returnmap,比for in 生成新数组省略行数的对比总原创 2021-07-26 14:24:50 · 596 阅读 · 0 评论 -
cocoapod pod install 安装显示github 443 没有权限错误的解决方法 教程
这里写目录标题在 使用pod install安装 github上面的第三方,有时候会出现 443 权限 报错Homebrew安装官方镜像地址获取github最新ip地址在 使用pod install安装 github上面的第三方,有时候会出现 443 权限 报错解决方法是更换 官方的 Homebrew源Homebrew安装官方镜像地址Homebrew官方镜像地址/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Home原创 2021-07-22 16:28:19 · 3330 阅读 · 0 评论 -
arm芯片汇编寻址方式,xcode中反汇编举例证明
目录立即数寻址 add R0,R0,#10.寄存器寻址 add R0,R1,R2寄存器间接寻址:ldr R0,[R1]基址变址寻址:前索引 ldr r0,[r1,#10]自动索引 ldr r0,[r1,#4]!后索引 ldr r0,[r1],#4跟x86汇编差不多,但是通用寄存器不一样格式: 指令码 指令格式条件码 目标寄存器 ,源操作数1,源操作数2立即数寻址 add R0,R0,#10.把R0+10 赋值给R0下面截图xcode中的反汇编上面例子,xcode里面反汇编了main原创 2021-07-01 10:45:11 · 612 阅读 · 6 评论 -
extern “C“ #ifdef __cplusplus #endif在c++和C混编时候的作用
目录前言extern "C"详解#ifdef __cplusplusdemo 地址:前言本文使用的c\c++符合c++标准,代码写在xcode平台,截图的汇编指令也是arm芯片的汇编首先看一下我们要做测试的主函数//// main.cpp// externC_ifndef_define_endif_pragma onceDemo//// Created by 谭迪文 on 2021/6/30.//#include <iostream>#include "calcu原创 2021-06-30 13:38:14 · 1196 阅读 · 0 评论 -
extern “C“的作用:c语言调用c++代码中普通函数和类的方法教程(符xcode编译器演示demo)
目录前言extern "C"的作用利用extern "C"给c++ 函数做声明,然后再定义函数,让.c文件可以找到c++的函数c语言调用c++中的全局函数,这里不包含类的概念,直接用前言这篇教程主要讲解了,c语言,如何调用c++的类和类方法,目的是为了用swift调用c++代码的教程做铺垫,因为swift无法直接调动c++代码,但是可以调用c语言代码和oc代码,所以先做了这个教程.作为swift调用c++代码其中一种方法的铺垫教程extern "C"的作用首先这个 extern “C” {}是告诉原创 2021-06-26 13:16:00 · 2310 阅读 · 1 评论 -
swift和c语言互相调用教程
目录前言swift调用c语言的方法.建立桥接文件前言swift中可以直接调用c语言,只要包含c语言的.h文件就可以了.swift调用c语言的方法.直接包含.h文件, .h文件中写函数声明//// CFn.h// swiftCDemo//// Created by 谭迪文 on 2021/6/25.//#ifndef CFn_h#define CFn_h#include <stdio.h>void printTest1(void);int getRandom原创 2021-06-25 16:15:27 · 3573 阅读 · 3 评论 -
UIScrollView使用SnapKit 自动约束设置教程
这里写目录标题前言核心思想先从最简单的单个内容视图来讲解设置多个contentViewdemo代码下载地址:[ 点击这里下载](https://download.youkuaiyun.com/download/boildoctor/18935858)前言因为最近要封装一个轮播图的工具类,网上只有自动轮播图片的,但是我想封装一个能轮播所有类型UIView的,所以要用到滚动视图,之前都是用xib设置ScrollView的AutoLayout,用纯代码工作量太大,所以不用,但是要封装起来给别人用,就得用到纯代码,所以今天原创 2021-05-21 15:33:54 · 2239 阅读 · 8 评论 -
m1芯片xcode打包IPA processing failed错误解决方案
目录前言后来看到文章说是m1芯片不兼容, 需要把ios版本号,设置成13.0以上,再打包就好使了.用兼容模式运行xcode打完包以后别忘了最重要的,让xcode改成m1芯片直接运行前言用公司账号打企业签名的包,报错IPA processing failed点击show logs 并没有发现,有x86_64的framework文件.后来看到文章说是m1芯片不兼容, 需要把ios版本号,设置成13.0以上,再打包就好使了.general -> deployment info 选择 13.0以上原创 2021-03-29 15:05:13 · 1945 阅读 · 0 评论 -
swift内存缓存NSCache和沙盒磁盘缓存使用教程和demo下载
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-03-21 22:14:28 · 1751 阅读 · 1 评论 -
最简单的swift forwardingTarget转发消息教程加demo代码下载
这里写目录标题前言使用场景场景1 perform执行方法的时候场景2 timer运行的时候,要执行一个方法forwardingTarget方法的作用demo代码下载前言(这段可以不看)之前看了关于forwardingTarget的文章,太长了,99%的文字讲的不是如何使用,是里面一大堆整体功能的讲解,看完以后太浪费时间,所以今天我把这1%真正我们要用的功能和原理写出来,目的就是为了节省大家时间,让文章更短.(这段也可以不看)与之前做了一个关于appdelegate文件加载不同第三方的框架,oc版本里原创 2021-02-08 17:33:17 · 945 阅读 · 1 评论 -
swift中map和flatMap的区别-flatMap可以降维打击附Demo代码下载
目录在1维数组中Map和flatMap的基本用法Map用法高阶函数flatMap在1维数组中跟map运行结果一样Map二维数组,数组维度不会改变2维数组,flatMap开始降维打击3维数组 flatMap可以连续降维Demo下载地址在1维数组中Map和flatMap的基本用法Map用法基本功能:在1维数组中他俩的功能都是遍历数组,并且执行闭包{} 内的表达式,然后返回结果赋值给数组中的元素.首先Map和flatMap都是映射,用微积分里面的东西就是 y = f(x) ,这里面的x是数组中的元素,f就原创 2021-02-01 16:45:45 · 684 阅读 · 2 评论 -
swift协议protocol中使用关联类型associatedtype和泛型的教程和注意事项
目录在协议中如何使用泛型关联类型的关键字 :associatedtype协议中想要使用泛型不能像在class类中那样使用在协议中使用关联类型代替泛型在带泛型的class中,泛型类型填充关联类型泛型类型被基础类型替换协议中关联类型的注意事项关联类型的协议不能作为返回值,函数形参下面是正常的可以编译过的代码,协议中没有关联类型下面是编译错误的代码不能作为返回类型不能作为函数形参解决让class遵循带关联类型的协议,并且能当做形参和返回值的方法解决方法1:让泛型遵循协议,然后让泛型当做形参或返回值,代码如下解决方原创 2021-01-25 17:25:28 · 4378 阅读 · 0 评论 -
swift 5.0遍历获取类属性名的方法和注意事项demo代码
目录前言核心代码class_copyPropertyList在swift3.0以后失效的原因获取类属性的swift的方法代码遍历类属性有什么作用?用一个类来试试哪些属性能被查看调用的代码demo代码下载后记前言今天是周六休息,在家研究swift的URLNavigator路由框架,因为里面都是用url字符串来打开控制器,这样太不安全了,如果拼写错了,编译也不会报错,只有运行的时候才会发现错误,还得修改第二次url,作为一个懒人,我封装了这个框架,在输入类名的时候直接类名.self就行,拼写的时候xcode原创 2021-01-23 20:37:32 · 1680 阅读 · 0 评论 -
swift中的内部类用法和注意事项
目录内部类的作用代码示例类内作用范围注意点内部类的作用内部类的作用是,在全局命名空间里,类外访问不了,想要访问,必须是类内才能访问,不会污染全局命名空间代码示例下面这个Person类,里面有个方法saySomething,说点什么,里面调用的时候传进去参数枚举类型,通过传进去的参数,调用内部类Say,的对象方法Hello()或者是Bye()class Person: NSObject { enum SayType { case Hello case Bye原创 2021-01-21 15:46:19 · 878 阅读 · 0 评论 -
swift的匿名闭包用法教程
目录预备知识匿名闭包普通闭包的用法前言:这几天研究RxSwift框架,看到里面有个anonymity的东西,后来一看是匿名内部类,以前可能学过,但是平时基本不用,今天总结一下,swift里面匿名用法的2个用法: 匿名闭包 和 匿名内部类预备知识假设你已经掌握了swift匿名闭包普通闭包的用法普通的闭包是有名字的,通过闭包名字就能调用闭包,如下:首先定义一个计算函数,如下,作用是把参数1和参数2 通过 参数3的闭包表达式计算 /* 计算函数 @param 参数原创 2021-01-21 11:13:23 · 534 阅读 · 0 评论