Xcode 26编译失败修改
背景电脑升级MacOS 26.0,新增了一个SDK后,Xcode26 Beta5和Beta6,编译项都报错,提示:Assertion failed: (it != _dylibToOrdinal.end()), function dylibToOrdinal, file OutputFile.cpp, line 5196. 排查过程 在StackOverFlow上有看到说ENABLE_DEBUG_DYLIB=NO,尝试后无效果 在Xcode 26 Link Error中看到,Apple官方人员的回复,要添加-Xlinker -dead_strip -Xlinker -allow_dead_duplicates. 解决办法通过 Other Linker Flags 修改进入 Target 的 Build Settings 标签:选中 Target → Build Settings → 搜索 Other Linker Flags。手动修改链接参数:点击 Other Linker Flags,首先移除 12-ld64 -ld_classic 然后添加 1234-Xlinker ...
Xcode 26崩溃修改
背景电脑升级MacOS 26.0,之后旧版Xcode不支持了,下载Xcode26 Beta5,运行项目后崩溃,提示:dyld[xxx]: Symbol not found: _NSUserActivityTypeBrowsingWeb 排查过程 在StackOverFlow上有看到说移除 CoreServices 后可以解决,但是排查后发现项目主工程并没有引用这个库 又有说把宏重定义NSUserActivityTypeBrowsingWeb改为字符串"NSUserActivityTypeBrowsingWeb"可以解决,但是搜索后,项目工程中没有使用这个字符串 怀疑是项目Pods中三方库使用了这个宏,通过grep搜索后发现太多了,促使三方库开发者更新不限时。 最后发现,有说把Foundation.framework在链接参数中位置提到CoreServices的前面可以解决,经过尝试确认方法有效。 解决办法解决办法就是:把 Foundation 的在链接参数中的位置往前面提到 CoreServices 之前 方法 1:通过 Build Phases 调整框...
全平台抓包工具Reqable使用
背景在iOS开发中,经常会遇到需要抓包的情况,比如查看网络请求、查看接口返回的数据等。而在iOS开发中,常用的抓包工具有Charles、Proxyman等,这些并非不好用,尤其是Proxyman,使用起来非常方便。但是需要付费,免费的只能查看3个域名;而且这些工具使用的时候需要手动进入网络中设置代理,比较麻烦。 无意中发现了Requable,优点是:全平台可用,且抓包功能免费,没有广告;最好用的是可以在手机上一键连接电脑,不需要进入网络设置代理,非常方便。优点: 全平台,iPhone、Mac、Windows、Android都有APP 抓包免费,不限制域名数量 可以在手机上一键连接电脑,不需要进入网络设置代理 可以查看请求头、请求体、响应头、响应体,设置断点,拦截修改返回和相应;(免费版最多生效3个) 缺点:VPN的开启和关闭标识不够明显,在使用过程中容易被误操作。 使用以Mac版本来看,如下图,主要有以下几个部分: 区域1,导航部分,在这里可以看到所有的域名,可以选择对指定的域名置顶或添加书签,单击选中时后面会有绿色的勾,代表过滤这个域名;选中多个,则过滤多个;没有选...
国行Mac 开启 Xcode inteligence 提示
背景电脑国行 Mac M1,内存 16G,版本 Sequoia 15.1,Xcode 16.1,在Xcode 设置中,Text Editing 下,Editing Tab下,能看到有个设置Predictive code completion,但是默认是关闭的, 国行的提示不支持,这里说的是怎么开启这个,亲测开启成功。 最终效果如下: 步骤参考XcodeLLMEligible,我用的是不 disable sip 的方式。 首先,在终端中,输入下面命令: 12345678# Override XcodeLLM onlycurl -L https://raw.githubusercontent.com/Kyle-Ye/XcodeLLMEligible/release/0.2/scripts/override.sh | bash -s -- install override xcodellm# Override Apple Intelligence onlycurl -L https://raw.githubusercontent.com/Kyle-Ye/XcodeLLMEli...
Xcode使用免费的Codeium代码补全插件
背景在使用Xcode开发iOS应用时,经常需要编写大量的代码,而代码补全是提高开发效率的重要工具。Codeium是一款免费的代码补全插件,它可以帮助快速编写代码,提高开发效率。 如果有付费Copilot的,可以直接使用CopilotForXcode,之前公司有企业付费,所以用的这个工具,换公司后,不能用了,所以就想找一个免费的,虽然CopilotForXcode也包含有Codeium,但是却一直用不了。所以就想找一个能用Codeium的,参考 Codeium in Xcode ,起始项目是从CopilotForXcode中引出的,只为专门使用Codeium创建的,所以安装步骤和使用跟CopilotForXcode几乎一样。 使用安装步骤可以参考CodeiumForXcode,大致共有下面几个地方。 System Preferences ——> Privacy & Security ——> Accessibility中,将Codeium添加到列表中。如下图: General ——> Login Items & Extensions 中,将...
SwiftUI中navigationDestination用法
背景最近做 SwiftUI 项目,之前对于 navigationDestination 的用法理解不太深刻,觉得很是难用,最近发现了正确的使用方式,这里记录一下。 场景假设有一个 TabView 类为 A,A 有 B、C 两个Tab,C 的 Tab 下子界面有 D,D 的子界面有 E。 即有 A -> B 和 A -> C -> D -> E 两条链路。 之前的用法是: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556struct A: View { var body: some View { NavigationStack { TabView(selection: $selectedTab) { B() C() } ...
FirebaseFunctionError 处理
背景做一个 Firebase 相关的项目,其中创建用户的时候,用的是Cloud Functions,调用的时候一直报错,错误信息只有”INTERNAL”。 Deploying Function Error on Cloud Function with error code 13 and Message “INTERNAL” 排查步骤网上搜索之后,有说字段不对应的,有说调用方式不对的,但是尝试后把这两个原因都排除了。 然后去 Firebase 的 Console 中查看,找到 Function,再找到调用的函数名字,点击右侧的竖三角,查看详细信息,发现里面错误信息为空。不要急,点击顶部 Tab,切换到 日志 下,然后从日志中查看报错信息,就能看到调用这个函数哪里报错了。具体步骤的截图如下:
Swift 面试题
背景被问到的面试题,这里记录一下。 问题Swift 中 Struct 和 Class 的区别Swift 中 为什么 String、Array、Dictionary 用 Struct 实现Swift 中写时复制的原理Swift 中变量作用域有哪些,区别是什么Swift中 Protocol 如何声明可空MVP 的优点是什么RxSwift 中冷信号和热信号的区别RxSwift 中 CombineLatest、zip、merge的区别Git 中 rebase和 merge 的区别,rebased的 commitID 会改变吗SwiftUI 中 View 传值方式有哪些什么情况下触发 layoutSubviews 答案Swift 中 Struct 和 Class 的区别Struct是值类型,Class 是引用类型;Struct和 Class 都可以有属性和方法,但是 let 修饰的 Struct 不能更改,Class 修饰的可以更改;Struct方法中修改属性需要在方法前添加 mutating 关键字。Struct和 Class 都可以实现协议。Struct不能被继承,Class 可以...
SafariFreeMedium插件
背景在阅读上篇 Flutter状态管理中,引用的几篇文章都需要是Medium 会员才能查看的。没有付费的每个月免费只能查看几次,所以就想有没有不付费查看这个的方法,就去搜索了一下。 实现搜索之后,找到了这篇Freedium · GitHub,查看后发现里面有个简单的方法,就是把 host 替换为````freedium.cfd然后重定向。 刚好自己有账号,为了在 Safari 中便于使用,就自己写了一个插件,效果如下: 参考 Freedium · GitHub
Flutter 状态管理
背景我之前对 Flutter 的状态管理一直比较头大,最近看到了一篇Flutter state management for minimalists | by Suragch | Medium文章,感觉文章真的很好,把为什么要进行状态管理以及什么是状态管理说的很通透,推荐大家看原文,这里是自己总结一下。 什么是状态管理老实说,之前看 Flutter 相关的文章和视频的时候,有些上来就推荐用 Bloc 的就很懵,没有前因后果,就告诉我要用这个东西,这东西用了有什么好处?这东西上手难度如何,这东西是必备的吗?和其他的状态管理库(比如GetX)对比有什么优点,等等之类的都不清楚,所以一直很难深入学习。 来看下图: 我本人是 iOS APP 开发,所以对于 MVVM 很熟悉,对比上图,UI Layer 是 View,Service Layer是 Model,所以 State Management Layer 就是 ViewModel,这样解释对比,我就对状态管理有了直观的理解,只是换了个名称,其实就是 ViewModel。 为什么要状态管理那为什么要状态管理呢?其实理解了上面,...