<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[蜗牛的小房子]]></title><description><![CDATA[纸上得来终觉，绝知此事要躬行。]]></description><link>https://blog.youkuaiyun.com/jancywen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jancywen]]></copyright><item><title><![CDATA[flutter -- root view 架构]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/113525328</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/113525328</guid><author>jancywen</author><pubDate>Mon, 01 Feb 2021 17:34:19 +0800</pubDate><description><![CDATA[### 1. Stack + OffStage + TickerMode
能保持状态，不能实现懒加载

* Stack:类似Android里的FrameLayout，按照children的顺序依次绘制。用它可以保存所有子页面的状态。
* OffStage：可以控制控件是否参与布局和绘制
* TickerMode：可以控制控件是否动画

```
 Widget _bodyPage() {
  return Stack(
   children: &lt;Widget&gt; [
    _...]]></description><category></category></item><item><title><![CDATA[flutter -- 创建一个新的应用]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/113524464</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/113524464</guid><author>jancywen</author><pubDate>Mon, 01 Feb 2021 17:05:09 +0800</pubDate><description><![CDATA[# 创建一个新的应用

## VS Code

1. 启动 VS Code
2. 调用 View&gt;Command Palette… (shift+command+P)
3. 输入 ‘flutter’, 然后选择 ‘Flutter: New Module Project’ action
4. 指定放置项目的位置，然后按蓝色的确定按钮
5. 输入 Project 名称 (如myapp), 然后按回车键
6. 等待项目创建继续，并显示main.dart文件





## Terminal

```
$ .]]></description><category></category></item><item><title><![CDATA[使用DZNEmptyDataSet指定customview时报 height and vertical position are ambiguous for uiview]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/108056734</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/108056734</guid><author>jancywen</author><pubDate>Mon, 17 Aug 2020 15:24:10 +0800</pubDate><description><![CDATA[直接修改源码


- (void)setupConstraints
.....

if (_customView) {
        [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[customView]|" options:0 metrics:nil views:@{@"customView":_customView}]];
//        [self.contentView]]></description><category></category></item><item><title><![CDATA[use Swift for TensorFlow]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/108019491</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/108019491</guid><author>jancywen</author><pubDate>Sat, 15 Aug 2020 11:03:08 +0800</pubDate><description><![CDATA[在安装 swift tensorflow toolchain的是时候会报开发者认证安全问题，安装完成之后，运行下面代码仍然会报签名错误，通过启用“Signing &amp; Capabilities &gt; Hardened Runtime”中的“Disable Library Validation”选项来解决问题，此选项使Xcode项目无需任何代码签名即可添加框架。


import TensorFlow

#if canImport(PythonKit)
    import PythonKit
..]]></description><category></category></item><item><title><![CDATA[SourceTree避免输入密码方法]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/107232328</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/107232328</guid><author>jancywen</author><pubDate>Thu, 09 Jul 2020 16:42:14 +0800</pubDate><description><![CDATA[方式一：利用命令行

已经拉取完代码,在sourcetree 的界面打开终端:



打开终端

之间在终端输入 git config --global credential.helper store

这条命令之后执行一次push操作，这个时候还要输入账号密码，以后就不用了.

方式二：在git的congfig的url字段里加入账号密码

1.https://git.coding.net/项目.git

2. https://账号:密码@git.coding.net/项目.git

由1变为2，且2中..]]></description><category></category></item><item><title><![CDATA[WKWebView详解&WKWebVieW和JS交互]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/107059056</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/107059056</guid><author>jancywen</author><pubDate>Wed, 01 Jul 2020 11:16:01 +0800</pubDate><description><![CDATA[开发App的过程中，常常会遇到在App内部加载网页，通常用UIWebView加载。而这个自iOS2.0开始使用的Web容器一直是开发的心病：加载速度慢，占用内存多，优化困难。如果加载网页多，还可能因为过量占用内存而给系统kill掉。各种优化的方法效果也不那么明显iOS8 以后，苹果推出了新框架 WebKit，提供了替换 UIWebView 的组件 WKWebView。各种 UIWebView 的性能问题没有了，速度更快了，占用内存少了，体验更好了，下面列举一些其它的优势:
1、在性能、稳定性、功能方面有很.]]></description><category></category></item><item><title><![CDATA[metal基础]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/107026726</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/107026726</guid><author>jancywen</author><pubDate>Mon, 29 Jun 2020 19:24:23 +0800</pubDate><description><![CDATA[整体渲染过程

MTLDevice代表GPU设备，提供创建缓存、纹理等的接口；

MTLCommandQueue 用于组织命令缓冲区以供GPU执行的队列。MTLCommandBuffer 一个容器，用于存储编码的命令以供GPU执行。MTLCommandEncoder 将GPU命令写入命令​​缓冲区的编码器。

CommandQueue、CommandBuffer、CommandEncoder的关系

顶点渲染过程

MTLLibrary Metal着色器功能的集合。

MTLRenderPipelineSt]]></description><category></category></item><item><title><![CDATA[使用Jenkins 遇到的坑]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105684605</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105684605</guid><author>jancywen</author><pubDate>Wed, 22 Apr 2020 16:08:13 +0800</pubDate><description><![CDATA[1.插件安装失败

更新中心镜像设置

修改更新中心的地址为 https://updates.jenkins-zh.cn/update-center.json



2.调用Xcode失败


xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Develop...]]></description><category></category></item><item><title><![CDATA[Jenkins Xcode 插件应用]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105683135</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105683135</guid><author>jancywen</author><pubDate>Wed, 22 Apr 2020 15:59:21 +0800</pubDate><description><![CDATA[Jenkins的安装可以参考我的另一篇博文Jenkins的安装和删除

1.安装xcode插件

插件管理 -- 可选插件 中搜索


Xcode integration




选中直接安装

2.应用

1）、新建一个项目



2）、General -- 描述: 项目描述



3）、源码管理 -- Git 输入仓库URL指定分支，我的是直接访问的钥匙串，如果出现报错可以直接添加Cr...]]></description><category></category></item><item><title><![CDATA[Jenkins安装和删除]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105683115</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105683115</guid><author>jancywen</author><pubDate>Wed, 22 Apr 2020 15:25:11 +0800</pubDate><description><![CDATA[1.brew 安装

$brewinstallJenkins
2.命令行启动Jenkins

$ jenkins
3.浏览器打开

http://localhost:8080/

4.获取密码

$sudo cat /Users/***/.jenkins/secrets/initialAdminPassword
5.安装推荐插件

安装推荐插件，可能会失败，大多是因为网络的问题，，多试几...]]></description><category></category></item><item><title><![CDATA[Jenkins笔记]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105560372</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105560372</guid><author>jancywen</author><pubDate>Thu, 16 Apr 2020 16:28:44 +0800</pubDate><description><![CDATA[一、安装运行

1.brew 安装


$brewinstallJenkins

2.命令行启动Jenkins


$ jenkins

3.浏览器打开

http://localhost:8080/

4.获取密码


$sudo cat /Users/***/.jenkins/secrets/initialAdminPassword

5.安装推荐插件

安装推荐插件，可能会失败，大...]]></description><category></category></item><item><title><![CDATA[Jenkins安装插件超时]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105140506</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105140506</guid><author>jancywen</author><pubDate>Fri, 27 Mar 2020 22:55:26 +0800</pubDate><description><![CDATA[Jenkins自动打包ios工程详细使用方法可参考这一篇博文，我在此不做赘述，这里主要写一下遇到的报错

1.安装好选择推荐插件安装，部分插件安装失败，其实是大部分安装失败，点开monitor一看全是爆红，一版滑不到底，



究其原因就是依赖没有加载成功，点击纠正，进入可选插件，直接搜插件的名称，直接安装

直接安装插件还是失败


java.net.SocketTimeoutException...]]></description><category></category></item><item><title><![CDATA[全局gitignore_global导致文件被忽略]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105134480</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105134480</guid><author>jancywen</author><pubDate>Fri, 27 Mar 2020 09:51:02 +0800</pubDate><description><![CDATA[在用GitHub Desktop上传工程时，发现.xcodeproj工程文件没有传到远程仓库，使用 git add 命令行添加又报错，


****:Petrel roo$ git add Petrel.xcodeproj
The following paths are ignored by one of your .gitignore files:
Petrel/Petrel.xcodeproj...]]></description><category></category></item><item><title><![CDATA[URLNavigator应用及源码解析]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105115821</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105115821</guid><author>jancywen</author><pubDate>Thu, 26 Mar 2020 12:21:36 +0800</pubDate><description><![CDATA[应用

集成

pod 'URLNavigator' 


创建NavigationMap文件
	将视图注册到URL模式

navigator.register("petrel://douban") { url, values, context in
    return DouBanViewController()
}


在didFinishLaunchingWithOptions方法中初始化...]]></description><category></category></item><item><title><![CDATA[URLNavigator应用及源码解析]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/105110685</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/105110685</guid><author>jancywen</author><pubDate>Thu, 26 Mar 2020 09:26:26 +0800</pubDate><description><![CDATA[### 集成
``` 
pod 'URLNavigator'
```
### 应用
1. 创建`NavigationMap`文件
2. 将视图注册到URL模式
```
navigator.register("petrel://douban") { url, values, context in
  return DouBanViewController()
}
```
3. 在`didFi...]]></description><category></category></item><item><title><![CDATA[iOS开发之网络安全]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/104770459</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/104770459</guid><author>jancywen</author><pubDate>Tue, 10 Mar 2020 11:27:09 +0800</pubDate><description><![CDATA[篡改数据

客户端通常会保存uid，访问接口时传入uid告诉服务器是谁访问。那么引出了最初级的安全问题，如果我们仅仅只信任uid那一旦修改这个参数值就可以篡改别的用户数据了。


	使用token，在用户登录成功服务端返回uid和token，客户端访问服务器时提供这两个参数，uid区别唯一性，token验证合法性。这样即使修改了uid，对应的token不一致也无法成功。
	
	
	使用https，...]]></description><category></category></item><item><title><![CDATA[iOS耗电量检测与优化]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/104769815</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/104769815</guid><author>jancywen</author><pubDate>Tue, 10 Mar 2020 11:07:53 +0800</pubDate><description><![CDATA[一、耗电量检测

1、进入手机"设置"-&gt;"电池",可以直观的看出来手机应用的耗电情况。



image.png





image.png

2、使用Xcode打开你的工程，然后插上手机，使用真机running项目（必须是真机），然后command+6，点击Energy Impact



image.png

蓝色表示--合理
	黄色--表示程序比较耗电
	红色--表示仅仅轻度
	...]]></description><category></category></item><item><title><![CDATA[App启动优化]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/104673718</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/104673718</guid><author>jancywen</author><pubDate>Thu, 05 Mar 2020 14:05:13 +0800</pubDate><description><![CDATA[App启动的三个阶段：

main()函数执行前；
	main()函数执行后；
	首屏渲染完成后。
main()函数执行前

加载可执行文件
	加载动态链接库
	Objc运行时初始处理，相关类的注册、category注册、selector唯一性检查等
	初始化，执行+load()方法、__attribute__((constructor))修饰的函数调用、创建c++静态全局变量
此阶段优化方案：
...]]></description><category></category></item><item><title><![CDATA[iOS卡顿监测方案总结]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/104671616</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/104671616</guid><author>jancywen</author><pubDate>Thu, 05 Mar 2020 12:07:02 +0800</pubDate><description><![CDATA[整理了一下iOS中卡顿监测的那些方案，不了解卡顿的原理的可以看这篇文章iOS 保持界面流畅的技巧，写的很好。

FPS

FPS (Frames Per Second) 是图像领域中的定义，表示每秒渲染帧数，通常用于衡量画面的流畅度，每秒帧数越多，则表示画面越流畅，60fps 最佳，一般我们的APP的FPS 只要保持在 50-60之间，用户体验都是比较流畅的。

监测FPS也有好几种，这里只说最...]]></description><category></category></item><item><title><![CDATA[1 duplicate symbol for architecture armv7]]></title><link>https://blog.youkuaiyun.com/jancywen/article/details/100729785</link><guid>https://blog.youkuaiyun.com/jancywen/article/details/100729785</guid><author>jancywen</author><pubDate>Wed, 11 Sep 2019 10:50:26 +0800</pubDate><description><![CDATA[duplicate symbol _registerTag in:
    /Users/bear/Library/Developer/Xcode/DerivedData/CarShare-aocjqpzrgbdimnfzsvvibtngyved/Build/Intermediates.noindex/XXXX.build/Debug-iphoneos/XXXX.build/Objects...]]></description><category></category></item></channel></rss>