那片树海

用心做一件工艺品


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

一行命令执行系列任务

发表于 2022-07-04 | 更新于: 2026-05-11 | 分类于 技术文章

日常开发过程中,安装命令行工具过程有时候比较繁琐,使用脚本时需要将脚本仓库克隆下来,我们怎么能够简化这些过程呢,homebrew 的安装过程提供了一种解决方案,就是直接通过 bash 执行一个远端的 sh 文件

1
2
# homebrew安装命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

实现方式

/bin/bash -c 表示命令会从后面紧跟的字符串读取,如果字符串后面还有内容,则作为参数。(-c: cmd)

curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh 表示请求 install.sh 的源内容

这样就可以读取远端的一个脚本,执行脚本了,在脚本中我们可以做很多自动化的工作,使用者可以在不用下载或者安装的情况执行这些动作

GitLab 实现

企业内部一般都使用的是 GitLab 托管代码,并且有权限控制

GitLab 官方推荐使用如下方式访问,文档地址

1
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/13083/repository/files/app%2Fmodels%2Fkey%2Erb?ref=master"

your_access_token 在 GitLab 仓库的 setting 选项当中可以生成,而且仅展示一次,请注意保存,这个用来做身份校验。

13083 是你仓库的 Project ID,这个一般在 Project overview 就可以看到。

app%2Fmodels%2Fkey%2Erb 是 app/models/key.rb 的 urlencode,是文件路径的 urlencode。在命令中 files 后面的部分要使用文件在仓库的路径的 urlencode 形式,这样才能保证这部分是一个整体,不会在 url 解析时被误解

所以一个完整的执行远程 GitLab 文件脚本的命令如下:

1
/bin/bash -c "$(curl --header "PRIVATE-TOKEN: <your_access_token>" "https://<your_gitlab_domain>/api/v4/projects/<your_project_id>/repository/files/<your_file_path_urlencode>?ref=master)"

fastlane移除苹果两步验证

发表于 2022-03-11 | 更新于: 2026-05-11 | 分类于 技术文章

苹果的 AppleID 现在都开启了两步验证,在登录新设备或者进行一些操作时都需要提供二次验证的验证码(已登录设备、绑定手机号、绑定邮箱接收),这个功能提高了 AppleID 的安全性,但也给自动化打包带来了一些困扰,我们的打包过程会被中断,下面就简单介绍两种可以在 fastlane 中移除苹果两步验证的方案。

参考文档:http://docs.fastlane.tools/getting-started/ios/authentication/

使用应用特殊密码

点击链接 appleid.apple.com/account/manage 进入 AppleID 管理页面,点击 App 专用密码,然后生成。(此密码仅展示一次,请注意保存)

将专用密码配置在 fastlane 的环境变量当中即可

1
ENV["FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD"] = "xxxx-xxxx-xxxx-xxxx"

此种方式仅支持 upload_to_app_store、upload_to_testflight 等上传二进制动作,其他的与 App Store Connect 交互的动作不支持。

使用 App Store Connect API key(推荐)

点击 https://appstoreconnect.apple.com/access/api 进入 App Store Connect 用户与访问下面的 Keys 页面,生成一个 API key(请确保自己有权限使用这个功能,如果看不到这个 tab,也可以让账号持有者帮你创建),获得 key_id,issuer_id 并下载 API Key 的 p8 文件(此文件仅能下载一次,请注意保存)

在调用动作之前,向 Apple 请求获得 api_key,并使用即可

1
2
3
4
5
6
7
8
9
10
11
lane :release do
api_key = app_store_connect_api_key(
key_id: "XXXXXXXXX",
issuer_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
key_filepath: "./AuthKey_XXXXXXXXX.p8",
duration: 1200, # optional (maximum 1200)
in_house: false # optional but may be required if using match/sigh
)

pilot(api_key: api_key)
end

本人更推荐自动将 api_key 自动写入上下文的这种写法,fastlane 的标准动作都会去上下文当中取 api_key,写法上更方便一点

1
2
3
4
5
6
7
8
9
10
11
12
lane :release do
app_store_connect_api_key(
key_id: "XXXXXXXXX",
issuer_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
key_filepath: "./AuthKey_XXXXXXXXX.p8",
duration: 1200, # optional (maximum 1200)
in_house: false # optional but may be required if using match/sigh
)

# Automatically loads Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY]
pilot
end

Jenkins使用指南

发表于 2022-02-24 | 更新于: 2026-05-11 | 分类于 技术文章

