<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[devil_0311的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/devil_0311</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; devil_0311]]></copyright><item><title><![CDATA[H5中使用通用链接universallink跳转iOS App的坑]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/157210733</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/157210733</guid><author>devil_0311</author><pubDate>Thu, 26 Feb 2026 10:47:21 +0800</pubDate><description><![CDATA[摘要：本文详细介绍了iOS通用链接(Universal Links)的配置与使用流程。首先阐述了传统scheme跳转的局限性，然后分步骤说明通用链接的配置方法，包括网站端apple-app-site-association文件的设置和Xcode中的关联域名添加。重点分析了H5页面使用通用链接时需要注意的关键问题：不同域名策略、用户点击触发要求、iOS记忆行为等，并提供了代码示例和优化建议。文章还指出了常见的坑点，如文件修改需重装App、iOS会记忆用户选择行为等，为移动端H5开发实现流畅的App跳转提供了完]]></description><category></category></item><item><title><![CDATA[iOS14使用stack布局的坑]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/157768899</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/157768899</guid><author>devil_0311</author><pubDate>Thu, 05 Feb 2026 16:22:28 +0800</pubDate><description><![CDATA[iOS14系统中多行文本在stack布局时会出现两端对齐问题，无法左对齐。解决方案包括：改用单行文本、合并label、设置stackview属性或改用UIView布局。考虑到iOS14设备占比极低（约1%以下），开发者可根据实际需求决定是否投入精力适配老系统。文章提供了多种技术方案供选择，同时建议参考官方系统分布数据权衡兼容必要性。]]></description><category></category></item><item><title><![CDATA[iOS约束异常排查]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/155942102</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/155942102</guid><author>devil_0311</author><pubDate>Mon, 15 Dec 2025 16:00:17 +0800</pubDate><description><![CDATA[这个例子的核心是UITableViewCell 的 ContentView 设置了固定高度100，但内部嵌套的多层视图（StackView、Button、YLButton 等）通过一系列约束计算出的总高度，和这个固定的 100 高度无法兼容，系统只能打破其中一个关键约束（YLHeadView:0x1426d2e00 的高度30 ）来 “自救”。xib默认的高度和代码设置的预估高度相差太多，这里我的xib默认高度是420，但代码设置是100，系统检测到相差太大放弃了自动计算将预估高度视为固定高度导致异常。]]></description><category></category></item><item><title><![CDATA[iOS开发CopilotForXcode的安装和使用]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/148479435</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/148479435</guid><author>devil_0311</author><pubDate>Mon, 30 Jun 2025 16:02:06 +0800</pubDate><description><![CDATA[iOS开发中AI工具使用体验： 本文分享了iOS开发中尝试AI辅助工具的经验。针对Cursor、Trae等IDE工具的不足，重点测试了CopilotForXcode，详细介绍了其安装配置步骤（需macOS12+、Xcode14+、GitHub账号和Node.js环境），包括权限设置、Node路径配置和GitHub授权。使用体验显示其代码补全功能尚可，但聊天功能存在上下文关联差、无历史记录等问题。相比之下，百度文心快码Comate在自动检测编程语言和上下文关联方面表现更佳。]]></description><category></category></item><item><title><![CDATA[iOS使用Build Configuration实现多环境切换]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/148761971</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/148761971</guid><author>devil_0311</author><pubDate>Thu, 19 Jun 2025 16:06:44 +0800</pubDate><description><![CDATA[iOS开发中常需配置多环境参数，本文介绍如何创建自定义配置环境。通过复制Release配置创建Adhoc环境，配置专用证书和BundleID；在Build Settings中添加ADHOC=1宏定义；利用条件编译实现不同环境下的路径配置（测试/内测/正式）和日志控制（仅Debug打印）。关键点：Xcode调试时只能用开发证书，打包时自动切换证书；通过预处理器宏实现代码逻辑的环境区分，解决多环境配置需求。]]></description><category></category></item><item><title><![CDATA[iOS指纹登录面容登录功能开发详解]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/147955164</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/147955164</guid><author>devil_0311</author><pubDate>Wed, 14 May 2025 17:37:20 +0800</pubDate><description><![CDATA[文章主要介绍了iOS指纹登录和面容登录功能的实现流程和原理。首先，文章指出由于产品和运营对用户隐私的担忧，该功能一直未接入。实际上，App仅使用系统录入的信息进行验证，不会采集用户指纹或面容信息。接着，文章详细描述了登录流程，包括用户登录完成后提示绑定指纹/面容登录、判断设备支持情况、绑定ID的生成和规则等。在用户交互方面，文章建议在绑定和登录时提示用户平台只接收验证结果，不采集用户信息，并在个人中心设置页增加关闭入口。最后，文章提供了代码实现，包括封装成工具类方便调用、检查生物识别状态、绑定设备、登录页的]]></description><category></category></item><item><title><![CDATA[iOS https证书配置闪退问题]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/134686305</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/134686305</guid><author>devil_0311</author><pubDate>Wed, 29 Nov 2023 12:07:25 +0800</pubDate><description><![CDATA[iOS使用的https证书都是.cer格式的，以往服务端给我的证书都是.pem或.crt格式，我通过终端转换为.cer后直接就能用了，很顺利。后面查了才知道，原来iOS用的.cer证书内容还必须是data格式的。]]></description><category></category></item><item><title><![CDATA[iOS 文件下载保存预览功能实现]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/116202586</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/116202586</guid><author>devil_0311</author><pubDate>Fri, 10 Mar 2023 10:05:40 +0800</pubDate><description><![CDATA[iOS 文件下载保存预览功能实现



保存到系统文件APP

文件预览


]]></description><category></category></item><item><title><![CDATA[关于html转canvas遇到的坑]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/116125465</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/116125465</guid><author>devil_0311</author><pubDate>Sun, 25 Apr 2021 16:33:10 +0800</pubDate><description><![CDATA[关于html转canvas遇到的坑（vue）

转换插件：html2canvas

html2canvas如何使用我就不介绍啦，很简单，网上一搜啥都有，主要就是坑多。

坑1：跨域

当dom元素里面包含远程图片时，转换会出现跨域错误。其实就是html2canvas插件在将图片转为canvas的时候跨域了，所以就算不用html2canvas插件也会遇到这个问题。

解决方式分3步：

第一步：需要后端设置Access-Control-Allow-Origin的值为“*”，允许该图片跨域。我用的是oss图片，]]></description><category></category></item><item><title><![CDATA[vue手势缩放组件]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/114399722</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/114399722</guid><author>devil_0311</author><pubDate>Fri, 05 Mar 2021 17:38:58 +0800</pubDate><description><![CDATA[vue手势缩放组件

原理解析

关于手势缩放，最重要的点在于如何监听手势；如何获取缩放比例；如何在缩放的同时，保证双指之间的中心点一直处于原来的位置。

首先，手势的监听可以使用如下方法：


document.addEventListener('touchstart touchmovetouchend', function(e) {
    if(e.touches.length==2){
	    //双指触摸手势事件
	}
}

缩放比例 = 开始触摸时两指间距离 / 触摸结束时两...]]></description><category></category></item><item><title><![CDATA[ScrollView的自动布局：如何给ScrollView设置contentSize]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/105763898</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/105763898</guid><author>devil_0311</author><pubDate>Sun, 26 Apr 2020 14:40:08 +0800</pubDate><description><![CDATA[一、开发环境

XCode11.4，autoLayout。

二、布局目标

如下图，scrollView上面放一个蓝色块和一个绿色块。保持scrollView始终和屏幕等宽高，蓝色和绿色块始终和scrollView等宽，高度随scrollView变化。



二、布局步骤

1、给scrollView添加约束。

相对于view/Safe Area：添加上左下右均为0的约束。



2、对蓝色块...]]></description><category></category></item><item><title><![CDATA[UITableView分割线不显示]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/90296341</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/90296341</guid><author>devil_0311</author><pubDate>Fri, 17 May 2019 16:49:12 +0800</pubDate><description><![CDATA[查了很多资料都不能用，最后发现是在cell的layoutSubviews方法中忘了继承父类

修改前：分割线不显示


- (void)layoutSubviews
{
    ATViewRadius(self.headImg, self.headImg.width/2);
}

修改后：分割线正常显示


- (void)layoutSubviews
{
    [super layoutSu...]]></description><category></category></item><item><title><![CDATA[iOS crash崩溃日志符号化方法]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/82867120</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/82867120</guid><author>devil_0311</author><pubDate>Thu, 27 Sep 2018 15:44:34 +0800</pubDate><description><![CDATA[百度官方也有提供手动解析的方法，但是文档不是很详细，我试了没有成功，暂不清楚是哪步搞错了。

以下是我结合网上教程总结出来的方法，亲测有效。

1、分析错误日志。

在百度统计平台找到错误信息，找到UUID、相对地址、绝对地址，如下图：

注意：绝对地址要你的app名称后面的才有用，这里我的app名称为WHBJ。



2、找到提交app时使用的.xcarchive文件和.dSYM文件（以下app...]]></description><category></category></item><item><title><![CDATA[iOS开发 XCode9如何打印中文日志]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/80913320</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/80913320</guid><author>devil_0311</author><pubDate>Wed, 04 Jul 2018 15:39:37 +0800</pubDate><description><![CDATA[原理：一般都是重写NSArray，NSDictionary的description方法方案1：新增NSArray，NSDictionary的类别并重写NSArray，NSDictionary的description方法。方案2：用HYBUnicodeReadable下载地址：https://github.com/524429264/HYBUnicodeReadable。下载后将HYBUnicode...]]></description><category></category></item><item><title><![CDATA[iOS开发 获取手机型号]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/80911281</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/80911281</guid><author>devil_0311</author><pubDate>Wed, 04 Jul 2018 14:25:50 +0800</pubDate><description><![CDATA[1.导入头文件#import &quot;sys/utsname.h&quot;2.获取原理：获取当前设备的型号标识符，根据型号标识符对应的手机型号来判断当前设备型号。型号标识符与手机型号的对应关系见：https://www.theiphonewiki.com/wiki/Models#iPhone3.代码实例（最好是封装到工具类中）。+ (NSString *)iphoneType {    struct utsna...]]></description><category></category></item><item><title><![CDATA[iOS开发 Jastor的简单使用]]></title><link>https://blog.youkuaiyun.com/devil_0311/article/details/53994372</link><guid>https://blog.youkuaiyun.com/devil_0311/article/details/53994372</guid><author>devil_0311</author><pubDate>Tue, 03 Jan 2017 14:43:26 +0800</pubDate><description><![CDATA[Jastor简介。
            jastor是一个基于oc运行时的库【1】，它可以将字典对象转换成NSObject对象。它支持NSString， NSNumber，NSArray， NSDictionary以及它们的嵌套类型。例如现在需要将dict转换为model。 dict为NSDictionary对象， model为继承于Jastor的NSObject对象。
 Jastor通过]]></description><category></category></item></channel></rss>