Jenkins 官方文档:https://www.jenkins.io/doc/

安装、启动和更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 安装最新LTS版本(LTS:Long-term support,长期支持)
brew install jenkins-lts

# 安装特定的LTS版本
brew install jenkins-lts@YOUR_VERSION

# 启动Jenkins服务
brew services start jenkins-lts

# 重启服务
brew services restart jenkins-lts

# 更新版本
brew upgrade jenkins-lts

启动服务之后,可以用浏览器打开 http://localhost:8080 ,然后根据提示完成安装即可。

局域网内无法通过 ip 访问的问题

使用 homebrew 安装 Jenkins 之后会将 httpListenAddress 默认设置为 127.0.0.1,导致只能本机通过 localhost 访问,局域网内其他机器无法通过 ip 访问。要修复此问题,需要将如下文件当中的 httpListenAddress 配置修改为本机 ip 或者 0.0.0.0,然后重启 Jenkins 即可。

1
2
3
// 注:如果你安装的是非LTS版本,则文件名为homebrew.mxcl.jenkins.plist
~/Library/LaunchAgents/homebrew.mxcl.jenkins-lts.plist
/usr/local/opt/jenkins/homebrew.mxcl.jenkins-lts.plist

强制删除插件

在某些情况下,安装插件异常,插件既不能正常安装,也不能通过 Jenkins 提供的页面操作删除,此时可以到 Jenkins 存储插件的目录,将文件删除重启即可。

插件目录:~/.jenkins/plugins

注:需同时删除插件文件夹和.jpi 文件

远程触发

GitLab 场景推荐使用 构建触发器 -> Build when a change is pushed to GitLab 触发器(此触发器需要 Jenkins 的 GitLab 插件,默认安装,如果没有,请手动安装),该远程触发器可以获取到 GitLab 触发仓库传递过来的参数,包含仓库地址,分支,tag,推送人等信息,很实用,参数详情可以参考 gitlab-plugin 中的 Defined variables 部分。

远程调用或者脚本触发场景推荐使用 构建触发器 -> 触发远程构建,使用此触发器,需要设置一个 token,拼在 webhook url 上即可。如下是一个 curl 调用范例.

1
curl JENKINS_URL/job/app/job/user-release/build?token=sh123

如果需要传递参数,请使用如下方式,使用使用参数时,需要将参数配置在 参数化构建过程 当中。

1
curl JENKINS_URL/job/app/job/user-release/buildWithParameters?token=sh123&username=yzq

构建触发器 -> Generic Webhook Trigger 用作不传递参数的普通触发器也是一个选择,但是此触发器的参数支持较弱,仅支持 form 方式的参数提交,不太方便扩展,不太推荐。

远程触发 403 或 404 报错,提示权限问题

此问题是远程触发鉴权失败导致,需要在触发链接上添加身份信息,此处需要 Jenkins 用户的用户 ID 和 Token。用户 ID 为登录的用户名,Token 可以在 Dashboard -> 用户列表 -> 某个用户 -> 设置 -> API Token 处生成,生成后仅展示一次,注意保存。获取到用户 ID 和 Token 之后按照如下方式调用即可

1
curl https://userId:token@myjenkins.com/job/app/job/user-release/build?token=sh123

Swift混编踩坑指南

发表于 2021-09-02 | 更新于: 2026-05-11 | 分类于 技术文章

第一次在 OC 工程当中添加 Swift 文件或者在 Swift 工程当中添加 OC 文件时,Xcode 会提示你创建一个名称为{projectname}-Bridging-Header.h 的文件,点击 Create Bridging Header 创建。

Swift 调用 OC

在 {projectname}-Bridging-Header.h 导入需要调用的 OC 代码的头文件,即可在 Swift 代码中直接引用对应的类和变量

1
2
3
4
5
6
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "SHOCUtil.h"
#import "SHTest.h"
阅读全文 »

切换各种源

发表于 2020-04-28 | 更新于: 2026-05-11

我们在使用一些工具的时候因为他们的服务或者资源托管在国外的服务器上,会导致我们请求或者下载的速度非常慢,这是一种非常不好的体验,切换相关镜像源使用国内的服务可以极大改善这种情况。

Homebrew

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# 替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git

# 重置brew.git:
cd "$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git

# 重置homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core.git
阅读全文 »

macOS 10.15.4下Sketch等三方软件无法打开

发表于 2020-04-28 | 更新于: 2026-05-11

电脑更新 macOS Catalina 10.15.4 之后,原来安装的 Sketch、CleanMyMac 等第三方软件打不开了,直接崩溃

解决方案:打开终端,执行如下命令

1
2
xattr -cr /Applications/xxx.app
codesign --force --deep --sign - /Applications/xxx.app

YCode工具集

发表于 2019-09-10 | 更新于: 2026-05-11

最近在新的团队中各个团队的不同的代码风格对协作造成了较大的影响,然后就想除了人工方式能不能用工具的方式来使大家的代码风格统一,于是就写了 YCode 这个工具集。

YCode 目前只提供代码段功能,后续会加入代码模板功能,如果大家有什么想法或者想要的功能,也可以给我提 issue 或者发邮件,我会慢慢完善的。如果你觉得 YCode 确实对你的工作有所帮助,能点个 star 或者推荐给其他人就更好了,多谢大家。

YCode 地址
代码段仓库地址

用法

Xcode 代码段

安装之后就可以使用已经写好的代码段了,比如你在 Xcode 当中输入 yLazyUILabel,就可以得到现成的一整段代码,具体提供的片段可以在代码段仓库地址或者 Xcode 当中查看。

应用程序无法打开或文件损坏

发表于 2019-05-27 | 更新于: 2026-05-11

Mac 在使用非 App Store 下载的应用时,经常会遇到提示 ““xxx.app”已损坏,打不开。您应该将它移动到废纸篓” 或者 “打不开“xxx.app”,因为它来自身份不明的开发者”。

解决方案:将 “系统偏好设置->安全性与隐私->通用” 下面的 “允许从以下位置下载的 App” 修改为 “任何来源”

问题 1:不能修改设置
点击安全性与隐私面板左下角的 “🔐 点按锁按钮以进行更改”,输入电脑管理员密码,即可修改

问题 2:“允许从以下位置下载的 App” 下没有 “任何来源” 选项
打开终端,输入 sudo spctl --master-disable 回车,然后输入电脑管理员密码回车执行,就可以在设置面板上看到 “任何来源” 选项了

问题 3:提示 “无法打开“xxx”,因为无法确认开发者的身份”
右键应用程序、打开或者按住 control 点击应用程序

问题 4:已经开启任何来源,但还是打不开(macOS Catalina 10.15 以上会遇到)
打开终端,输入以下命令 sudo xattr -d com.apple.quarantine /Applications/xxxx.app ,重启应用即可。
如果应用名字有空格,请在命令当中转义,或者先修改应用程序名称,可以打开后再改回来。

如何绘制好iPhone上的1像素

发表于 2019-04-02 | 更新于: 2026-05-11

最近在开发过程中遇到了一个问题,就是当我用 22.1999…的约束(请注意这里是约束)设置一个 CollectionView 的左右边距时,在 iPhone 8 和 iPhone X 上绘制出来的左边分别为 22 和 22.33,这微小的数值差距,导致了本该显示 4 个元素的 CollectionView 在 iPhone X 上只显示了 3 个,问题实例看这里。

为什么变成了 22 和 22.33

iPhone 8 iPhone X
UIKit Size 375*667 375*812
分辨率 750*1334 1125*2436
UIKit Scale factor 2 3
阅读全文 »

CocoaPods的AppIcon错误

发表于 2019-03-15 | 更新于: 2026-05-11

不知道大家在 pod sepc lint 或者 pod repo push 验证或者推自己的 podspec 时有没有遇到这个错误

1
error: None of the input catalogs contained a matching stickers icon set or app icon set named "AppIcon"

当初我使用的还是 1.4.0 的版本,要使用一个新特性,更新到了 1.5.x,结果报了上面的错误,本来以为会在后面的版本当中修复,结果在 1.5.x 和 1.6.x 的版本中都没有解决,现在有 1.7.0 的 beta 版了,不知道这个问题修复没有,等 release 版本发布之后去看下。那我们要怎么度过这段艰难的时期呢,大致有以下几种方案:

  1. 拿到 podspec 文件强推到 podspec 仓库
  2. 注掉 CocoaPods 校验逻辑
  3. 在你的 pod 当中添加一个冗余的 Images.xcassets
  4. 不同版本的 CocoaPods 配合使用
阅读全文 »
12…6
树海

树海

58 日志
1 分类
21 标签
RSS
GitHub Weibo
© 2026 树海
由 Hexo 强力驱动
|
主题 — NexT.Muse